2

非常に単純な 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 で使用できる別のエスケープ関数はありますか?

4

2 に答える 2

1

実際、これを読んだので、返送する文字列をエスケープする必要はまったくないと思います...つまり、結果の値がページに出力された場合、StringEscapeUtils.escapeJavaScriptが役立ちます。お気に入り:

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

それとも私は何かを逃していて、元のケースで脱出を行う正当な理由がまだありますか?(一連のバイトとしてajax onreadystatechangeハンドラーに返され、js変数に割り当てられた場合)

于 2008-10-30T21:46:02.933 に答える
1

以下は、私が試したすべてのブラウザーで機能します。

javascript:alert("a\u00F1os");

おそらく、文字列が誤って 2 回エスケープされている可能性があります。

于 2008-10-30T21:45:49.720 に答える