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

时间:2013-01-02 22:05:06

标签: javascript html

  

可能重复:
  How to escape HTML

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

e.g。

var unsafestring = "<oohlook&atme>";
var safestring = magic(unsafestring);

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

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

5 个答案:

答案 0 :(得分:49)

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

然后使用var unsafestring = "<oohlook&atme>";,您将使用htmlEntities(unsafestring);

答案 1 :(得分:26)

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

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

var safestring = $('<div>').text(unsafestring).html();

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

您可以使用比jQuery更紧凑的库,例如HTML Encoder and Decode

答案 2 :(得分:24)

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

document.body.appendChild(document.createTextNode("Your&funky<text>here"))

答案 3 :(得分:11)

您需要转发<&。逃避>也不会伤害:

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

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

function magic(input) {
    return $('<span>').text(input).html();
}

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

答案 4 :(得分:-4)

唯一需要转义的字符是<。 (>在标签之外毫无意义。)

因此,您的“神奇”代码是:

safestring = unsafestring.replace(/</g,'&lt;');