为什么'<'显示为<

时间:2009-06-11 15:35:09

标签: java

我正在输出一个像我这样的java类的字符串

String numQsAdded = "<div id='message1'>"+getQuestion()+"</div>";

此字符串将作为XMLHttpRequest发送回客户端。所以,在我的jsp页面中,我有一个javascript警报方法,它打印出从服务器返回的字符串。它翻译'&lt;'到&lt;和'&gt;'到&gt;

我怎么能避免这个?

我尝试将字符串更改为:

String numQsAdded = "&lt;div id='message1'&gt;"+getQuestion()+"&gt;/div&lt;";

但这会产生更糟糕的影响。那么'&amp;'被翻译为'amp'

6 个答案:

答案 0 :(得分:5)

XMLHttpRequest在发送之前对字符串进行编码。你将不得不unescape字符串。 在客户端javascript,尝试使用:

alert(unescape(returned_string))

答案 1 :(得分:3)

&lt;是显示“&lt;”的方式在html中,它是从XMLHttpRequest生成的。尝试使用XMLRequest

答案 2 :(得分:2)

它是“&lt;”的实体引用而&amp; gt;是“&gt;”的实体参考你需要使用unescape()方法来取消字符串

答案 3 :(得分:2)

保罗费舍尔的答案是对的。我会花点时间解释一下原因。来自服务器的HTML内容编码是一种安全措施,可以保护您的用户免受脚本注入攻击。如果您只是unescape()来自服务器的内容,您可能会使您的用户面临风险,以及您网站的声誉。

尝试做保罗说的话。这并不困难,而且更加安全。为了方便起见,这是一个示例:

var divStuff = document.createElement('div');
divStuff.appendChild(containerElement);
divStuff.id = 'message1';
divStuff.innerHTML = getQuestion();

这样更加安全,可以为您的应用程序中的表示层提供更好的分离。

答案 4 :(得分:1)

最好在您的邮件中发回原始字符串,然后让客户端Javascript创建一个div,其中包含message1类,以便将其放入。如果您决定,这也会有所帮助改变通知的布局或风格。

答案 5 :(得分:-2)

我认为你不能避免这种情况。这就是“&lt;”用HTML表示,结果在HTML页面上就可以了。