Markdown, BBCode 和 Emoji 在 API Post 中未渲染

我正在使用 Discourse API 通过 PUT 更新帖子;更新已完成,但只有接受的 HTML 标签被解析。Markdown、BBCode 和表情符号未正确呈现。我正在使用 content type application/json 传递 PUT 请求,因为这实际上是一个 JSON 负载,并且是 PUT 请求唯一似乎被接受的内容类型,尽管文档说它是三个选项之一。

有人知道为什么通过 API 进行更新时渲染引擎无法解析这些内容吗?

1 个赞

我会查看日志,并查看原始 Markdown 字段中有什么内容。

3 个赞

我在日志中没有看到任何错误,并且原始载荷与我在执行 PUT 请求的 cURL 请求中指定的完全一致。当我拉取该主题的 JSON 视图时,我看到这个:


	<p><img src="https://global.discourse-cdn.com/standard10/uploads/wysterialane/original/1X/284fb6069edededf16b0830d468eaf03bc261616.webp" alt="mother of god shades GIF" data-base62-sha1="5KBSuBIpIj3xlACzeZINBKw7wEu" width="262" height="200" class="animated"></p><br>为什么这行不通? :face_with_symbols_over_mouth: <br>

其中的 GIF 是我放在 OP 中的,渲染引擎将其翻译成了 HTML,一切都很好。当我通过 API 添加 <br>为什么这行不通? :face_with_symbols_over_mouth: <br> 部分时,原始文本被发布了,但渲染引擎并没有对其做任何处理。这是预期的行为吗?我想一个解决方法是让我的服务来构建完整的 HTML 载荷并传递,这有点糟糕。

值得注意的是,我有一个单独的服务通过传入 webhook 发布到实时聊天线程,并且表情符号在聊天窗格中正确呈现。这似乎特定于 posts API。

表情符号和 HTML

我认为您在使用包装在 HTML 标签中的表情符号短代码时遇到的问题是预期行为。在 Discourse 的帖子编辑器中创建的帖子中可以重现此问题。例如,:face_with_symbols_over_mouth: 将在此段落中渲染为 :face_with_symbols_over_mouth:

如果我使用 p 标签创建段落,而不是依赖 Markdown 引擎来完成,则短代码将不会被渲染。例如:

<p>This sentence contains an emoji shortcode :face_with_symbols_over_mouth:</p>

This sentence contains an emoji shortcode :face_with_symbols_over_mouth:

Markdown

通过 API 发布 Markdown 的问题似乎是可行的,但可能有点棘手。使用终端中的 curl,类似以下内容应该可以工作:

m="### this is a heading
                                                                                                                                                           
This is a very short paragraph with some _emphasis_ on a word.

This is another paragraph with a  :slight_smile: emoji

- this
- is
- an
- unordered
- list

Followed by another paragraph.

1) and
2) an
3) ordered
4) list"

curl -X POST "http://localhost:4200/posts.json" -H "Api-Key: $api_key" -H "Api-Username: simon" -F "title=Markdown test one" -F "category=6" -F "skip_validations=true" -F "raw=$m"

上面请求中的 skip_validations 参数只是为了防止在测试时出现“正文太短”或“标题重复”之类的错误。它绕过了许多站点设置(最小帖子长度、正文最小熵、最小主题标题长度等)。

我不确定 BBCode 的问题。您尝试渲染的 BBCode 标签在添加到您的 Discourse 站点的帖子编辑器时是否有效?

1 个赞