URL 编码讲解
更新 2026-07-06
复制一个带搜索词的 URL,你常会在本该是空格或带重音字母的地方看到 %20 或 %C3%A9 之类的东西。那就是 URL 编码在起作用。本指南讲解它做什么、为何需要,以及哪些字符会被转义。
URL 编码是什么
URL 编码 —— 也叫 百分号编码(percent-encoding) —— 是在 URL 中表示那些否则会不安全或有歧义的字符的一种方式。每个这样的字符会被替换成一个 % 后跟其十六进制字节值。空格变成 %20;&符号变成 %26。
为何需要
URL 只能包含有限的一套字符,其中一些还有特殊职责:? 开启查询字符串,& 分隔参数,/ 分隔路径段,# 标记片段。如果你要放进 URL 的值含有其中之一,就必须编码它,让它被当作数据而非结构。
Search term: cats & dogs In a URL: ?q=cats%20%26%20dogs
不编码的话,原始的 & 会被读成一个新参数的开始,搜索就会出错。
保留字符 vs. 非保留字符
- 非保留(Unreserved) 字符 —— 字母、数字,以及
- _ . ~—— 总是安全,永不需要编码。 - 保留(Reserved) 字符 —— 像
? & / # : @ =—— 具有特殊含义,作为字面数据使用时必须编码。 - 其他一切 —— 空格、带重音字母、表情符号和大多数符号 —— 依据其 UTF-8 字节编码,这正是一个字符可能变成好几个
%xx对的原因。
一个常见的混淆:加号
在表单提交的查询字符串里,空格有时被编码成 + 而非 %20。视语境两者都可能表示“空格”,这会绊倒人 —— 拿不准时,%20 总是安全的。
URL 编码 vs. Base64
这两者解决不同的问题。URL 编码让文本能安全地放 在 URL 里面;Base64 让 二进制 数据能安全地穿过基于文本的通道。它们有时会合起来用(Base64URL),但并不可互换。
更多 数据格式与编码
查看全部 数据格式与编码 指南 →本指南提到的工具