jsp - URL parameter Decoding not working -
in java web application have construct url , call url. while creating url encoding parameter value using urlencoder.encode("text","utf-8") when parameter @ receiving end , decode - not decoding properly. tried setting encoded value request attribute works fine. can't use per client request.
wrote following code test urlencoder & urldecoder , urlcodec apache commons codec functions.
stringbuffer sb = new stringbuffer("testspecialchar'` ~6 Æ æ Ç È 123"); //string testcharacters = "testspecialchar'` ~6 Æ æ Ç È 123"; string testcharacters = sb.tostring(); try { string encoded = urlencoder.encode(testcharacters, "utf-8"); system.out.println("urlencoder : " + encoded); system.out.println("urldecoder : " + urldecoder.decode(encoded, "utf-8")); } catch (unsupportedencodingexception e) { // todo auto-generated catch block e.printstacktrace(); } urlcodec urlc = new urlcodec("utf-8"); try { string encoded = urlc.encode(testcharacters); system.out.println("urlc.encode : " + encoded); system.out.println("urlc.decode : " + urlc.decode(encoded)); } catch (encoderexception ee){ ee.printstacktrace(); } catch (decoderexception e) { // todo auto-generated catch block e.printstacktrace(); } try { string encoded = urlc.encode(testcharacters); system.out.println("urlc.encode : " + encoded); system.out.println("urldecoder : " + urldecoder.decode(encoded, "utf-8")); } catch (unsupportedencodingexception e) { // todo auto-generated catch block e.printstacktrace(); } catch (encoderexception ee){ ee.printstacktrace(); } this code works perfectly. wrote simple web application have 2 jsp page in 1 calling other encoded value in url. not showing proper decoded value @ receiver end. here code reference.
sender.jsp:
<%@ page language="java" contenttype="text/html; charset=iso-8859-1" pageencoding="iso-8859-1"%> <%@ page language="java" import="java.net.urlencoder"%> <!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <title>sender</title> <script type="text/javascript"> function send(){ window.location='<%=request.getcontextpath()%>/jsp/receiver.jsp?txt=<%=urlencoder.encode("testspecialchar'` ~6 Æ æ Ç È 123","utf-8")%>'; } </script> </head> <body onload="javascript:send();"> </body> </html> receiver.jsp:
<%@ page language="java" contenttype="text/html; charset=iso-8859-1" pageencoding="iso-8859-1"%> <%@ page language="java" import="java.net.urldecoder"%> <!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <title>receiver</title> </head> <body> <% if (request.getattribute("encoded") != null){ urldecoder.decode(request.getattribute("encoded").tostring(),"utf-8"); } if (request.getparameter("txt") != null){ %> <%=urldecoder.decode(request.getparameter("txt").tostring(),"utf-8")%> inside if getparameter <% } %> </body> </html> i following output in browser
testspecialchar'` ~6 Æ æ Ç È 123 inside if getparameter
instead of
testspecialchar'` ~6 Æ æ Ç È 123 inside if getparameter
can please let me know wrong in test code , difference between request attribute , parameter due attribute decoded whereas parameter not?
temp solution: solved doing following things: 1) created class replace specific characters utf 8 code. 2) removed passing of character data url parameters. 3) making sure call external url utf-8 encoded. 4) value received external url or in application decoded before using value.
correct solution: on come problem application has designed , coded i18n in mind , jsp page utf-8 encoding.
you url encode text utf-8 your jsp pages have these declarations in them:
<%@ page language="java" contenttype="text/html; charset=iso-8859-1" pageencoding="iso-8859-1"%> ... <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> that might interfering encoding if server treats page iso-8859-1 instead of utf-8. change pageencoding utf-8 , see if fixes issue.
Comments
Post a Comment