对于一个非常简单的ajax名称查找,我将一个id从客户端网页发送到服务器(Tomcat 5.5,Java 5),在数据库中查找并返回一个字符串,该字符串被分配给一个javascript变量回到客户端(然后显示)。

接收该值的javascript代码非常标准:

//client code - javascript
xmlHttp.onreadystatechange=function() {
    if (xmlHttp.readyState==4) {
        var result = xmlHttp.responseText;
        alert(result);
        ...
    }
    ...
}

要返回字符串,我最初在服务器中有这个:

//server code - java
myString = "...";
out.write(myString.getBytes("UTF-8"));

如果不安全,哪个效果很好。后来,我将其替换为:

import org.apache.commons.lang.StringEscapeUtils;
...
myString = "...";
out.write(StringEscapeUtils.escapeJavaScript(myString).getBytes("UTF-8"));

但更安全的是,如果结果字符串包含像“ñ”这样的特殊字符,则无法正确显示该字符串。

例如,使用:

escapeJavaScript("años").getBytes("UTF-8");

发送:

an\u00F1os

给客户。

问题:是否有一种简单的方法可以在Javascript中解析生成的字符串,或者是否有可以在java中使用的备用转义函数来防止此问题?

有帮助吗?

解决方案

以下适用于我尝试的每个浏览器:

javascript:alert("a\u00F1os");

也许你的字符串被错误地转义了两次。

其他提示

实际上,现在我已经阅读了它,我认为我实际上需要转义我发回的字符串...也就是说,StringEscapeUtils.escapeJavaScript会很有用如果结果值打印在页面中,例如:

//javascript code with inline struts
var myJavasriptString = "<%=myJavaString%>";

或者我错过了什么,在原始情况下仍然有正当理由逃脱? (当它作为一系列字节返回给ajax onreadystatechange处理程序并分配给js变量时)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top