javaScript中URL编码转换

在使用url进行参数传递时,经常会传递一些中文名的参数或带特殊字符的参数或URL地址,在后台处理时会发生转换错误。在有些传递页面使用GB2312,而在接收页面使用UTF8,这样接收到的参数就可能会与原来发生不一致。使用服务器端的urlEncode函数编码的URL,与使用客户端javascript的encodeURI函数编码的URL,结果就不一样。
一:JAVASCRIPT函数escape()和unescape()
函数escape():采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是%20。
不会被此方法编码的字符: @ * / +
unescape():解码用escape方法进行了编码的String对象。
           unescape(charstring)
           必选项charstring参数是要解码的String对象。
unescape方法返回一个包含charstring内容的字符串值。所有以 %xx十六进制形式编码的字符都用ASCII字符集中等价的字符代替.以%uxxxx格式(Unicode 字符)编码的字符用十六进制编码xxxx的 Unicode 字符代替.
列:
 <script>
  alert(escape("ad大家好!!@#$%^&*()_"));
  document.write(escape("ad大家好!!@#$%^&*()_"));
  alert(unescape("ad%u5927%u5BB6%u597D%uFF01%21@%23%24%25%5E%26*%28%29_"))
  </script>
注意 unescape方法不能用于解码统一资源标识码 (URI)。解该码可使用decodeURI和decodeURIComponent方法
二:JAVASCRIPT函数encodeURI()和decodeURI()
encodeURI()函数是将文本字符串编码为一个有效的统一资源标识符 (URI)。使用方法:
encodeURI(URIString)
其中URIString是必选的,参数代表一个已编码的 URI。
encodeURI 方法返回一个编码的 URI。如果您将编码结果传递给 decodeURI,那么将返回初始的字符串。
不会被此方法编码的字符:! @ # $& * ( ) = : / ; ? + '
decodeURI() 函数可对 encodeURI() 函数编码过的 URI 进行解码。
示例:
  <script>
  alert(encodeURI("ad大家好!!@#$%^&*()_:! @ # $& * ()=:/;?+'"));
  document.write(encodeURI("ad大家好!!@#$%^&*()_:! @ # $& * ()=:/;?+'"));
  alert(decodeURI("ad%E5%A4%A7%E5%AE%B6%E5%A5%BD%EF%BC%81!@#$%25%5E&*()_%EF%BC%9A!%20@%20#%20$&%20*%20()=:/;?+'"))
  </script>
三.JAVASCRIPT函数encodeURIComponent()和decodeURIComponent()
encodeURIComponent() 方法:把URI字符串采用UTF-8编码格式转化成escape格式的字符串。与encodeURI()相比,这个方法将对更多的字符进行编码,比如 / 等字符。所以如果字符串里面包含了URI的几个部分的话,不能用这个方法来进行编码,否则 / 字符被编码之后URL将显示错误。
不会被此方法编码的字符:! * ( )
decodeURIComponent()方法用于反编译一个经过encodeURIComponent()方法编译过的URI
示例:
  <script>
  alert(encodeURIComponent("ad大家好!!@#$%^&*()_:! @ # $& * ()=:/;?+'! * ( )"));
  document.write(encodeURIComponent("ad大家好!!@#$%^&*()_:! @ # $& * ()=:/;?+'! * ( )"));
  alert(decodeURIComponent("ad%E5%A4%A7%E5%AE%B6%E5%A5%BD%EF%BC%81!%40%23%24%25%5E%26*()_%EF%BC%9A!%20%40%20%23%20%24%26%20*%20()%3D%3A%2F%3B%3F%2B'!%20*%20(%20) "))
  </script>
因此,对于中文字符串来说,如果不希望把字符串编码格式转化成UTF-8格式的(比如原页面和目标页面的charset是一致的时候),只需要使用escape。如果你的页面是GB2312或者其他的编码,而接受参数的页面是UTF-8编码的,就要采用encodeURI或者encodeURIComponent。
 另外,encodeURI/encodeURIComponent是在javascript1.5之后引进的,escape则在javascript1.0版本就有
  jsp业面用ajax提交数据时,由于数据里含有特殊字符%,&等,在类中request得到的值是null或者内容比原来的少(&后面的不到)。针对问题只有encodeURIComponent()符合要求。而且类中request得到的值不需要再进行解码。
  希望以上内容对大家有所帮助。


 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值