URL编码
URL编码·解码
输入
结果
URL编码:为什么浏览器把空格变成了%20
有没有注意过URL里那些奇怪的%20和%3D?那就是URL编码(也叫百分号编码)。URL只接受有限的字符集——字母、数字和少数符号。其他所有东西——空格、带声调的字母、特殊字符——都得转换成%XX格式才能在网上安全传输。
encodeURIComponent和encodeURI的区别
JavaScript里有两个相似的函数。encodeURIComponent()用于编码参数值,会把斜杠和?也编码掉。encodeURI()用于整个URL,会保留URL的结构字符不动。用错了会导致双重编码或URL结构被破坏。
为什么URL不能随便用什么字符?
URL遵循一个叫RFC 3986的规范,对允许使用的字符管得很严:字母、数字,再加连字符和点号这几个符号,就这么多。&和=在URL里已经有活干了——它们用来分隔查询参数。所以如果你的实际数据里包含&或=,就必须编码,不然服务器搞不清一个参数在哪结束、下一个在哪开始。空格、非拉丁字符,基本上不是纯ASCII的东西都得编码。
哪些字符最常被编码?
空格变成%20(某些场景下变成+)。&符号变成%26,=变成%3D,?变成%3F。非ASCII字符比如中文先用UTF-8编码,然后每个字节变成自己的%XX代码——所以一个汉字可能变成三个或更多的%XX序列。斜杠(/)是路径分隔符,只有出现在参数值里面的时候才需要编码,在URL路径本身里不用。
给开发者的URL编码技巧
黄金法则:编码参数值,不要编码整个URL。JavaScript里,encodeURIComponent()完美处理参数值;encodeURI()用于完整URL,会保留结构性字符不动。Python开发者用urllib.parse.quote()。小心双重编码——就是你不小心把已经编码过的字符串又编码了一次,%20变成了%2520。调API的时候永远先编码参数值,因为用户输入什么字符都有可能。
常见问题
URL中的特殊字符(空格、&、=等)需要编码才能被正确解析。
什么是百分号编码?
将字符替换为%XX格式,XX是该字符的十六进制值。
需要对整个URL编码吗?
不需要,只对参数值编码,不要编码URL结构本身。