在做页面开发时使用了Javascript的escape()函数进行URL编码,结果在JSP或Servlet中用request.getParameter()时取不到参数,只返回一个空值。经过Baidu的搜索终于找到了问题所在及解决的办法。
本来Javascript中的escape()是将中文按ISO-8859-1字符集进行URL编码的,那样通过 request.getParameter()是能直接获取到请求参数的,但后来的Javascript将escape()换成了Unicode字符集编 码,如此一来,在JSP和Servlet中就没法直接拿到请求参数了,具体原因我也不知道。
解决办法:
1、首先对中文字符进行两次escape()编码,如要传参数name,值为“你好”,则url的格式为....name=escape(escape("你好")),这样一来,在request.getParameter()就能取到编码后的参数了。
2、由于取到的参数是 %25u4F60%25u597D 格式的,没法用常规的URLDecoder.decode()来进行解码,还好,这世上的牛人够多,在网上直接找到了一个工具类,能实现 Javascript中escape()及unescape()式的编解码,源代码如下:
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
public class Escape ... {
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
private final static String[] hex = ... { " 00 " , " 01 " , " 02 " , " 03 " , " 04 " , " 05 " ,
" 06 " , " 07 " , " 08 " , " 09 " , " 0A " , " 0B " , " 0C " , " 0D " , " 0E " , " 0F " , " 10 " ,
" 11 " , " 12 " , " 13 " , " 14 " , " 15 " , " 16 " , " 17 " , " 18 " , " 19 " , " 1A " , " 1B " ,
" 1C " , " 1D " , " 1E " , " 1F " , " 20 " , " 21 " , " 22 " , " 23 " , " 24 " , " 25 " , " 26 " ,
" 27 " , " 28 " , " 29 " , " 2A " , " 2B " , " 2C " , " 2D " , " 2E " , " 2F " , " 30 " , " 31 " ,
" 32 " , " 33 " , " 34 " , " 35 " , " 36 " , " 37 " , " 38 " , " 39 " , " 3A " , " 3B " , " 3C " ,
" 3D " , " 3E " , " 3F " , " 40 " , " 41 " , " 42 " , " 43 " , " 44 " , " 45 " , " 46 " , " 47 " ,
" 48 " , " 49 " , " 4A " , " 4B " , " 4C " , " 4D " , " 4E " , " 4F " , " 50 " , " 51 " , " 52 " ,
" 53 " , " 54 " , " 55 " , " 56 " , " 57 " , " 58 " , " 59 " , " 5A " , " 5B " , " 5C " , " 5D " ,
" 5E " , " 5F " , " 60 " , " 61 " , " 62 " , " 63 " , " 64 " , " 65 " , " 66 " , " 67 " , " 68 " ,
" 69 " , " 6A " , " 6B " , " 6C " , " 6D " , " 6E " , " 6F " , " 70 " , " 71 " , " 72 " , " 73 " ,
" 74 " , " 75 " , " 76 " , " 77 " , " 78 " , " 79 " , " 7A " , " 7B " , " 7C " , " 7D " , " 7E " ,
" 7F " , " 80 " , " 81 " , " 82 " , " 83 " , " 84 " , " 85 " , " 86 " , " 87 " , " 88 " , " 89 " ,
" 8A " , " 8B " , " 8C " , " 8D " , " 8E " , " 8F " , " 90 " , " 91 " , " 92 " , " 93 " , " 94 " ,
" 95 " , " 96 " , " 97 " , " 98 " , " 99 " , " 9A " , " 9B " , " 9C " , " 9D " , " 9E " , " 9F " ,
" A0 " , " A1 " , " A2 " , " A3 " , " A4 " , " A5 " , " A6 " , " A7 " , " A8 " , " A9 " , " AA " ,
" AB " , " AC " , " AD " , " AE " , " AF " , " B0 " , " B1 " , " B2 " , " B3 " , " B4 " , " B5 " ,
" B6 " , " B7 " , " B8 " , " B9 " , " BA " , " BB " , " BC " , " BD " , " BE " , " BF " , " C0 " ,
" C1 " , " C2 " , " C3 " , " C4 " , " C5 " , " C6 " , " C7 " , " C8 " , " C9 " , " CA " , " CB " ,
" CC " , " CD " , " CE " , " CF " , " D0 " , " D1 " , " D2 " , " D3 " , " D4 " , " D5 " , " D6 " ,
" D7 " , " D8 " , " D9 " , " DA " , " DB " , " DC " , " DD " , " DE " , " DF " , " E0 " , " E1 " ,
" E2 " , " E3 " , " E4 " , " E5 " , " E6 " , " E7 " , " E8 " , " E9 " , " EA " , " EB " , " EC " ,
" ED " , " EE " , " EF " , " F0 " , " F1 " , " F2 " , " F3 " , " F4 " , " F5 " , " F6 " , " F7 " ,
" F8 " , " F9 " , " FA " , " FB " , " FC " , " FD " , " FE " , " FF " } ;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
private final static byte [] val = ... { 0x3F , 0x3F , 0x3F , 0x3F , 0x3F , 0x3F ,
0x3F , 0x3F , 0x3F , 0x3F , 0x3F , 0x3F , 0x3F , 0x3F , 0x3F , 0x3F , 0x3F ,
0x3F , 0x3F , 0x3F , 0x3F , 0x3F , 0x3F , 0x3F , 0x3F , 0x3F , 0x3F , 0x3F ,
0x3F , 0x3F , 0x3F , 0x3F , 0x3F , 0x3F , 0x3F , 0x3F , 0x3F , 0x3F , 0x3F ,
0x3F , 0x3F , 0x3F , 0x3F , 0x3F , 0x3F , 0x3F , 0x3F , 0x3F , 0x00 , 0x01 ,
0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0x08 , 0x09 , 0x3F , 0x3F , 0x3F ,
0x3F , 0x3F , 0x3F , 0x3F , 0x0A , 0x0B