Java-> Apache Commons StringEscapeUtils-> escapeJavaScript
-
05-07-2019 - |
質問
非常に単純なajax名のルックアップでは、クライアントWebページからサーバー(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");
おそらく、誤って文字列が2回エスケープされています。
他のヒント
実際、読み直したので、実際に返送する文字列をエスケープする必要はない と思います。つまり、StringEscapeUtils.escapeJavaScriptが便利です結果の値が次のようにページに印刷された場合:
//javascript code with inline struts
var myJavasriptString = "<%=myJavaString%>";
または、私は何かを見逃していて、元のケースでエスケープを行う正当な理由があるのでしょうか? (一連のバイトとしてajax onreadystatechangeハンドラーに返され、js変数に割り当てられた場合)
所属していません StackOverflow