如何解码 URL 编码的字符串
解码是百分号编码的逆过程:每个 %XX 序列变成一个字节,再把这些字节按 UTF-8 文本读取。“组件”模式使用 decodeURIComponent(),因此结果与原始值完全一致。
计算示例
多字节 UTF-8 序列会变成一个字符。
- 输入
- caf%C3%A9%20%26%20cr%C3%A8me
- 结果 ·
decodeURIComponent() - café & crème
%20 会变成空格,但 + 会保留为字面上的加号。
- 输入
- a+b%20c
- 结果 ·
decodeURIComponent() - a+b c
最后一个序列缺少一位十六进制数,因此工具会显示错误。
- 输入
- %E0%A4%A
- 结果 ·
decodeURIComponent() - 编码后的 URL 无效
补上缺失的数位后,这三个字节会解码为一个天城文字母。
- 输入
- %E0%A4%A4
- 结果 ·
decodeURIComponent() - त
工具的处理方式
- 每个 %XX 序列代表一个字节,相邻字节会一起按 UTF-8 解码,所以 %C3%A9 会变成 é。
- 加号不会被当作空格:+ 仍然是 +。如果文本来自 HTML 表单,请先把 + 替换为 %20 再解码。
- 只要有任何序列不完整或不是有效的 UTF-8,整个输入都会报错并被拒绝,不会只解码一部分。
- “完整 URL”模式(decodeURI)会保留 %26、%2F、%3F 等保留字符的转义序列,以免改变 URL 的结构。