在javascript中取消加入&符号

时间:2011-07-14 17:31:54

标签: javascript jquery firefox escaping

我无法正确显示包含转义字符的值(即撇号存储为\'而不是',括号为><而不是{ {1}}和>)。

我的数据库中存储的项目的字符(<)分别转义为(' < >)。当我尝试使用JavaScript动态地将它们添加到页面时,它们会在Firefox中以转义形式打印出来,而不是像IE中那样返回正常值(\' &lt; &gt;正在打印到HTML而不是{{1 }})。

&lt;

我知道如果我只是进行替换,我可以正确打印,但通过这样做,我允许注入HTML代码,这就是我首先转义字符串的原因。

增加:

首先,我为我的帖子中的错误道歉。仔细检查后,在我使用$()。html()的情况下,字符串正确打印。它们无法正确打印的时间是我使用下面的代码时。

<

在这个例子中,文字“&gt;”显示,而不是“&gt;”。我有什么办法可以解决这个问题吗?

3 个答案:

答案 0 :(得分:13)

你需要像这样解码它们:

$('#myText').val($("<div/>").html(str).text());

演示:http://jsfiddle.net/QUbmK/

您也可以将解码部分移动到也可以调用它:

function jDecode(str) {
    return $("<div/>").html(str).text();
}

$('#myText').val(jDecode(str));

答案 1 :(得分:0)

这种情况不会发生,至少不会发生在jQuery上。如果您这样做,那么:$(document.body).html('&lt;div&gt;'),您将在屏幕上显示<div>,而不是div标记。如果你正在做你问题中未列出的事情:

使用.text()代替.html()或将所有&替换为&amp;

$(document.body).text(str);
$(document.body).html(str.replace(/&/g, '&amp;'))

答案 2 :(得分:0)

首先,您无法运行示例中的代码。 document.body还没有准备好在HEAD标签中进行操作。您必须在文档加载后运行它。如果我将您的代码放在一个安全的地方运行,它就可以正常工作了。

所以...你的情况必须比你在这里展示的简单例子更多。当代码放在正确的位置时,您可以看到您的简单示例正常工作:

http://jsfiddle.net/jfriend00/RDSNz/