URI和URL的区别、URL编码
程序员文章站
2022-07-15 14:24:39
...
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形式,并且在每个字节前加上%。
encodeURIComponent()
该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。
其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。
如果 username = 'a&foo=boo' 而不用 encodeURIComponent 的话,整个参数就成了 name=a&foo=boo,
这样 CGI 就获得两个参数 name 和 foo. 这不是我们想要的。(encodeURIComponent()就是解决这种问题的)
escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z
encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z
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
上一篇: 利用JavaScript做计算
下一篇: 编码和乱码问题
推荐阅读
-
网站优化中怎样尽量减少无效URL的爬行和索引
-
获取上一页面的URL和本页的URL的方法
-
使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
-
微信开发中使用微信JSSDK和使用URL.createObjectURL上传预览图片的不同处理对比
-
JS表单传值和URL编码转换
-
整理HTML5中支持的URL编码与字符编码
-
一种快速构造和获取URL查询参数的方法:URLSearchParams
-
nginx proxy_pass反向代理配置中url后加不加/的区别介绍
-
详谈js对url进行编码和解码(三种方式的区别)
-
Flask框架的: 简介、虚拟环境、配置文件、URL 和视图