Java - > Apache Commons StringEscapeUtils - > escapeJavaScript
-
05-07-2019 - |
题
对于一个非常简单的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变量时)
不隶属于 StackOverflow