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

如何用JavaScript编码字符串以在HTML中显示?,javascript,html,Javascript,Html,可能重复: 如何在JavaScript中将字符串转换为HTML e、 g var unsafestring=“”; var safestring=magic(不安全); 其中safestring现在等于“ohhlook&;atme” 我正在寻找magic(…)。 我没有对magic使用JQuery,唯一需要转义的字符是在标记之外没有意义) 因此,您的“魔法”代码是: safestring=unsafestring.replace(/如果您想使用库而不是自己使用,请执行以下操作: 最常用

可能重复:

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

e、 g

var unsafestring=“”;
var safestring=magic(不安全);
其中
safestring
现在等于
“ohhlook&;atme”

我正在寻找
magic(…)

我没有对
magic
使用JQuery,唯一需要转义的字符是
在标记之外没有意义)

因此,您的“魔法”代码是:

safestring=unsafestring.replace(/如果您想使用库而不是自己使用,请执行以下操作:
最常用的方法是为此目的使用jQuery:

var safestring = $('<div>').text(unsafestring).html();
var safestring=$('').text(unsafestring.html();
如果要对所有HTML实体进行编码,必须使用库或自己编写

您可以使用比jQuery更紧凑的库,如

函数htmlEntities(str){
返回字符串(str).replace(//&/g,“&;”).replace(//g,”).replace(//“/g,”);
}
因此,使用
var unsafestring=“”;
您将使用
htmlEntities(unsafestring);

您需要转义
也不会有任何伤害:

function magic(input) {
    input = input.replace(/&/g, '&amp;');
    input = input.replace(/</g, '&lt;');
    input = input.replace(/>/g, '&gt;');
    return input;
}
函数魔术(输入){
输入=输入。替换(/&/g,,&;);
input=input.replace(//g',);
返回输入;
}
或者让DOM引擎为您做一些不必要的工作(使用jQuery,因为我很懒):

函数魔术(输入){
返回$('').text(input.html();
}

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

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

document.body.appendChild(document.createTextNode("Your&funky<text>here"))
document.body.appendChild(document.createTextNode(“您的&funkyhere”))


错误:您仍然需要转义
&
。我想我习惯于允许用户使用字符实体,因为它们是无害的。我不认为这是OP所问的问题。“如何在JavaScript中将字符串转换为HTML?”而不是“如何在JavaScript中将此字符串转换为HTML?”他想要一个通用的解决方案。我不认为允许输入导致无效的标记是无害的。这对于特定的符号是很好的。引号只需要在属性中被使用。@ GDORON,关键是,只有5个字符需要被转义(AppSand,小于,单引号,双引号)。.Nope..如果您不需要在参数中使用转义字符串,您可以安全地使用任何引号…@gdoron示例与否,它仍然需要5个字符转义。这需要jQuery,其中a)问题没有标记,b)不需要。@j08691,是的,我注意到缺少的标记,它仍然没有说它不是最佳选项,因为他需要一个库,而最强大的js库也可以做到这一点。同意@j08691,它可以工作,但这只是一个繁重的解决方法。为什么要投票?@Derek你让我高兴:-)@Christophe,尽管这是一句老话。当有什么事情对他们有帮助时,人们就会投票。你可以只附加一个
文档。createTextNode(不安全)
@Derek使不安全的字符串url安全,而不是html安全。我不认为这是重复的:建议的原始版本解决了一个更具体的问题,需要更复杂的解决方案。最好的答案是使用
选项
类的
innerHTML
参考:+1非常好的一点,虽然从这个问题上还不清楚OP是只需要一个文本节点,还是需要将结果字符串与其他字符串组合。太棒了!一种简单的编码方法:)我喜欢第二个带有jQuery“hack”的“magic”版本。信息技术谢谢有人知道两者之间是否存在性能差异吗?jquery的速度慢吗?
function htmlEntities(str) {
    return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
}
function magic(input) {
    input = input.replace(/&/g, '&amp;');
    input = input.replace(/</g, '&lt;');
    input = input.replace(/>/g, '&gt;');
    return input;
}
function magic(input) {
    return $('<span>').text(input).html();
}
document.body.appendChild(document.createTextNode("Your&funky<text>here"))