2009-05-19 6 views
5

で値をエスケープ'&'はクッキーを壊します。アンエスケープJavaScriptは、我々はそれのような不正な文字が含まれている可能性があるため、Cookieの値をエスケープする必要がありますが、我々はJavaで再び読んでJavaScriptをウィッヒを通じてクッキー(サーブレット)</p> <p>を設定し、当社のウェブサービスにJAVA

ここでは、エスケープ(JavaScript)とエスケープ解除(JAVA)の透過的な方法はありますか?

おかげで、 ピーターGoddijnあなたは/アンエスケープをエスケープするCommons LangからStringEscapeUtilsを得Javaで

+0

「透過的な方法」を定義します。 – Cerebrus

答えて

7

JavascriptではencodeURIComponentからエスケープしますが、私があなたに与えたCommonsコンポーネントは、あなたのニーズを満たすと思います。

+0

encodeURIComponentからデコードしたい場合はこちらをご覧くださいhttp://stackoverflow.com/questions/607176/java-equivalent-to-javascripts-encodeuricomponent-that-produces-identical-outpu – reevesy

4

クライアントのJavaScript/ECMAScriptの:

encodeURIComponent(cookie_value) // also encodes "+" and ";", see http://xkr.us/articles/javascript/encode-compare/ 

サーバーのJava:

String cookie_value = java.net.URLDecoder.decode(cookie.getValue()); 

私はmy blog entryへのさらなる発見を追加します。

1

最も正確な方法は、あなたのJavaコードを使用してjavascriptをExcecuteすることです。以下のコードが役立つことを願っています。

ScriptEngineManager factory = new ScriptEngineManager(); 
    ScriptEngine engine = factory.getEngineByName("JavaScript"); 
    ScriptContext context = engine.getContext(); 
    engine.eval("function decodeStr(encoded){" 
      + "var result = unescape(encoded);" 
      + "return result;" 
      + "};",context); 

    Invocable inv; 

    inv = (Invocable) engine; 
    String res = (String)inv.invokeFunction("decodeStr", new Object[]{cookie.getValue()}); 
+0

ナッシュエンジンでは、次のように簡単に書くことができます:(ストリング)invocable.invokeFunction( "unescape"、escapedString); – Shafiul

0

共通langのStringEscapeUtilsが機能しませんでした。

javascript nashorn engineを使用すると、エスケープされたJavaScript文字列をエスケープすることができます。

private String decodeJavascriptString(final String encodedString) { 
    ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn"); 
    Invocable invocable = (Invocable) engine; 
    String decodedString = encodedString; 
    try { 
     decodedString = (String) invocable.invokeFunction("unescape", encodedString); 

    } catch (ScriptException e) { 
     e.printStackTrace(); 
    } catch (NoSuchMethodException e) { 
     e.printStackTrace(); 
    } 

    return decodedString; 
} 
関連する問題