在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标签中进行操作。 您必须在文档加载后运行它。 如果我将您的代码放在一个安全的地方运行,它可以正常工作,你可以在这里看到。
所以…你的情况必须比你在这里展示的简单例子更多。 当代码放在正确的位置时,您可以看到您的简单示例正常工作:
这种情况不会发生,至少不会发生在jQuery上。 如果你这样做,字面上: $(document.body).html('<div>')
,你将得到
打印到屏幕上,而不是div
标签。 如果你正在做你问题中未列出的事情:
使用.text()
而不是.html()
或替换所有&
与&
:
$(document.body).text(str); $(document.body).html(str.replace(/&/g, '&'))