
title: 如何编码和解码URL?为什么要编码
标签: URL
笔记本: 分散的知识
也就是说,URL只能使用英文字母,阿拉伯数字和某些标点符号,而不能使用其他单词和符号,即
仅字母和数字[0-9a-zA-Z],某些特殊符号$ -_. +! *'()[不包括双引号]和一些保留字(空格转换为+),可以直接在URL中使用而无需编码
这意味着编码解码区别,如果URL中包含中文字符,则必须对其进行编码和使用. 但是麻烦的是,标准的国际组织没有指定特定的编码方法,而是将其留给应用程序(浏览器)自行决定. 这导致“ URL编码”成为一个令人困惑的领域.
如果包含中文,则会自动进行编码编码解码区别,例如Chrome和Firefox,“ ut”,“ land”和“ frame” UTF-8编码为“ E7 99 BB E9 99 86 E6 A1 86”,下图分别按顺序显示了“ 3D%E7%99%BB%E9%99%86%E6%A1%86 /%E7%99%BB%E9%99%86%E6%A1%86”在字节前加%的结果:


图片
URL编码通常也称为百分比编码,因为它的编码方法非常简单:
使用%加上两个字符-0123456789ABCDEF-以十六进制形式表示一个字节. URL编码需要做的是将每个非安全ASCII字符替换为“%xx”格式,
对于非ASCII字符,RFC文档建议使用utf-8对其进行编码,以获取相应的字节,然后对每个字节执行百分比编码.
如果“中文”使用UTF-8字符集,则获得的字节为0xE4 0xB8 0xAD 0xE6 0x96 0x87. 网址编码后,您会得到“%E4%B8%AD%E6%96%87”
. +%20

./% 2F
. ?%3F
. %% 25
. #%23
. &%26
JavaScript提供了四种URL编码/解码方法.
decodeURI()//编码

decodeURIComponent()//编码
encodeURI()//解码
encodeURIComponent()//解码
encodeURI方法不会对以下字符进行编码
ASCII字母数字〜! @#$&*()=: /,;? +'
encodeURIComponent方法不会对以下字符进行编码
ASCII字母数字〜! *()'

因此,encodeURIComponent的编码范围比encodeURI大
示例:
原始网址: file: ///用户/ fanmu /桌面/演示/ 3D%E7%99%BB%E9%99%86%E6%A1%86 /%E7%99%BB%E9%99% 86%E6%A1%86.html#

图片
decodeURI('file:///Users/fanmu/Desktop/demo/3D%E7%99%BB%E9%99%86%E6%A1%86/%E7%99%BB%E9%99%86%E6%A1%86.html#')
// 输出结果:"file:///Users/fanmu/Desktop/demo/3D登陆框/登陆框.html#"
decodeURIComponent('file:///Users/fanmu/Desktop/demo/3D%E7%99%BB%E9%99%86%E6%A1%86/%E7%99%BB%E9%99%86%E6%A1%86.html#')
//输出结果为: "file:///Users/fanmu/Desktop/demo/3D登陆框/登陆框.html#"
encodeURI("file:///Users/fanmu/Desktop/demo/3D登陆框/登陆框.html#")
//输出结果为 :"file:///Users/fanmu/Desktop/demo/3D%E7%99%BB%E9%99%86%E6%A1%86/%E7%99%BB%E9%99%86%E6%A1%86.html#"
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-207619-1.html
好事情啊