把一段带中文的网址复制出来,经常看到一长串 % 开头的字符,比如 %E4%B8%AD%E6%96%87。这不是乱码,而是 URL 编码——HTTP 协议规定网址只能使用部分 ASCII 字符,其他字符必须用特殊形式表示。
为什么需要编码
URL 里的某些字符有特殊含义,比如 / 分隔路径、? 开始参数、& 连接参数。如果数据里本身就含有这些字符,不处理的话服务器就无法区分“这是格式符号”还是“这是数据内容”。所以协议规定:除字母、数字和少数符号外,其余字符都要转义,用 % 加两位十六进制数表示一个字节。
常见例子
- 空格:编码为
%20。所以网址里有空格时,你会看到%20; - 中文“中”:按 UTF-8 编码为三个字节
E4 B8 AD,对应%E4%B8%AD; &:编码为%26,这样参数值里的 & 就不会被当成参数分隔符;#:编码为%23,避免被当成页面锚点。
反过来,解码就是把 %XX 还原成原始字符。发送中文搜索词、把文件名放进下载链接、分享带参数的活动链接,都涉及这两个方向的转换。
编码工具之间的区别
JavaScript 里常用的两个函数行为不同:encodeURIComponent() 会把 &、=、?、/ 等全部编码,适合放在参数值里;encodeURI() 保留这些结构字符,只编码中文和空格等,适合编码整个网址。动手拼接接口参数时,用错了函数会导致服务器收到错误的参数值,这是新手最常见的坑。
怎么用本站工具
把要处理的内容粘进 URL 编码/解码工具,选择“编码”或“解码”,结果立刻显示。日常场景包括:从日志里还原被编码的中文关键词、给链接参数里的中文做转义、检查发给接口的数据是否正确。理解了编码原理之后,再看到 % 开头的字符串就不会慌了——它只是另一种书写方式而已。