编码一个搜索词
hello world & more
hello%20world%20%26%20more
空格变成 %20,& 变成 %26,这样它就不会被误认为是查询参数的分隔符。
安全地编码和解码 URL 组件。
最后更新
Coddy 让你在浏览器里编写真实代码来学习:互动课程、即时反馈,卡住时还有 AI 帮忙。
URL 编码器(也叫百分号编码器或 URI 编码器)会把 URL 中保留的或不安全的字符,替换成 % 加两位十六进制数字。开发者在拼接查询字符串、转义路径片段、分享包含空格或非 ASCII 字符的网址,以及调试重定向时都会用到它。
URL 只允许使用一小部分 ASCII 字符。这个范围之外的任何字符,比如空格、带重音的字母、emoji,或者作为数据使用的 ?、#、&、= 等保留符号,都必须经过百分号编码,才能从浏览器完整地传到服务器。
JavaScript 提供了两个编码函数:encodeURI(保留 URL 结构:/、?、#、&)和 encodeURIComponent(编码所有保留字符)。对要塞进查询字符串的值使用 encodeURIComponent,对需要保持可用的完整 URL 使用 encodeURI。
% 加两位十六进制数字,例如空格会变成 %20。: / ? # & = +)在 URL 结构中有特定含义。当它们作为数据而不是分隔符使用时,必须进行编码。encodeURI 会保持 URL 结构不变;encodeURIComponent 会编码所有保留字符。在正确的位置用正确的函数。如果你有原始文本,想让它可以安全地放进 URL,就选“编码”。如果你有一个 % 编码的字符串,想还原出原文,就选“解码”。
查询字符串的值选 encodeURIComponent(编码所有保留字符);完整 URL 选 encodeURI(保留结构)。
粘贴原始文本或编码后的 URL。支持多行输入,可以批量解码。
复制编码或解码后的值。转换在你的浏览器本地完成,所以 URL 中的敏感信息不会离开你的设备。
最常被编码的字符及其百分号编码形式。保留字符的语义来自 RFC 3986。
| 字符 | 编码后 | 原因 |
|---|---|---|
| 空格 | %20 | URL 中不允许出现空格 |
! | %21 | 部分服务器将其保留 |
# | %23 | 标记片段的开始 |
$ | %24 | 保留字符 |
& | %26 | 分隔查询参数 |
+ | %2B | 在表单编码的请求体中表示空格 |
/ | %2F | 路径分隔符 |
: | %3A | 分隔协议和主机 |
= | %3D | 在查询字符串中分隔键和值 |
? | %3F | 标记查询字符串的开始 |
@ | %40 | 分隔用户信息和主机 |
| UTF-8 字节 | %C3%A9 | 每个非 ASCII 字节都会被编码 |
hello world & more
hello%20world%20%26%20more
空格变成 %20,& 变成 %26,这样它就不会被误认为是查询参数的分隔符。
café
caf%C3%A9
é 的 UTF-8 字节序列是 0xC3 0xA9,所以这一个字符编码后会有两组 %XX。
https://example.com/path?q=hello world
https://example.com/path?q=hello%20world
https%3A%2F%2Fexample.com%2Fpath%3Fq%3Dhello%20world
encodeURI 保持 URL 结构不变(斜杠、?、=)。encodeURIComponent 会编码所有保留字符,应该用在放进查询字符串的值上,永远不要用在整个 URL 上。
encodeURI:& 和 = 不会被编码,从而破坏参数解析。%2520 而不是 %20,就是重复编码 bug 的典型标志。+ 在 application/x-www-form-urlencoded 请求体中表示空格,但在 URL 路径或查询中就是字面的 +。decodeURIComponent 能接受任何字符串。遇到后面没有跟两位十六进制数字的单独 % 时,它会抛出异常。% 加两位十六进制数字。encodeURI 会保留 URL 的结构字符(/、?、#、&、=、+)。encodeURIComponent 会把它们全部编码,这正是放进 URL 中的单个值所需要的,比如查询参数值、路径片段、片段标识。参见 MDN 中 encodeURI 和 encodeURIComponent 的参考文档。%20?%20,也就是 ASCII 空格字符(十六进制 0x20)的百分号编码。任何用户提供的或动态生成的值,在放进 URL 之前都要编码,比如查询字符串的值、路径片段、重定向目标、OAuth 参数。永远不要假定原始输入是 URL 安全的。
decodeURI、decodeURIComponent 或任何 URL 解码器,都能把百分号编码还原成原来的字符。