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

Popular posts from this blog

.htaccess - First slash is removed after domain when entering a webpage in the browser -

Automatically create pages in phpfox -

c# - Farseer ContactListener is not working -