关于URL
# URL 组成
协议部分:该 URL 的协议部分为“http:”,这代表网页使用的是 HTTP 协议。在 Internet 中可以使用多种协议,如 HTTP,FTP 等等。在"HTTP"后面的“//”为分隔符
域名部分:该 URL 的域名部分为“localhost”。一个 URL 中,也可以使用 IP 地址作为域名使用
端口部分:跟在域名后面的是端口 8080,域名和端口之间使用“:”作为分隔符。端口不是一个 URL 必须的部分,如果省略端口部分,将采用默认端口 80
虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个 URL 必须的部分。本例中的虚拟目录是“/app/user/”
文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“info.do”。文件名部分也不是一个 URL 必须的部分,如果省略该部分,则使用默认的文件名
锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“abc”。锚部分也不是一个 URL 必须的部分 (前端常用路由 hash 模式就是基于锚)
参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“uid=101&ty=2”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。
# URL 编码
注意 URL 只支持 ASCII 码字符,所有非 ASCII 码的内容都需要转换
在 js 中用 encodeURI 和 decodeURI 来实现 URL 编码解码, encodeURI 可以把 URL 转换为 UTF-8 编码
编码
解码
当你需要编码 URL 中的参数的时候,那么 encodeURIComponent 是最好方法。
var param = 'http://www.baidu.com/season-huang/' //param为参数
param = encodeURIComponent(param)
var url = 'http://www.baidu.com?next=' + param
console.log(url) //"http://www.baidu.com?next=http%3A%2F%2Fwww.baidu.com%2Fseason-huang%2F"
2
3
4