在Java中对JavaScript转义的值进行反转义

5
在我们的网络服务中,我们通过JavaScript设置了一个cookie,然后在Java(Servlet)中读取它。
但是,我们需要对cookie的值进行转义,因为它可能包含非法字符,比如'&',这会导致cookie出现问题。
有没有一种透明的方法可以对此进行转义(JavaScript),然后再次反转义(Java)?
4个回答

7

如果您想从encodeURIComponent解码,请参见此处https://dev59.com/1XRB5IYBdhLWcg3weXSX - 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());

我将在我的博客文章中添加更多关于处理Web浏览器cookies的发现。


1
Common lang的StringEscapeUtils对我不起作用。
你可以简单地使用Javascript Nashorn引擎来取消转义一个已经转义的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;
}

1
最准确的方法是在您的Java代码中执行JavaScript。希望下面的代码能够帮助您。
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()});

使用Nashorn引擎,您可以简单地编写以下代码:(String) invocable.invokeFunction("unescape", escapedString); - Shafiul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接