在javascript中取消&符号的&符号

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

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

    $(document).ready(function() { var str = ">"; $(document.body).html(str); });      

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

添加:

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

 var str = ">"; $('#inputField').val(str); 

在这种情况下,显示文本“>”,而不是“>”。 有什么我可以做的来解决这个问题吗?

你需要像这样解码它们:

 $('#myText').val($("
").html(str).text());

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

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

 function jDecode(str) { return $("
").html(str).text(); } $('#myText').val(jDecode(str));

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

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

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

这种情况不会发生,至少不会发生在jQuery上。 如果你这样做,字面上: $(document.body).html('<div>') ,你将得到

打印到屏幕上,而不是div标签。 如果你正在做你问题中未列出的事情:

使用.text()而不是.html()或替换所有&&

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