在做页面开发时使用了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()式的编解码,源代码如下:
public
class
Escape
...
{
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
"
}
;
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
分享到:
相关推荐
js的escape如何在PHP中来解呢?下面的这个函数可以正确的解析,网上有不少unescape的函数,但好用的不多.
所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是 。 不会被此方法编码的字符: @ * / + encodeURI...
JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent 。 javascript的简单编码机器和解码机器二合一
javaScript中的编码方法: escape() 方法: 采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码 (xx等于该字符在字符集表里面的编码...
2. encodeURI()是javascript中真正用来对URL编码的函数。编码整个URL地址,但对特殊含义的符号”;/?:@&=+$,#”,也不进行编码。对应的解码函数是decodeURI()。 3. encodeURIComponent()能编码”;/?:@&=+$,#”这些...
JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数: unescape,decodeURI,decodeURIComponent 。 下面简单介绍一下它们的区别 1 escape()函数 定义和...
js对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent 1、 传递参数时需要使用encodeURIComponent,这样组合的url才不会被#等特殊字符截断...
在用javascript对URL字符串进行编码中,虽然escape()、encodeURI()、encodeURIComponent()三种方法都能对一些影响URL完整性的特殊字符进行过滤。 但后两者是将字符串转换为UTF-8的方式来传输,解决了页面编码不一至...
UTF8字符串使用正则表达式进行编码/解码 代码基于 可以将javascript Unicode字符串编码为utf-8多个单字节字符。 可以通过unescape(encodeURIComponent(str))在JavaScript中实现相同的功能,但是这种方法在其他语言...
JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape, decodeURI, decodeURIComponent 。 下面简单介绍一下它们的区别: 1 escape()函数 定义和...
在非英文字符集的页面上,如果使用Ajax方式进行数据...都先用escape进行编码,接收的一端用unescape进行解码即可保证Javascript和Asp数据传递过程中不会出现乱码! 在后端是PHP程序的情况下,保持前端Javascript和PH
在实际应用中,我们可以使用该方法来实现gb2312到utf-8的转换,从而解决网页开发中的编码问题。同时,我们也可以根据实际情况对该方法进行修改和优化,以满足不同的应用需求。 本文提供了一种使用javascript实现gb...
escape定义和用法 escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符...提示:可以使用 unescape() 对 escape() 编码的字符串进行解码。 注释:ECMAScript v3 反对使用该方法,应用使用 decodeUR
escape编码(解码); URI(统一资源标识符)字串(组件)编码(解码) HTML编码(解码); HTML代码和JavaScript之间的相互转换 字符(串)二、八、十、十六进制编码(解码) 直接运行HTML/JavaScript代码等~
在实际开发中,程序员经常需要使用一些小技巧来提高开发效率和解决一些常见的问题。下面是JavaScript常用代码小技巧的总结: 事件处理 * 事件源对象:`event.srcElement.tagName`、`event.srcElement.type` * 捕获...
escape 方法 对 String 对象编码,以便在所有计算机上都能阅读。 eval 方法 对 JScript 代码求值然后执行。 exec 方法 在指定字符串中执行一个匹配查找。 exp 方法 返回 e (自然对数的底) 的幂。 ...
escape 方法 对 String 对象编码,以便在所有计算机上都能阅读。 eval 方法 对 JScript 代码求值然后执行。 exec 方法 在指定字符串中执行一个匹配查找。 exp 方法 返回 e (自然对数的底) 的幂。 ...
JavaScript unescape() 函数可对通过 escape() 编码的字符串进行解码。 语法 unescape(string) 参数 描述 string 必需。要解码或反转义的字符串。 返回值 string 被解码后的一个副本。 说明 该函数的工作...