如何在JavaScript中编码字符串以便在HTML中显示?

Jam*_*mes 36 html javascript

可能重复:
如何转义HTML

如何在JavaScript中将字符串转换为HTML?

例如

var unsafestring = "<oohlook&atme>";
var safestring = magic(unsafestring);
Run Code Online (Sandbox Code Playgroud)

其中,safestring现在等于"&lt;ohhlook&amp;atme&gt;"

我在找magic(...).我没有使用JQuery magic.

j08*_*691 57

function htmlEntities(str) {
    return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
}
Run Code Online (Sandbox Code Playgroud)

那么var unsafestring = "<oohlook&atme>";你会用htmlEntities(unsafestring);

  • 这对于非常具体的符号很有用. (4认同)
  • @gdoron就是重点,只需要转义5个字符(&符号,小于,大于,单引号,双引号). (2认同)
  • @gdoron的例子与否,它仍然是5个字符逃脱. (2认同)

gdo*_*ica 30

如果您想使用库而不是自己动手:

最常用的方法是使用jQuery实现此目的:

var safestring = $('<div>').text(unsafestring).html();
Run Code Online (Sandbox Code Playgroud)

如果要对所有HTML实体进行编码,则必须使用库或自行编写.

你可以使用比jQuery更紧凑的库,比如HTML Encoder和Decode

  • 这需要jQuery,其中a)问题未被标记,b)不需要. (11认同)
  • 同意@ j08691,它可以工作,但这只是一个繁重的解决方法.为什么赞成票? (4认同)
  • @ j08691,是的,我注意到丢失的标签,它仍然没有说它不是最好的选择,因为他需要一个库,而最强大的js lib也可以做到这一点. (2认同)

Ole*_*kov 28

不要打扰编码.请改用文本节点.文本节点中的数据保证被视为文本.

document.body.appendChild(document.createTextNode("Your&funky<text>here"))
Run Code Online (Sandbox Code Playgroud)


Thi*_*ter 14

你需要逃避<&.逃避>也不会伤害:

function magic(input) {
    input = input.replace(/&/g, '&amp;');
    input = input.replace(/</g, '&lt;');
    input = input.replace(/>/g, '&gt;');
    return input;
}
Run Code Online (Sandbox Code Playgroud)

或者你让DOM引擎为你做脏工作(使用jQuery,因为我很懒):

function magic(input) {
    return $('<span>').text(input).html();
}
Run Code Online (Sandbox Code Playgroud)

这样做是创建一个虚拟元素,将您的字符串指定为其textContent(即没有特定于HTML的字符具有副作用,因为它只是文本)然后您检索该元素的HTML内容 - 这是文本但转换了特殊字符在必要的情况下到HTML实体.