# Rich Text 编辑器在主题中以多种方式破坏空格字符

**URL:** https://meta.discourse.org/t/rich-text-editor-in-topics-breaks-white-space-characters-in-multiple-ways/381027
**Category:** Bug
**Tags:** composer, markdown, code
**Created:** [2025年八月30日 20:33 UTC](https://meta.discourse.org/t/rich-text-editor-in-topics-breaks-white-space-characters-in-multiple-ways/381027 "2025-08-30T20:33:19Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![rimelek](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rimelek/32/388138_2.png) [@rimelek](https://meta.discourse.org/u/rimelek)
#### Post date: [2025年八月30日 20:33 UTC](https://meta.discourse.org/t/rich-text-editor-in-topics-breaks-white-space-characters-in-multiple-ways/381027/1 "2025-08-30T20:33:19Z")

</div>

大家好！

在本主题中，我将引用其他主题，但我相信我将描述一个比其他报告提到的问题更大的问题。

## 我的测试环境

- 操作系统：MacOS 15.6.1
- 浏览器：Google Chrome 139.0.7258.140 (官方构建) (arm64)

## 原始观察结果

我注意到撰写器中的富文本编辑器经常会破坏代码块。用户开始将他们的代码和日志发布在单行中，我最初以为他们在将内容复制到撰写器时犯了错误。帖子行之间根本没有空格字符，不仅仅是换行符。

有时用户会发布多个单行代码，导致 YAML 缩进丢失。有时多行代码被突出显示为单行，有时代码块中的单行。这种情况发生得太频繁了，以至于我昨天测试了富文本模式，但推迟了报告。今天，我无法重现该问题，但在富文本编辑器中找到了另一种破坏代码中换行符的方法。

我不确定这是否是一个错误，所以我只是与我们的版主讨论了这个问题，等待 bug 已修复的确认。然后才发现我们甚至没有找到相同的行为，但所有问题都与空格有关。除了我无法重现另一位版主提到的问题，但我意识到这是因为他从代码编辑器或终端复制了文本，而我从论坛中我自己的先前代码块复制了文本，因此空格问题有所不同。

## 破坏代码块中空格的不同方法

### 第一种方法

- 从终端复制输出
- 在富文本模式下将输出粘贴到撰写器中，如下所示（`runc` 不带参数的输出部分）

```plaintext
COMMANDS:
   checkpoint checkpoint a running container
   create create a container
   delete delete any resources held by the container often used with detached

```

- 您将看到多行输出，但缩进已删除
- 现在意识到您想要一个代码块，通过选择文本并单击“代码”按钮将其设为一个。
- 现在代码有点奇怪，因为它看起来像代码，但不是代码块。切换回 markdown 以查看原因并注意以下几点：

```plaintext
`COMMANDS:`
`checkpoint checkpoint a running container`
`create create a container`
`delete delete any resources held by the container often used with detached container`

```

- 如上所示，文本的每一行都变成了单行代码。  
（感谢 @per1234 将相关 bug 报告链接到下方 [Rich Text editor in topics breaks white-space characters in multiple ways - #2 by per1234](https://meta.discourse.org/t/rich-text-editor-in-topics-breaks-white-space-characters-in-multiple-ways/381027/2?u=rimelek%EF%BC%89)

### 从同一主题中的另一个主题或另一篇文章复制代码

我找到的现有主题：[`white-space` CSS property of clipboard data not respected when pasting in rich text editor](https://meta.discourse.org/t/white-space-css-property-of-clipboard-data-not-respected-when-pasting-in-rich-text-editor/379035)

当然，这不是在 Discourse 中复制的正确方式，因为您有一个用于选择文本的“引用”按钮，该按钮通常也适用于代码块的一部分，并且您还在每个代码块的角落有一个复制按钮，但这就是我注意到问题的方式，复制按钮也无法正常工作。

- 从 HTML 页面复制多行代码
- 将其粘贴到富文本模式的撰写器中
- 注意换行符已消失
- 此时，您可能会认为它仅在 HTML 中，因此将其设为代码
- 换行符没有回来

### 使用另一篇文章中代码块右上角的复制按钮

- 将鼠标指针移到现有代码块上方
- 注意右上角出现了一个小的“复制”按钮
- 单击该按钮复制代码
- 将其粘贴到富文本模式的撰写器中
- 换行符被保留，但缩进与直接从 HTML 复制时一样消失了。
- 将其设为代码块，并获得多个没有缩进的单行代码

### 可能已修复在切换回 MarkDown 时发生的问题

- 在富文本编辑器中编写代码块
- 看到一个完美的多行代码块
- 切换回 MarkDown
- 看到单行而不是代码块
- 注意它不再是代码块，但如果文本很长，您可能会错过缩进也消失了
- 将其设为代码块
- 发布它并获得一个代码块，其中包含单行，换行符被完全删除，甚至没有保留空格

同样，这是我今天无法重现的一个，我也没有搜索发布说明以查看它是否已修复，但我也没有在其他主题中找到此问题的报告。

## 结论

因此，富文本模式似乎在多个方面都存在代码块问题。它使审核更加困难，因为我们经常假设用户没有正确格式化他们的帖子，因此我们链接了我们的格式指南，而这在富文本模式下不起作用，但这不成问题，因为指南可以修改。但是，用户实际上会尝试格式化他们的帖子，但由于富文本编辑器而失败。

由于我注意到的原始问题可能已经修复，因此在我看来，一些用户从富文本编辑器开始，不喜欢它，切换到 Markdown，意识到他们破坏了代码块，试图修复，但无法修复并且没有再次粘贴所有内容。

现在，我还会提到这个关于完全禁用富文本编辑器的主题：[How can i set disable Markdown & Default to Rich Text](https://meta.discourse.org/t/how-can-i-set-disable-markdown-default-to-rich-text/370335)

我链接它是因为这是我昨天在搜索现有报告时找到的第一个主题之一，我只是将默认值改回了 MarkDown。我在这里停止，以避免任何人对此部分做出反应，我可能会在另一个主题中添加一些注释。

附注：我在这篇文章中使用了校对功能。太棒了！

---

<div class="post-metadata">

### Author: ![per1234](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/per1234/32/569645_2.png) [@per1234](https://meta.discourse.org/u/per1234)
#### Post date: [2025年八月30日 21:00 UTC](https://meta.discourse.org/t/rich-text-editor-in-topics-breaks-white-space-characters-in-multiple-ways/381027/2 "2025-08-30T21:00:17Z")

</div>

> [@rimelek](#):
>
> 文本的每一行都变成了单行代码

这里有一个专门的错误报告：

> [@当对多行选择应用“预格式化文本”格式时，使用了不正确的格式](https://meta.discourse.org/t/inline-formatting-used-when-preformatted-text-formatting-applied-to-multi-line-selection/378678):
>
> 优先级/严重性： 中 平台 操作系统 Windows 11 浏览器 Google Chrome 139.0.7258.67 Discourse dee24bd73b158ba97453f20035eabce430a1abcd 描述： “预格式化文本”有两种样式： 行内：用于散文段落中的非散文内容（例如，“调用 foo 函数”），或单行非散文内容。 块：用于多行非散文内容。 用户在使用编辑器时，可以选择以下两种应用格式的方法之一： 主动：在添加要格式化的内容之前切换格式模式。 被动：先以未格式化的形式添加内容，然后选中该内容并应用格式。bug 在“富文本编辑器”模式下使用编辑器时，当多行被选中并被动应用“预格式化文本”格式时，会应用行内样式。这导致帖子难以阅读，并且非散文内容难以复制（这是共享代码的常见要求）。 可复现步骤： 打开编辑器。 将编辑器模式开关置于“富文本编辑器”位置。 在帖子中添加以下内容： void setup() { // put your setup code here, to run once: } void l…

---

<div class="post-metadata">

### Author: ![rimelek](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rimelek/32/388138_2.png) [@rimelek](https://meta.discourse.org/u/rimelek)
#### Post date: [2025年八月30日 21:20 UTC](https://meta.discourse.org/t/rich-text-editor-in-topics-breaks-white-space-characters-in-multiple-ways/381027/3 "2025-08-30T21:20:46Z")

</div>

谢谢！我以为我已经花了足够的时间搜索了，但我没有找到这个。

---

<div class="post-metadata">

### Author: ![j.jaffeux](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/j.jaffeux/32/60297_2.png) [@j.jaffeux](https://meta.discourse.org/u/j.jaffeux)
#### Post date: [2025年八月31日 09:34 UTC](https://meta.discourse.org/t/rich-text-editor-in-topics-breaks-white-space-characters-in-multiple-ways/381027/5 "2025-08-31T09:34:51Z")

</div>

您好 @rimelek，感谢您的详细报告，我们对此表示赞赏。

我们已将其添加到我们的待办事项列表中（其中一部分是我们已经开始着手处理的主题），但可能需要几周时间才能处理。

---

<div class="post-metadata">

### Author: ![renato](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/renato/32/383632_2.png) [@renato](https://meta.discourse.org/u/renato)
#### Post date: [2025年十月15日 13:11 UTC](https://meta.discourse.org/t/rich-text-editor-in-topics-breaks-white-space-characters-in-multiple-ways/381027/6 "2025-10-15T13:11:44Z")

</div>

> [@rimelek](#):
>
> 所以，看起来富文本模式在多种方式下都存在代码块问题。

自该报告发布以来，我们进行了一些改进，主要是工具栏操作在行内/块之间更具上下文感知能力，并且支持在多个段落和单个代码块之间来回切换。

我认为剩下的“问题”是，如果你在编辑器中粘贴纯文本，并且没有标识它是预格式化文本，我们就无法自动创建一个代码块——例如，从我的终端复制，它只会添加一个`plain/text`剪贴板，而我们目前需要一个带有`pre`元素的`text/html`才能自动创建一个代码块。

你能检查一下自那时以来情况是否有所改善吗？并告知我们你是否仍然认为有任何行为不正确的。

谢谢！
