代码之家  ›  专栏  ›  技术社区  ›  pvgoddijn

在Java中取消转义JavaScript转义值

  •  5
  • pvgoddijn  · 技术社区  · 17 年前

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

    但是,我们需要转义cookie的值,因为它可能包含非法字符,例如“&”把饼干弄得一团糟。

    有没有一种透明的方法可以对此进行转义(JavaScript)和再次转义(Java)?

    4 回复  |  直到 5 年前
        1
  •  7
  •   Robert    10 年前

    在java中你得到了什么 StringEscapeUtils Commons Lang 逃避/逃避。

    在Javascript中,您可以通过 encodeURIComponent ,但我认为我给你的Commons组件会满足你的需求。

        2
  •  4
  •   Cees Timmerman    14 年前

    客户端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 .

        3
  •  1
  •   Eudy Sekgota    12 年前

    最准确的方法是在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()});
    
        4
  •  1
  •   Shafiul    10 年前

    普通朗的逃逸器对我不起作用。

    您可以简单地使用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;
    }