编码格式

1、首先对中文字符进行两次escape()编码,如要传参数name,值为“你好”,则url的格式为....name=escape(escape("你好")),这样一来,在request.getParameter()就能取到编码后的参数了。

publicclassEscape...{
privatefinalstaticString[]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"}
;

privatefinalstaticbyte[]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,0x0C,0x0D,0x0E,0x0F,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,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,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,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,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,0x3F,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F}
;

/***//**
*编码
*
*
@params
*
@return
*/

publicstaticStringescape(Strings)...{
StringBuffersbuf
=newStringBuffer();
intlen=s.length();
for(inti=0;i<len;i++)...{
intch=s.charAt(i);
if('A'<=ch&&ch<='Z')...{
sbuf.append((
char)ch);
}
elseif('a'<=ch&&ch<='z')...{
sbuf.append((
char)ch);
}
elseif('0'<=ch&&ch<='9')...{
sbuf.append((
char)ch);
}
elseif(ch=='-'||ch=='_'
||ch=='.'||ch=='!'||ch=='~'||ch=='*'
||ch=='''||ch=='('||ch==')')...{
sbuf.append((
char)ch);
}
elseif(ch<=0x007F)...{
sbuf.append(
'%');
sbuf.append(hex[ch]);
}
else...{
sbuf.append(
'%');
sbuf.append(
'u');
sbuf.append(hex[(ch
>>>8)]);
sbuf.append(hex[(
0x00FF&ch)]);
}

}

returnsbuf.toString();
}


/***//**
*解码说明:本方法保证不论参数s是否经过escape()编码,均能得到正确的“解码”结果
*
*
@params
*
@return
*/

publicstaticStringunescape(Strings)...{
StringBuffersbuf
=newStringBuffer();
inti=0;
intlen=s.length();
while(i<len)...{
intch=s.charAt(i);
if('A'<=ch&&ch<='Z')...{
sbuf.append((
char)ch);
}
elseif('a'<=ch&&ch<='z')...{
sbuf.append((
char)ch);
}
elseif('0'<=ch&&ch<='9')...{
sbuf.append((
char)ch);
}
elseif(ch=='-'||ch=='_'||ch=='.'||ch=='!'||ch=='~'||ch=='*'||ch=='''||ch=='('||ch==')')...{
sbuf.append((
char)ch);
}
elseif(ch=='%')...{
intcint=0;
if('u'!=s.charAt(i+1))...{
cint
=(cint<<4)|val[s.charAt(i+1)];
cint
=(cint<<4)|val[s.charAt(i+2)];
i
+=2;
}
else...{
cint
=(cint<<4)|val[s.charAt(i+2)];
cint
=(cint<<4)|val[s.charAt(i+3)];
cint
=(cint<<4)|val[s.charAt(i+4)];
cint
=(cint<<4)|val[s.charAt(i+5)];
i
+=5;
}

sbuf.append((
char)cint);
}
else...{
sbuf.append((
char)ch);
}

i
++;
}

returnsbuf.toString();
}


publicstaticvoidmain(String[]args)...{
Stringstest
="1234abcd[]()<+>,.~/";
System.out.println(stest);
System.out.println(escape(stest));
System.out.println(unescape(escape(stest)));
}


}

2、由于取到的参数是 %25u4F60%25u597D 格式的,没法用常规的URLDecoder.decode()来进行解码,还好,在网上直接找到了一个工具类,能实现Javascript中escape()及unescape()式的编解码,源代码如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值