代码之家  ›  专栏  ›  技术社区  ›  roh

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

  •  4
  • roh  · 技术社区  · 17 年前

    我正在输出一个像我这样的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 回复  |  直到 15 年前
        1
  •  5
  •   Ryan Oberoi    17 年前

    xmlhttprequest在发送字符串之前对其进行编码。你得把绳子改短一点。 在客户端javascript上,尝试使用:

    alert(unescape(returned_string))
    
        2
  •  3
  •   KM.    17 年前

    &lt; 是在HTML中显示“<”的方法,它是从xmlHttpRequest生成的。尝试使用xmlrequest

        3
  •  2
  •   Matthew Vines    17 年前

    它是“<”的实体引用,而&gt;是“>”的实体引用,您需要使用unescape()方法取消字符串的外观。

        4
  •  2
  •   Joe Davis    17 年前

    保罗·费舍尔的答案是正确的。我要花点时间解释一下原因。服务器内容的HTML编码是一种安全措施,可保护用户免受脚本注入攻击。如果你只是简单地取消来自服务器的scape(),你可能会让你的用户处于危险之中,也会危及你网站的声誉。

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

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

    这将更加安全,并为应用程序中的表示层绘制更好的分隔。

        5
  •  1
  •   Paul Fisher    17 年前

    最好将原始字符串与消息一起发送回去,并让客户端javascript创建 div 随班 message1 把它放进去。如果您决定更改通知的布局或样式,这也会有所帮助。

        6
  •  -2
  •   paradisonoir    17 年前

    我认为你无法避免。这就是“<”在html中的表示方式,结果在html页面上是可以的。