質問

非常に単純な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変数に割り当てられた場合)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top