有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么“<”显示为&lt;

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

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

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

我怎样才能避免这种情况

我已尝试将字符串更改为:

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

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


共 (6) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

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

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

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

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

  3. # 3 楼答案

    我认为你无法避免。这就是为什么“<是用HTML表示的,结果在HTML页面上是可以的

  4. # 4 楼答案

    &lt;是表示“<在html中,由XMLHttpRequest生成。尝试使用XMLRequest

  5. # 5 楼答案

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

    alert(unescape(returned_string))
    
  6. # 6 楼答案

    它是“<;”的实体引用而;燃气轮机;是“>;”的实体引用您需要使用unescape()方法对字符串进行unescape