JS中URL中的特殊字符问题

在使用 url 进行参数传递时,经常会传递一些中文名(或含有特殊字符)的参数或URL地址,在后台处理时会发生转换错误。在有些传递页面使用 GB2312,而在接收页面使用 UTF8,这样接收到的参数就可能会与原来发生不一致。使用服务器端的 urlEncode 函数编码的 URL,与使用客户端 javascript 的 encodeURI 函数编码的 URL,结果就不一样。javascript 对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent

javaScript中的编码方法:

  • escape:采用 ISO Latin 字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非 ASCII 字符都将被转化成 %xx 格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。对 0 - 255 以外的 unicode 值进行编码时输出 %u**** 格式。不会被此方法编码的字符: *,+,-,.,/,@,_,0-9,a-z,A-Z
  • encodeURI:把 URI 字符串采用 UTF-8 编码格式转化成 escape 格式的字符串。不会被此方法编码的字符:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
  • encodeURIComponent:把 URI 字符串采用 UTF-8 编码格式转化成 escape 格式的字符串。与 encodeURI() 相比,这个方法将对更多的字符进行编码,比如 / 等字符。不会被此方法编码的字符:!,',(,),*,-,.,_,~,0-9,a-z,A-Z

替换想要转化的字符

因为 js 提供的编码方法不会转换某些特殊字符,所以如果想自己转换字符的话,可以用 replace 方法,如想转换 URI 中的感叹号(!),则可以对字符进行全局替换 str = str.replace(/\!/g,"%21");

常用 URL 编码

空格 —— %20
" —— %22
# —— %23
% —— %25
& —— %26
( —— %28
) —— %29
+ —— %2B
, —— %2C
/ —— %2F
: —— %3A
; —— %3B
< —— %3C
= —— %3D
> —— %3E
? —— %3F
@ —— %40
\ —— %5C
| —— %7C 

更多 URL 编码