富文本编辑器将 bbcode 转换为显示数学

描述

当将 bbcode 粘贴到富文本编辑器中时,方括号会被转义为 \\[\\]。然而,这使得它成为一个有效的显示数学块,因此被错误地渲染为数学公式。

复现步骤

  1. 复制以下文本

    [details="summary"]
    some text
    [/details]
    
  2. 粘贴到类似 notepad.exe 的程序中

  3. 从 notepad.exe 复制以移除格式信息

  4. 粘贴到富文本编辑器中

  5. 文本应显示为代码;取消选中“代码”切换按钮以使其成为纯文本

或者,您可以手动在富文本编辑器中输入上面显示的 bbcode。

预期行为

要么

summary

some text

这是可以的,因为这是 bbcode 的原始含义,或者

\[details=“summary”\]
some text
\[/details\]

这也是可以的,因为这是您在所见即所得编辑器中看到的内容。

实际行为

\[details=“summary”\]
some text
\[/details\]

这是不行的。

2 个赞

我无法重现此问题。我已在我的 Macbook Pro 和 Windows 台式机上进行了尝试,并且能够完全按照您的重现说明进行操作。

在这两种情况下,我都使用了 Firefox 网页浏览器访问了该网站。

2 个赞

嗨,马克,

您能通过在富文本编辑器中手动输入一些 bbcode(即不要粘贴进去)来重现这个问题吗?剪贴板格式化确实是一个复杂的问题……

如果您有人粘贴 bbcode,您可以尝试禁用 discourse_math_enable_latex_delimiters

但我无法重现这个问题。在我的情况下,剪贴板上可用的内容是:

Formats: TIMESTAMP,TARGETS,SAVE_TARGETS,MULTIPLE,STRING,UTF8_STRING,TEXT,text/plain,text/plain;charset=utf-8,chromium/x-internal-source-rfh-token,chromium/x-source-url
'[details=\"summary\"]\\nsome text\\n[/details]'

或者纯文本版本:

Formats: TARGETS,UTF8_STRING
'[details=\"summary\"]\\nsome plain text\\n[/details]\\n'

使用浏览器复制/粘贴(而不是复制按钮),我的剪贴板上有:

Formats: TIMESTAMP,TARGETS,SAVE_TARGETS,MULTIPLE,STRING,UTF8_STRING,TEXT,text/html,text/plain,text/plain;charset=utf-8,chromium/x-internal-source-rfh-token,chromium/x-source-url
UTF8_STRING:
b'[details=\"summary\"]\\nsome text\\n[/details]'
text/html:
b'\u003cspan style=\"color: rgb(199, 199, 199); font-family: \u0026quot;JetBrains Mono\u0026quot;, Consolas, Monaco, monospace; font-size: 15.75px; font-style: normal; font-variant-ligatures: none; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: pre; background-color: rgba(0, 0, 0, 0.25); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;\"\u003e[details=\"summary\"]\\nsome text\\n[/details]\u003c/span\u003e'
text/plain:
b'[details=\"summary\"]\\nsome text\\n[/details]'
text/plain;charset=utf-8:
b'[details=\"summary\"]\\nsome text\\n[/details]'

但即使那样粘贴也没问题。

是的,我现在可以通过在富文本编辑器中输入以下内容来验证此行为:

details=”summary”

这里是一些并非那么隐藏的细节。

/details

话虽如此,富文本编辑器提供了通过点击界面输入此类内容的工具。如果你想输入隐藏的细节,我想你应该使用该界面。

让我们看看它是否有效:

摘要

这段文字真的被隐藏了!!

1 个赞

看来我的系统向剪贴板注入了一个 <pre><code>

> arguments[0].clipboardData.getData('text/html')
'<pre><code class="lang-plaintext hljs language-plaintext">[details="summary"]
some text
[/details]
</code></pre>' 

无论如何,重点是您在所见即所得编辑器中看到的内容与您实际获得的内容不符。

是的!

在我们的实例上发生的情况是,有人提供了一个模板供其他人填写;类似于……

[details="第一部分"]
- [ ] 勾选
- [ ] 勾选
- [ ] 勾选
[/details]
[details="第二部分"]
- [ ] 勾选
- [ ] 勾选
- [ ] 勾选
[/details]
...

……然后许多人(出乎意料地)返回了显示数学公式,例如……

\[details=“第一部分”\]

  • \[ \] 勾选
  • \[x\] 勾选
  • \[ \] 勾选
    \[/details\]
    \[details=“第二部分”\]
  • \[x\] 勾选
  • \[ \] 勾选
  • \[x\] 勾选
    \[/details\]

再次感谢您的关注!

1 个赞