【问题标题】:Chrome inserts non-breaking spaces into copy and pasted contentChrome 在复制和粘贴的内容中插入不间断空格
【发布时间】:2015-03-17 18:21:02
【问题描述】:

我说的是 contenteditable div 内部的内容,目标是同一个 contenteditable div。因此不涉及外部程序。

这个 div 中的 HTML 结构是每个单词都在一个 span 内,其中包含我们需要跟踪的一些数据。然后空格作为跨度之间的文本节点留下。这在大多数情况下都可以正常工作(拧你换行),但我在复制和粘贴时遇到了一个奇怪的问题。

Chrome 变成了这个

<span attrs="stuff">word</span> <span attrs="stuff">another</span>

进入这个:

<span attrs="stuff">word&nbsp;</span><span attrs="stuff">another</span>

或者这个:

<span attrs="stuff">word</span><span style="line-height: 16.79999">&nbsp;</span><span attrs="stuff">another</span>

这显然意味着如果用户复制和粘贴超过一行,那么格式就完全搞砸了,跨度的内容发生了变化,这使我们需要跟踪的数据无效。

核心问题是 div 中的其他内容可能出于真实原因包含不间断空格,因此如果我全局开始将它们换出,那么我可能会破坏它。

对于我的跨度和我的 attrs,我知道其中应该包含什么,因此很容易去除不间断的空格并将其恢复到应有的状态。但是对于这些奇怪的线高的跨度,我不知道如何在不破坏所有内容的情况下清除它们。

现在,我已经删除了所有仅包含不间断空格的插入跨度。但我真正想要的是要么首先阻止 Chrome 这样做,要么是一种明确的方法来识别有问题的额外跨度,以便我可以安全地清理它们,而不会破坏任何出于真实原因而存在的类似跨度。我想我可以使用这个奇怪的 line-height,但感觉很脆弱且不安全。

如何防止跨度出现或明确识别它们?

【问题讨论】:

  • 您有可以发布的示例吗?我不太明白你想做什么。您是否在解析 contenteditable div 并使用 标签包装单词?
  • html encode/decode 能解决你的问题吗
  • @Yoink:不,我是通过 JS 将内容插入到 div 中。然后用户复制并粘贴它。这是一个富文本框,所以它可能包含很多奇怪的东西,用户也可以尝试复制和粘贴,所以我无法对传入的内容做出假设,除非它被明确标记为我的。

标签: javascript html google-chrome


【解决方案1】:

问题不仅仅是 Chrome 问题。每当你将 HTML 代码复制到某个地方时,就会发生这样的事情。

这就是您可以使用 CKEditor 等编辑器的原因。他们拥有先进的过滤技术来删除这些糟糕的 HTML 代码。

我建议使用剪贴板程序来查看从不同位置复制时的 HTML 代码:https://softwarerecs.stackexchange.com/questions/17710/see-clipboard-contents-hex-text

但在我看来,自行实施这将是浪费时间。

CKEditor 可以很好地配置以防止出现错误的 HTML 代码。

CKEditor 的最新版本具有非常复杂的内容过滤方法。它被称为“高级内容过滤器”。

基本上,“高级内容过滤器”意味着:整个 HTML 代码被解析或检查。如果没有与给定 HTML 代码匹配的规则,则将其过滤掉。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    相关资源
    最近更新 更多