2009-05-19 12 views
5

में मूल्य भाग निकले हम तथापि जावास्क्रिप्ट जो के माध्यम से एक कुकी हम जावा (सर्वलेट) में फिर से पढ़ने केunescape जावास्क्रिप्ट हमारी वेब सेवा में जावा

सेट है क्योंकि यह इस तरह के रूप अवैध वर्ण हो सकते हैं हम कुकी का मान से बचने के लिए की जरूरत है '&' जो कुकी को गड़बड़ कर देता है।

क्या इसके लिए बचने के लिए एक पारदर्शी तरीका है (जावास्क्रिप्ट) और फिर से अनदेखा (जावा)?

धन्यवाद, पीटर Goddijn

+0

"पारदर्शी तरीका" परिभाषित करें। – Cerebrus

उत्तर

7

जावा आप Commons Lang से StringEscapeUtils मिला बचने/unescape करने के लिए।

जावास्क्रिप्ट में आप encodeURIComponent से बचते हैं, लेकिन मुझे लगता है कि मैंने आपको दिए गए कॉमन्स घटक आपकी आवश्यकताओं को पूरा करेंगे।

+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/ 

सर्वर जावा:

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

मैं my blog entry के लिए आगे खोजों जोड़ देंगे।

1

आपके जावा कोड के साथ जावास्क्रिप्ट को निष्कासित करने का सबसे सटीक तरीका होगा। उम्मीद है कि नीचे दिया गया कोड मदद करता है।

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

आम लैंग का स्ट्रिंगईस्केप उपयोग मेरे लिए काम नहीं करता था।

आप आसानी से जावास्क्रिप्ट नाशर्न इंजन का उपयोग एक बच निकले जावास्क्रिप्ट स्ट्रिंग को अनचेक करने के लिए कर सकते हैं।

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; 
} 
संबंधित मुद्दे