我无法正确显示包含转义字符的值(即撇号存储为\'
而不是'
,括号为>
和<
而不是{ {1}}和>
)。
我的数据库中存储的项目的字符(<
)分别转义为(' < >
)。当我尝试使用JavaScript动态地将它们添加到页面时,它们会在Firefox中以转义形式打印出来,而不是像IE中那样返回正常值(\' < >
正在打印到HTML而不是{{1 }})。
<
我知道如果我只是进行替换,我可以正确打印,但通过这样做,我允许注入HTML代码,这就是我首先转义字符串的原因。
增加:
首先,我为我的帖子中的错误道歉。仔细检查后,在我使用$()。html()的情况下,字符串正确打印。它们无法正确打印的时间是我使用下面的代码时。
<
在这个例子中,文字“&gt;”显示,而不是“&gt;”。我有什么办法可以解决这个问题吗?
答案 0 :(得分:13)
你需要像这样解码它们:
$('#myText').val($("<div/>").html(str).text());
您也可以将解码部分移动到也可以调用它:
function jDecode(str) {
return $("<div/>").html(str).text();
}
$('#myText').val(jDecode(str));
答案 1 :(得分:0)
这种情况不会发生,至少不会发生在jQuery上。如果您这样做,那么:$(document.body).html('<div>')
,您将在屏幕上显示<div>
,而不是div
标记。如果你正在做你问题中未列出的事情:
使用.text()
代替.html()
或将所有&
替换为&
:
$(document.body).text(str);
$(document.body).html(str.replace(/&/g, '&'))
答案 2 :(得分:0)
首先,您无法运行示例中的代码。 document.body还没有准备好在HEAD标签中进行操作。您必须在文档加载后运行它。如果我将您的代码放在一个安全的地方运行,它就可以正常工作了。
所以...你的情况必须比你在这里展示的简单例子更多。当代码放在正确的位置时,您可以看到您的简单示例正常工作: