JavaScript中取消转义和号字符

5
我遇到了一个问题,无法正确显示包含转义字符的值(例如,撇号存储为\'而不是',括号则存储为&gt;&lt;而不是><)。
我的数据库中存储的项目具有相应地转义的字符(' < >分别转义为\' &lt; &gt;)。当我尝试使用JavaScript动态添加它们到页面时,在Firefox中以转义形式打印出来,而不像在IE中返回其正常值(HTML中打印出&lt;而不仅仅是<)。
<html>
    <head>
        <script type="text/javascript">
         $(document).ready(function() {
            var str = "&gt;";
            $(document.body).html(str);
         });
        </script>
    </head>
    <body>

    </body>
</html>

我知道如果我只是简单地进行替换,我可以正确地打印出来,但这样做会允许HTML代码的注入,这就是为什么我首先转义字符串的原因。
补充一下:首先,我对我的初始帖子中的错误表示歉意。经过仔细检查,在我使用$().html()的情况下,字符串会正确地打印出来。当它们没有正确打印时,是我在使用像下面这样的代码。
var str = "&gt;";
$('#inputField').val(str);

在这种情况下,文本 ">" 被显示为 "&gt;"。有没有什么办法可以修复这个问题?

1
那些 $ 字符是错误的吗?你一开始用的是 &,然后变成了 $。你使用了两种不同的编码吗? - James Montagne
你为什么不能直接使用unescape函数呢?http://www.w3schools.com/jsref/jsref_unescape.asp - mrtsherman
不确定你的问题在哪里。使用 $(document.body).html(" 3 is &gt; 1"); 它完美地工作。http://jsfiddle.net/xJwuD/ - Ruan Mendes
另一个需要注意的事情是:将HTML存储起来会使得在非HTML格式中显示文本变得更加困难,例如将其传递给alert或prompt。我通常会存储用户输入的内容,并对其进行转义以适应我要显示的任何格式(HTML、PDF、alert、JSON)。如果您的应用程序永远不会将其显示为除HTML之外的任何内容(如alert),那么它可以正常工作。 - Ruan Mendes
他们是一个错误。我已经编辑了第一篇帖子。对于造成的混淆,我很抱歉。 - Will Reese
3个回答

13
你需要这样解码它们:
$('#myText').val($("<div/>").html(str).text());

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

你也可以将解码部分移动到函数中,并调用该函数:

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

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

1
这正是我想要的。谢谢! - Will Reese

0

这种情况不会发生,至少在使用jQuery时不会。如果你真的这样写:$(document.body).html('&lt;div&gt;'),你将会在屏幕上看到打印出了<div>而不是一个div标签。如果你在做一些问题中没有列出来的事情:

要么使用.text()代替.html(),要么用&amp;替换所有的&

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

它们都打印例如 &gt; 而不是 > - pimvdb
我认为这实际上与他想要的相反。他希望它显示 <,但在 FF 中却显示为 &lt; - James Montagne
是的,我意识到了并编辑了问题。简单的答案是他正在做与发布的内容不同的事情。代码应该可以工作(除了它在头部且没有引用jQuery)。 - user578895

0
首先,您无法运行示例中的代码。 document.body在HEAD标记中无法进行操作。 您必须在文档加载后运行它。 如果我将您的代码放在一个安全的位置运行,就像您在这里看到的那样,它可以正常工作。
所以...您的情况肯定比您在此处展示的简单示例更复杂。 当代码放置在正确的位置时,您可以看到您的简单示例在这里可以正常工作。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接