java - online - text escape
UnEscape JavaScript escapĆ³ el valor en JAVA (4)
en nuestro servicio web configuramos una cookie a través de JavaScript que leemos nuevamente en Java (Servlet)
sin embargo, tenemos que escapar del valor de la cookie porque puede contener caracteres ilegales como "&" que arruina la cookie.
¿hay una forma transparente de escapar (JavaScript) y volver a desensamblar (JAVA) para esto?
gracias, Pieter Goddijn
Cliente JavaScript / ECMAScript:
encodeURIComponent(cookie_value) // also encodes "+" and ";", see http://xkr.us/articles/javascript/encode-compare/
Servidor Java:
String cookie_value = java.net.URLDecoder.decode(cookie.getValue());
Agregaré más descubrimientos a mi entrada de blog .
La forma más precisa sería Excecute javascript con tu código java. Espero que el código a continuación ayude.
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()});
En java tienes StringEscapeUtils de Commons Lang para escapar / unescape.
En Javascript escapas a través de encodeURIComponent , pero creo que el componente de Commons que te di satisfará tus necesidades.
StringEscapeUtils de common lang no funcionó para mí.
Simplemente puede usar el motor javascript nashorn para eliminar el escape de una cadena javascript escapada.
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;
}