EPISODE 50

第50话:秘密潜入

URL 编码 (URL Encode)
URL 的严苛安检
👮‍♂️
站住!我是 URL 安检员。根据《互联网交通法》,URL 只能包含 ASCII 字符。
那个带空格的,还有那个中文汉字,你们不能直接上车!
😨
啊?可是我的名字就叫 "My File.txt",中间有个空格啊!
🕵️
别担心,我有伪装工具。只要换个装,安检员就认不出你了。
来,穿上这件 %20 的风衣。
// 伪装前 https://www.example.com/My File.txt // 伪装后 https://www.example.com/My%20File.txt

URL 编码(URL Encoding)将非 ASCII 字符转换为 % 后跟两位十六进制数字的格式。
比如空格通常编码为 %20+

常见字符的伪装
📋
这里有一份"通缉名单",这些家伙经常需要伪装:
原身 伪装代号 描述
(空格) %20 最常见的隐形人
/ %2F 路径分隔符
? %3F 查询开始符
& %26 参数连接符
= %3D 赋值符
JS 里的伪装大师
🧙‍♂️
JavaScript 提供了两位顶级的伪装大师(函数):
1. encodeURI():轻量级伪装,不碰 http:// 这些关键部位。
2. encodeURIComponent():全副武装,连亲妈都不认识,适合处理参数值。
var url = "https://www.example.com/search?q=hello world&lang=zh"; // 1. encodeURI() - 适合整个 URL // 结果: https://www.example.com/search?q=hello%20world&lang=zh // 注意:它没动 : / ? = & 这些结构符号 // 2. encodeURIComponent() - 适合参数值 // 如果你对整个 URL 用这个... // 结果: https%3A%2F%2Fwww.example.com%2Fsearch%3Fq%3Dhello%20world%26lang%3Dzh // 😱 糟了!连 http 的冒号都被转义了,浏览器看不懂了!
💡
正确用法:
只对参数部分使用 encodeURIComponent!
var baseUrl = "https://www.example.com/search"; var query = "hello world"; var finalUrl = baseUrl + "?q=" + encodeURIComponent(query);