`
huangyongxing310
  • 浏览: 496049 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

URI和URL的区别、URL编码

阅读更多
URI和URL的区别
URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。

而URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可
以用来标识一个资源,而且还指明了如何locate这个资源。



URL编码
情况1:网址路径中包含汉字
http://zh.wikipedia.org/wiki/春节
网址路径的编码,用的是utf-8编码。

情况2:查询字符串包含汉字
http://www.baidu.com/s?wd=春节
查询字符串的编码,用的是操作系统的默认编码。

情况3:Get方法生成的URL包含汉字(就是输入生成)
<meta http-equiv="Content-Type" content="text/html;charset=xxxx">
GET和POST方法的编码,用的是网页的编码。

情况4:Ajax调用的URL包含汉字
在Ajax调用中,IE总是采用GB2312编码(操作系统的默认编码),而Firefox总是采用utf-8编码。



JavaScript编码函数
escape()
除了ASCII字母、数字、标点符号"@ * _ + - . /"以外,对其他所有字符进行编码。在\u0000到\u00ff之间的符
号被转成%xx的形式,其余符号被转成%uxxxx的形式。对应的解码函数是unescape()。


encodeURI() 函数
可把字符串作为 URI 进行编码
该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码:-_.!~*'();/?:@&=+$,#
编码后,它输出符号的utf-8形式,并且在每个字节前加上%。

document.write(encodeURI("http://www.w3school.com.cn")+ "<br />")
document.write(encodeURI("http://www.w3school.com.cn/My first/"))
document.write(encodeURI(",/?:@&=+$#"))

//批注:只转换域名后面的部分,并且对,/?:@&=+$#不处理。

// http://www.w3school.com.cn
// http://www.w3school.com.cn/My%20first/
// ,/?:@&=+$#



encodeURIComponent()
该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。
其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。

如果 username = 'a&foo=boo' 而不用 encodeURIComponent 的话,整个参数就成了 name=a&foo=boo,
这样 CGI 就获得两个参数 name 和 foo. 这不是我们想要的。(encodeURIComponent()就是解决这种问题的)

document.write(encodeURIComponent("http://www.w3school.com.cn"))
document.write(encodeURIComponent("http://www.w3school.com.cn/p 1/"))
document.write(encodeURIComponent(",/?:@&=+$#"))

//对比
// http%3A%2F%2Fwww.w3school.com.cn
// http%3A%2F%2Fwww.w3school.com.cn%2Fp%201%2F
// %2C%2F%3F%3A%40%26%3D%2B%24%23



escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z
encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics