URL 编码
编码方式
扫描结果
输入文本就会即时转成网址可以使用的格式:中文、空格、&、? 这些字符会变成 %E5%8C%97 这样的百分号编码,放进网址、API 参数或推广链接都不会出错。可以选择只编码“参数值”,或保留结构的“整段网址”。要把 %XX 转回中文,切换到上方的解码标签,或使用 URL 解码。所有转换都在你的浏览器里完成,数据不会上传。
如何使用 URL 编码
- 在输入框输入或粘贴文本,下方立即显示编码结果,例如“北京”会变成
%E5%8C%97%E4%BA%AC。 - 选择编码方式:“参数值(全部编码)”(默认)编码所有特殊字符,适合放在
?q=后面的值;“整段网址(保留 : / ? & = #)”保留: / ? & = #,只编码中文和空格,适合把整个含中文的网址转成可以分享的链接。 - 选项:“空格转成 +”是表单格式;“严格 RFC 3986(连 ! ' ( ) * 也编码)”用于 OAuth 签名等 API;“每行分别编码”可以一次处理多个关键词或网址。
- 点击“复制”复制结果,或点击“转到解码”解码回来确认。
URL 编码(百分号编码)是什么
网址只能使用一小部分 ASCII 字符,其他字符(中文、空格、部分符号)都要转成 % 加两个十六进制数字,这就是百分号编码(Percent-encoding),也叫 URL 编码。中文会先按 UTF-8 转成字节,每个字节再写成一组 %XX;一个汉字通常是 3 个字节,所以会变成 3 组:
| 文字 | UTF-8 字节 | URL 编码 |
|---|---|---|
| 北京 | E5 8C 97 E4 BA AC | %E5%8C%97%E4%BA%AC |
| 空格 | 20 | %20 (+) |
& | 26 | %26 |
# | 23 | %23 |
哪些字符需要编码
| 字符类型 | 字符 | 需要编码吗 |
|---|---|---|
| 非保留字符 | A–Z、a–z、0–9、-、_、.、~ | 不用,任何地方都可以直接使用 |
| 保留字符 | : / ? # [ ] @ ! $ & ' ( ) * + , ; = | 作为网址结构时不编码;出现在参数值里就要编码 |
| 其他字符 | 中文、空格、%、"、<、> 等 | 一定要编码 |
例如搜索“AT&T”时,& 如果不编码,会被当成下一个参数的开始,网址就变成 ?q=AT 和另一个参数 T。
“参数值”和“整段网址”的区别
- 参数值(
encodeURIComponent):连/ ? & = :都编码,用于单个参数值或路径片段。 - 整段网址(
encodeURI):保留网址结构需要的符号,只编码中文、空格等字符。
把完整网址用“参数值”模式编码,会得到 https%3A%2F%2F…,这是要把整个网址放进另一个网址的参数(例如 ?redirect=)时才需要的写法。
%20 和 + 的区别
在网址路径和一般情况下,空格要写成 %20;但在 HTML 表单提交的查询字符串(application/x-www-form-urlencoded)里,空格会写成 +,百度、Google 搜索网址就是这种格式。本工具默认用 %20,勾选“空格转成 +”就会改成 +。
各编程语言的 URL 编码写法
| 语言 | 参数值(空格 → %20) | 表单格式(空格 → +) |
|---|---|---|
| JavaScript | encodeURIComponent(s) | new URLSearchParams({ q: s }).toString() |
| Python | urllib.parse.quote(s, safe='') | urllib.parse.quote_plus(s) |
| Java | URLEncoder.encode(s, UTF_8).replace("+", "%20") | URLEncoder.encode(s, UTF_8) |
| C# | Uri.EscapeDataString(s) | WebUtility.UrlEncode(s) |
| PHP | rawurlencode($s) | urlencode($s) |
| Go | url.PathEscape(s) | url.QueryEscape(s) |