合并的 markdown 格式与 html 混合导致图片无法加载

这是来自我们社区博客的 Fedora 项目讨论站点上的一篇帖子片段:

<p>请告诉我们您的想法。既然现在有了搜索引擎字段,您会将其用作主页吗?您认为我们还能如何进一步改进它?</p> ![](upload://na9g3dGvhEU753JEnGrz8xER4XS.png)<p class="has-text-align-center">或者</p> ![](upload://def2zSzNAJtyuOorvTI2eV7rGW1.png)<p>如果您想查看更多内容,请查看 <a href="https://discussion.fedoraproject.org/t/how-do-you-feel-about-the-new-design-of-start-fedoraproject-org-page/28689">Figma 上的草稿</a>。</p>

看到那些 Markdown 图片行实际上并没有在新行开始了吗?这导致图片无法显示。如果我编辑消息并在每个 ![] 之前添加一个回车符,图片就能正常显示。

我们能否通过更改设置来解决这个问题?还是这只是插件中的一个错误?

@mattdm

如果它们已公开发布,能否分享原始 WP 帖子和带有摘要的 Discourse 帖子的链接?

WP Discourse 插件本质上只是将 WP 帖子中发现的任何 HTML 传递给 Discourse,然后 Discourse 会对其进行处理以包含在 Discourse 帖子中。因此,WP 帖子在 Discourse 中的 HTML 片段如何显示,取决于两件事:

  1. WP 中 HTML 的原始结构(例如
  2. Discourse 的 Markdown 解析器如何解析 HTML 以在 Discourse 帖子中显示(例如)。

所以,这要么是 WP HTML 结构问题,这基本上超出了 WP Discourse 或 Discourse 本身的范围,要么很大程度上是关于 HTML 解析器应该如何运作的观点问题,尽管有时在这方面确实可以做出明显的改进。

话虽如此,有时深入探讨解析细节也是有益的。因此,如果你有关于 WP 帖子 HTML 结构的更多细节,请分享,我会进一步调查 :slight_smile:

我在这个由 RSS 轮询插件(不是 WordPress 插件)创建的 Discourse 帖子中遇到过类似的问题:

第一行中的 ™ 实际上是一个 HTML <img> 标签,RSS 插件确实正确地将其带过来了。然而,当 Discourse 执行“下载图片本地副本”步骤时,该帖子就出错了:

1 个赞

看起来 @mattdm 遇到的问题也是一样的:

2 个赞

@simonk 感谢您提供的有用调查。您两位都可以通过在站点设置中输入您的 WordPress 域名到“禁用的图片下载域名”字段来解决此问题。

如果您希望更深入地研究该问题,即以某种自动化方式处理,那么 @mattdm 的情况与您的情况之间的差异正说明了其中的复杂性。他期望浏览器对 HTML <p><img> 元素的处理方式能体现为 Markdown 中的换行符,而您期望的则几乎(但并非完全)相反,即图片仍应以内联方式显示,并保持与原始 HTML 中现有 <img> 元素相同的尺寸。

关于此问题的更多相关信息,您可以查看现有的相关帖子,例如:

2 个赞

感谢 @simonk —— 没错,正是这样。

@angus,这样做会有什么后果?是完全不显示图片,还是图片会交叉链接到 WordPress 站点上的原始图片?

不过,我希望我们都能同意,任何导致 Discourse 显示原始 Markdown 而非渲染它的行为都绝对是不正确的——尤其是当该 Markdown 是由插件生成的时候。我是不是漏掉了什么?

图片将直接热链接到原始图片。

抱歉,我有点困惑。我以为你担心的是换行问题?你的意思是发布后的版本(即你只是阅读而非编辑时)包含原始 Markdown,这是你的顾虑吗?

该插件仅发送原始 HTML。Markdown 是在 Discourse 处理帖子时生成的。

尝试一下 禁用图片下载域名 功能,看看效果如何。

正是由于缺少换行符,当 Discourse 向用户(而非编辑者)显示页面时,它不会在出现 ![](upload://def2zSzNAJtyuOorvTI2eV7rGW1.png) 的地方显示图片,而是直接显示这段文本。必须有人工介入,在帖子自动发布后对其进行编辑,并在每个图片实例前添加换行符,它们才能正常显示。

我可以这么做,但我更希望图片能被下载下来——如果其他网站宕机、博客内容变更等情况发生时,这确实是个不错的功能。而且我们离托管容量上限还远得很,所以不用担心存储空间的问题。

我明白了,谢谢澄清。老实说,鉴于我在上方链接的主题中讨论的原因,这种情况短期内不太可能改变。例如:

对我们来说,关键是保持内容的完整性,因此换行符方案可能不会实施。

问题在于,如果你试图自动修正你所描述的问题,可能会引发其他问题。目前的解决方案是将你的 WordPress 域名添加到 禁用图片下载域名 站点设置中。

编辑 我在这方面提出了一个小建议,但这只是推测性的,我要再次强调,目前的解决方案是为你的 WordPress 域名禁用图片下载。

我实在无法理解这里的核心问题。当前的行为是如何保证内容完整性的?显然并没有。

看起来,如果你打算用 Markdown 替换 HTML,那么将其替换为能正确渲染的 Markdown 是唯一的正确做法。

我们在 WordPress 端并没有做什么特别复杂的事情——只是使用了标准的区块编辑器,用户也以常规方式添加图片。

我会先尝试启用“禁用图片下载”设置,看看是否有帮助,但我真的非常希望这个问题能直接得到解决。

我理解你的立场,也并非认为那样不理想。但让一个以 Markdown 驱动的讨论引擎同时成为一个完美的 HTML 渲染引擎,绝非易事,即使个别案例表面上看起来很简单(例如,只需添加一个新行)。

在 Discourse 中能够完整渲染博客文章的 HTML 确实是一个不错的功能,但归根结底,这只是一个专注于 Markdown 格式讨论的系统中的众多功能之一。

如果你关注我所链接的讨论(包括 David 最近的帖子),你会发现我们在此问题上有一些可行的方向。其中一种方案或许能奏效,并解决这一特定情况。如果存在更简单的解决方案,我肯定会向 Discourse 提交 PR 来解决它。

如果你在使用禁用图片下载功能时遇到问题,请告诉我,我会与你协作解决。一旦我们在技术层面找到可行的推进路径,我会及时告知你。

2 个赞

谢谢!我非常感激!

我已更新了设置,稍后会向您反馈效果。