&nbsp 无法在 javascript 中正确显示 [重复]

Posted

技术标签:

【中文标题】&nbsp 无法在 javascript 中正确显示 [重复]【英文标题】:&nbsp not displaying properly in javascript [duplicate] 【发布时间】:2021-06-12 18:14:46 【问题描述】:

我正在尝试使用 javascript 在我的页面中添加行。我最终计划从中生成 ascii 艺术,但这不是重点。出于某种原因,文本 |    | 正确呈现为 html 的一部分,但不是 textNode。我的 MRE 如下:

<!DOCTYPE html>
<html>
<head>
</head>
<body>
    <div id="Test">
        |&nbsp;&nbsp;&nbsp;&nbsp;|
    </div>
    <script>
        testDiv = document.getElementById('Test')
        testDiv.appendChild(document.createElement('br'))
        testDiv.appendChild(document.createTextNode('|&nbsp;&nbsp;&nbsp;&nbsp;|'))
    </script>
</body>

在 Chromium 上,它显示为:

|    |
|&nbsp;&nbsp;&nbsp;&nbsp;|

我已经尝试了大约 10 种不同的方法来对不间断空间进行编码,但无论如何我都会得到类似的结果。对于我能找到的每种编码,我都尝试过使用\$#。我没有在其他浏览器上尝试过。

【问题讨论】:

Duplicate of How to insert HTML entities with createTextNode?。与插入 HTML(.innerHTML.insertAdjacentHTML)相反,插入文本(.textContent.createTextNode)不会解析 HTML(包括 HTML 实体)。 要安全地解析 HTML 实体,请尝试 testDiv.appendChild(document.createTextNode(new DOMParser().parseFromString('|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|', "text/html").documentElement.textContent));。这将在无法执行任何脚本的独立文档中解析 HTML。 @SebastianSimon 你能详细说明你的安全评论吗?假设附加的字符串是可信的,我不明白为什么这是必要的。 @importhuh 字符串可能不受信任正是原因。 element.innerHTML = "&amp;nbsp;" 工作正常,但 element.innerHTML = '&lt;img src="." onerror="alert(1);"&gt;' 可能很危险。 DOMParser 方法不会发生此类 XSS 攻击。编写的代码也忽略了 HTML 元素,并且只获取 HTML 实体的结果文本内容。请参阅我对Find and replace specific text characters across a document with JS 的回答了解更多上下文。 【参考方案1】:

您可以在这种情况下使用 unicode 文字。

document.createTextNode("|\u00A0\u00A0\u00A0\u00A0|")

【讨论】:

【参考方案2】:

&lt;pre&gt;&lt;/pre&gt; 标记将您的文本括起来。它会在您键入时呈现。你不需要&amp;nbsp;

<pre>
|    |
</pre>
| |

Javascript 示例

<script>
function myFunction() 
  var x = document.createElement("PRE");
  var t = document.createTextNode("|     |");
  x.appendChild(t);
  document.body.appendChild(x);

</script>

【讨论】:

以上是关于&nbsp 无法在 javascript 中正确显示 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

.replace()无法在嵌入式JavaScript中运行

JavaScript

javascript中的&&

javascript 无法识别 .fbx 文件类型

JavaScript 无法获取最大值或最小值或数组

OOP Javascript - Getter & Setter