Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java->;Apache Commons StringEscapeUtils->;逃逸脚本_Java_Javascript_String_Escaping_Stringescapeutils - Fatal编程技术网

Java->;Apache Commons StringEscapeUtils->;逃逸脚本

Java->;Apache Commons StringEscapeUtils->;逃逸脚本,java,javascript,string,escaping,stringescapeutils,Java,Javascript,String,Escaping,Stringescapeutils,对于一个非常简单的ajax名称查找,我将从客户端网页向服务器(Tomcat 5.5,Java 5)发送一个id,在数据库中查找并返回一个字符串,该字符串被分配给客户端中的javascript变量(然后显示) 接收该值的javascript代码非常标准: //client code - javascript xmlHttp.onreadystatechange=function() { if (xmlHttp.readyState==4) { var result = xm

对于一个非常简单的ajax名称查找,我将从客户端网页向服务器(Tomcat 5.5,Java 5)发送一个id,在数据库中查找并返回一个字符串,该字符串被分配给客户端中的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%>";
//带有内联struts的javascript代码
var myJavasriptString=“”;

还是我遗漏了什么,在最初的情况下,我仍然有一个合理的理由逃跑?(当它作为一系列字节返回给ajax onreadystatechange处理程序并分配给js变量时)

是的,我认为在这种特殊情况下,转义是不必要的(请参阅下面的其他注释)