富文本编辑器粘贴内容时,发布时渲染的格式化内容中出现巧合的 Markdown

优先级/严重性:

中等

平台:

操作系统

  • Windows 11

浏览器

  • Google Chrome 141.0.7390.123

Discourse

fb4bd7951aa6ae8c814df702807c12ccb77bd3fd

描述:

"富文本编辑器"旨在提供“所见即所得”的体验,即在编辑器中看到的内容将完全按照发布帖子时的样子进行渲染。

从某些来源复制的文本除了纯文本(text/plain 类型)外,还可能以格式化形式(text/html 类型)存储在剪贴板中。

当文本粘贴到编辑器中时,如果剪贴板中存在格式化数据类型,则将使用该数据而不是纯文本类型。

由于语法的最小化特性,文本经常包含碰巧看起来像 Markdown 标记的内容。

:bug: 当粘贴的格式化内容包含某些巧合的 Markdown 标记时,已发布帖子的渲染方式与“富文本编辑器”中显示的方式不同。

可重现步骤:

巧合的列表标记

  1. 创建一个包含以下内容的 HTML 文件:
    <html>
      <body>
    <br />- foo
      </body>
    </html>
    
  2. 在您的网络浏览器中打开该文件。
  3. 复制网页内容。
  4. 打开帖子编辑器。
  5. 将编辑器置于“富文本编辑器”模式。
  6. 将复制的内容粘贴到编辑器中。
    :slightly_smiling_face: 文本被逐字粘贴,而不是被渲染为列表:

    - foo

  7. 发布帖子。

:bug: 内容没有像在编辑器中看到的那样被渲染,而是被渲染为无序列表:

  • foo

巧合的代码块标记

  1. 创建一个包含以下内容的 HTML 文件:
    <html>
      <body>
        <span style="white-space: pre">    foo</span>
      </body>
    </html>
    
  2. 在您的网络浏览器中打开该文件。
  3. 复制网页内容。
  4. 打开帖子编辑器。
  5. 将编辑器置于“富文本编辑器”模式。
  6. 将复制的内容粘贴到编辑器中。
    :slightly_smiling_face: 文本被逐字粘贴,而不是被渲染为代码块:

        foo

  7. 发布帖子。

:bug: 内容没有像在编辑器中看到的那样被渲染,而是被渲染为代码块:

foo

巧合的代码块标记与巧合的 BBCode

  1. 创建一个包含以下内容的 HTML 文件:
    <html>
      <body>
        <span style="white-space: pre">    [foo]</span>
      </body>
    </html>
    
  2. 在您的网络浏览器中打开该文件。
  3. 复制网页内容。
  4. 打开帖子编辑器。
  5. 将编辑器置于“富文本编辑器”模式。
  6. 将复制的内容粘贴到编辑器中。
    :slightly_smiling_face: 文本被逐字粘贴:

        [foo]

  7. 发布帖子。

:bug: 内容没有像在编辑器中看到的那样被渲染,而是被渲染为代码块,并且在括号前添加了反斜杠:

\[foo\]

附加信息:

我认为,富文本编辑器忽略粘贴内容中存在的、具有“text/html”类型的明显 Markdown 标记是正确的。此类内容中的任何有意格式都将由 HTML 标签定义,因此看起来像 Markdown 的内容很可能是巧合,而不是真正的标记。因此,这里的错误在于巧合的 Markdown 语法在发布时被渲染了;而不是它在编辑器中没有被渲染。


我能够在 try.discourse.org 的“安全模式”下重现该错误。

1 个赞