Java中的Un-escape JavaScript转义值

时间:2009-05-19 10:46:45

标签: java javascript cookies escaping

在我们的Web服务中,我们通过JavaScript设置了一个cookie,我们在Java(Servlet)中再次阅读

但是我们需要逃避cookie的价值,因为它可能包含非法字符,例如'&'这搞砸了饼干。

是否有透明的方法可以逃避(JavaScript)和再次使用unescape(Java)?

4 个答案:

答案 0 :(得分:7)

在java中,你从StringEscapeUtils获得Commons Lang来逃避/不可见。

在Javascript中你通过encodeURIComponent逃脱,但我认为我给你的Commons组件将满足你的需求。

答案 1 :(得分: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添加更多发现。

答案 2 :(得分: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()});

答案 3 :(得分:1)

Common lang的StringEscapeUtils对我不起作用。

您可以简单地使用javascript nashorn引擎来转发转义的javascript字符串。

public class Enclosure {

    @Attribute(name = "url")
    private String url;

    @Attribute(name = "length")
    private long length;

    @Attribute(name = "type")
    private String type;
}