Url编码

一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码

1.传参页面

<script type=”text/javascript”>//  function send(){ var url = “test01.html”; var userName = $(“#userName”).html(); window.open(encodeURI(url + “?userName=” + userName)); } </script>

2. 接收参数页面:test02.html

<script> var urlinfo = window.location.href;//獲取url var userName = urlinfo.split(“?”)[1].split(“=”)[1];//拆分url得到”=”後面的參數 $(“#userName”).html(decodeURI(userName)); </script>

二:如何获取Url“?”后,“=”的参数值:

A. 首先用window.location.href获取到全部url值。
B. 用split截取“?”后的全部
C. split(“?”)后面的[1]内数字,默认从0开始计算

三:Js中escape,unescape,encodeURI,encodeURIComponent区别:

有效的URI中不能包含某些字符,例如空格。 %20
使用encodeURI()编码后的结果是除了空格之外的其他字符都原封不动,只有空格被替换成了%20。而encodeURIComponent()方法则会使用对应的编码替换所有非字母数字字符。这也正是可以对整个URI使用encodeURI(),而只能对附加在现有URI后面的字符串使用encodeURIComponent()的原因所在一般来说,我们使用encodeURIComponent()方法的时候要比使用encodeURI()更多,因为在实践中更常见的是对查询字符串参数而不是对基础URL进行编码.
1.说明
encodeURI :不会对本身属于URI的特殊字符进行编码,不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ’ ( ) 。
该方法的目的是对 URI 进行完整的编码,因此对以下在 URI 中具有特殊含义的 ASCII 标点符号,encodeURI() 函数是不会进行转义的:;/?:@&=+$,#

encodeURIComponent :主要用于对URI中的某一段(例如前面URI中的illegal value.htm)进行编码. 该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ’ ( ) 。会对它发现的任何非标准字符进行编码
其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。

2.使用场景
1 . 传递参数时候使用,encodeURIComponent否则url中很容易被”#”,”?”,”&”等敏感符号隔断。
2 . url跳转时候使用,编码用encodeURI,解码用decodeURI。
3 . escape() 只是为0-255以外 ASCII字符 做转换工作,转换成的 %u**** 这样的码,如果要用更多的字符如 UTF-8字符库 就一定要用 encodeURIComponent() 或 encodeURI() 转换才可以成 %nn%nn 这的码才可以,其它情况下escape,encodeURI,encodeURIComponent编码结果相同,所以为了全球的统一化进程,在用 encodeURIComponent() 或 encodeURI() 代替 escape() 使用吧!

你可能感兴趣的:(编码,乱码,url)