WordPress 表情符号和 Discourse

你好,

关于表情符号,我使用的是 WordPress 的默认设置(如果有的话)。
在 WordPress 中,我写了一段包含字符表情符号的文本:

WordPress 会自动将它们转换为 SVG 格式的 Twitter 表情符号:

以下是第一个表情符号生成的 HTML 代码示例:

<span class="pq6dq46d tbxw36s4 knj5qynh kvgmc6g5 ditlmg2l oygrvhab nvdbi5me sf5mxxl7 gl3lb2sf hhz5lgdu"><img draggable="false" role="img" class="emoji" alt="👊" src="https://s.w.org/images/core/emoji/13.0.0/svg/1f44a.svg"> </span>

当帖子发布到 Discourse 时,HTML 会略有修改:

<span class="pq6dq46d tbxw36s4 knj5qynh kvgmc6g5 ditlmg2l oygrvhab nvdbi5me sf5mxxl7 gl3lb2sf hhz5lgdu">&#x1f44a; </span>

因为它在 span 标签中插入了表情符号的 HTML 实体。

结果是帖子格式美观,但表情符号并未转换为论坛所选的表情符号集:

请问有没有办法让表情符号使用论坛所选的集合进行显示?

这可能是 Discourse 本身的问题,而非插件所致。

如果您使用的是默认的 WordPress 表情符号处理功能,我推测您是将 Unicode 表情符号复制粘贴到了 WordPress 编辑器中。如果您这样做,发送到 Discourse 的原始帖子内容将仅包含这些 Unicode 表情符号。Discourse 通常会将它们转换为论坛的表情符号集。我确实可以在某些情况下复现此问题。

关于这一点,我稍后会再向您反馈。

3 个赞

@Canapin 你好 :slight_smile: 关于这个问题,这里有一个最新进展。

问题出现在以下情况:

  1. 你在 wp-discourse 中启用了“完整帖子内容”设置
  2. 你在 WordPress 中创建了一个帖子,且在插入表情符号之前至少有一行内容。

首先,能否请你确认一下你在这个案例中是否确实是这样操作的(特别是“完整帖子内容”设置)?

在这些情况下,wp-discourse 插件会将 HTML 发送到 Discourse,作为话题嵌入导入。当 Discourse 尝试在创建帖子时处理 HTML 时,可能会出现一些不同的问题,包括这个问题。例如,另一个相关问题是:https://meta.discourse.org/t/fix-broken-images-for-posts-created-by-the-wp-discourse-and-rss-plugins/160773。

从技术角度来看(我知道你懂技术 ;)),如果你尝试使用相关的 Discourse Ruby 类来解析包含 Unicode 表情符号的 HTML 字符串,就能直接看到这个问题的表现。

问题的技术细节
rails c
PrettyText.cook("<p>This is the sentence before the emojis</p><div>🦊🦊🦊🦊</div>")
=> "<p>This is the sentence before the emojis</p><div>🦊🦊🦊🦊</div>"

对比

rails c
PrettyText.cook("🦊🦊🦊🦊")
=> "<p><img src=\"/images/emoji/twitter/fox_face.png?v=9\" title=\":fox_face:\" class=\"emoji\" alt=\":fox_face:\"><img src=\"/images/emoji/twitter/fox_face.png?v=9\" title=\":fox_face:\" class=\"emoji\" alt=\":fox_face:\"><img src=\"/images/emoji/twitter/fox_face.png?v=9\" title=\":fox_face:\" class=\"emoji\" alt=\":fox_face:\"><img src=\"/images/emoji/twitter/fox_face.png?v=9\" title=\":fox_face:\" class=\"emoji\" alt=\":fox_face:\"></p>"

那么我们打算怎么做?

一般来说,WordPress 完整帖子 HTML 到 Discourse 帖子转换过程中出现的一些问题是意料之中的。Discourse 上保存的 WordPress 帖子记录,本质上就是该帖子的记录。

不过,@simon 和我正在积极改进 wp-discourse 和 Discourse 本身的处理流程,并进行了适当的优先级排序。在这之前,我们会先专注于其他几件事(例如上面提到的图片损坏问题)。因此,针对这个问题的官方修复还需要你稍等一段时间。

3 个赞

第一个表情符号之前确实存在 HTML 代码(因为 WordPress 将内容包裹在 <p> 标签中),并且已启用“完整帖子内容”选项。

感谢您的信息!

1 个赞

嘿,提醒一下,解决这个问题已列入我今年6月的议程。如果任何人有与此密切相关的问题,请告诉我,我会一并处理。

2 个赞