URI和URL的区别、URL编码

[b]URI和URL的区别[/b]
URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。

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


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

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

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

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


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


[b]encodeURI() 函数[/b]
可把字符串作为 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/
// ,/?:@&=+$#



[b]encodeURIComponent()[/b]
该方法不会对 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



[b]escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z
encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z[/b]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值