url编码
为什么要编码
1、一般来说,URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号。
当url地址中参数中包含&、+、%等特殊字符时,地址无效。所以直接用encodeurl编码,由于没法对参数中这些编码,可能会出错。就需要对参数使用encodeURIComponent()。
只有字母和数字[0-9a-zA-Z]、一些特殊符号“$-_.+!*'(),”[不包括双引号]、以及某些保留字,才可以不经过编码直接用于URL
如果URL中有汉字,就必须编码后使用。
主要是对参数进行编码。
2、使用浏览器直接发起请求(在地址栏输入地址),浏览器会使用默认的编码方式对url进行编码,各浏览有差异。
使用Javascript先对URL编码,然后再向服务器提交,不给浏览器插手的机会,能保证统一的编码方式输出相同的url。
编码方式
1、有效的 URI 中不能包含某些字符,URI 编码方法(encodeURI()和 encodeURIComponent())就可以对 URI 进行编码,它们用特殊的 UTF-8 编码替换所有无效的字符,从而让浏览器能够接受和理解。
2、encodeURI()和 encodeURIComponent()方法区别:
encodeURI()主要用于整个 URI,不会对本身属于 URI 的特殊字符进行编码,例如:
除了常见的符号以外,对其他一些在网址中有特殊含义的符号对“; / ? : @ & = + $ , #”也不进行编码。
这里面包含了一些浏览器不认同的参数中的特殊字符,所以对参数要用 encodeURIComponent()编码。
encodeURIComponent()主要用于对 URI 中的某一段,会对它发现的任何非标准字符进行编码。特别是在参数中。
不可以用它对整个url编码,浏览器会当成查询字符串。
举例
var uri = "http://www.wrox.com/illegal value.htm#start"; alert(encodeURI(uri)); //"http://www.wrox.com/illegal%20value.htm#start" encodeURI()编码后的结果是除了空格之外的其他字符都原封不动,只有空格被替换成了%20。 alert(encodeURIComponent(uri)); //"http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start" encodeURIComponent()方法则会使用对应的编码替换所有非字母数字字符
旧方法escape()和 unescape()只能正确地编码 ASCII 字符
而新的 URI 方法能够编码所有 Unicode 字符
扩展:Unicode、gbk、gb2312、utf-8
编码:将语言用字节表示
最初:ANSI 的”Ascii”编码——只编码英文
这种汉字编码方案叫做 “GB2312“。GB2312 是对 ASCII 的中文扩展。
后来GB2312不够表示汉字,扩展之后的编码方案被称为 GBK 标准。
最后统一:Unicode
从unicode开始,无论是半角的英文字母,还是全角的汉字,它们都是统一的”一个字符“!同时,也都是统一的”两个字节“,请注意”字符”和”字节”两个术语的不同,“字节”是一个8位的物理存贮单元,而“字符”则是一个文化相关的符号。在unicode中,一个字符就是两个字节。
utf-8
为解决unicode如何在网络上传输的问题,于是面向传输的众多 UTF(UCS Transfer Format)标准出现了,顾名思义,UTF-8就是每次8个位传输数据,而UTF-16就是每次16个位。UTF-8就是在互联网上使用最广的一种unicode的实现方式,这是为传输而设计的编码,并使编码无国界,这样就可以显示全世界上所有文化的字符了。
从unicode到uft-8并不是直接的对应,而是要过一些算法和规则来转换。