Java 为什么是'<';显示为&;书信电报;

Java 为什么是'<';显示为&;书信电报;,java,Java,我从java类输出一个字符串,如下所示 String numQsAdded = "<div id='message1'>"+getQuestion()+"</div>"; 但这有更糟糕的影响。然后将“&”翻译为“amp”是一种显示“XMLHttpRequest在发送字符串之前对其进行编码的方式。您必须取消对字符串的扫描。 在客户端javascript上,尝试使用: alert(unescape(returned_string)) 我认为您无法避免这一点。这就是“它是”

我从java类输出一个字符串,如下所示

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

但这有更糟糕的影响。然后将“&”翻译为“amp”

是一种显示“XMLHttpRequest在发送字符串之前对其进行编码的方式。您必须取消对字符串的扫描。 在客户端javascript上,尝试使用:

alert(unescape(returned_string))

我认为您无法避免这一点。这就是“它是”的实体引用的方式。您将需要使用unescape()方法取消字符串的scape

最好将原始字符串与您的消息一起发送回,并让客户端Javascript使用class
message1
创建一个
div
以将其放入。如果您决定更改通知的布局或样式,这也会有所帮助。

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

试着照保罗说的做。这并不难,而且更安全。为了方便起见,这里有一个示例:

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

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

您的问题将幽默地转化为<。您可能需要编辑它并放入代码标记或其他东西:)更具体地说,它们是XML实体而不是HTML实体。@DrJokepu:它们是HTML实体,不是XML实体。XML使用&#xx;。要在XML中使用,您需要一个DTD。@J-16 SDiZ您错了。阅读XML规范。在更复杂的Ajax情况下,这是不可能的。富UI元素被发送到下游。只要在服务器上生成内容并去除外部输入提供的标记/Javascript,安全性就会降低。我认为这对XML实体不起作用,因为(un)转义函数在url编码上起作用-例如,用%20替换空间。只需尝试运行警报(unescape(“”);(但不在onclick=”“标记中,在纯脚本定义中。
var divStuff = document.createElement('div');
divStuff.appendChild(containerElement);
divStuff.id = 'message1';
divStuff.innerHTML = getQuestion();