URL Encoder / Decoder

One input per line. Output is numbered to match the input order.
Pinned tools are listed in your favourites on the home page.Copies a link to this tool that carries your current input, so it opens ready to run.Gives you an iframe snippet for putting this tool on your own site.
Ctrl+Enter Run  · Ctrl+Shift+C Copy  · Esc Clear

Understand URL Encoder / Decoder

百分号编码把在 URL 中承担结构含义的字符重写掉,使它们能够作为数据传输。

How it works

非保留字符集(A–Z、a–z、0–9 以及 - _ . ~)之外的每个字符,都会被替换成 % 加上它所占每个 UTF-8 字节的两位十六进制,因此空格变成 %20,é 变成 %C3%A9。两种模式对应两个 JavaScript 函数,区别在于它们放过了什么:encodeURI 保留构成 URL 的字符—— : / ? # [ ] @ & = + $ , ——而 encodeURIComponent 连这些也一起编码。整条 URL 用 encodeURI,准备塞进 URL 的单个值用 encodeURIComponent。

When to use it

  • 把用户输入的搜索词、邮箱地址或文件名放进查询字符串。
  • 构造一条把另一个完整 URL 作为参数值携带的跳转链接。
  • 从服务器日志或 OAuth 回调中读出百分号编码的 URL,看清实际发送的内容。
  • 对含有空格或非 ASCII 字符的路径段进行编码。

Watch out for

  • 对单个值使用 encodeURI 是错误选择:它不动 & = ? #,因此含 & 的值会悄悄分裂成两个查询参数。大多数链接损坏都源于这一个差别。
  • 表单请求体和很多老式查询字符串把空格编码成 + 而不是 %20。这里解码不会把它还原——decodeURIComponent 会留下一个字面的加号。
  • 重复编码是常见 bug,而且看得出来:%20 会变成 %2520。URL 里出现 %25 就意味着有内容被多编码了一次。
  • 尽管 RFC 3986 把 ! ' ( ) * 列为保留字符,encodeURIComponent 仍不转义它们,因此少数严格的服务器还是会与它意见不合。

Not the right tool for: 让一个值可以安全地渲染进页面。解码后的 URL 参数在进入 DOM 之前仍需做 HTML 转义。

Frequently Asked Questions

URL 编码是做什么的?

URL 编码(百分号编码)把 URL 中的特殊字符替换成 % 加上其十六进制 ASCII 码。空格变成 %20,& 变成 %26。这样能保证 URL 合法,并且所有浏览器和服务器都能正确解析。

什么时候需要对字符串做 URL 编码?

在把值拼接到查询字符串、表单 POST 请求体或任何 URL 组成部分之前都要编码。用户提供的数据一律要编码——&、=、#、? 和 + 这些字符在 URL 中都有保留含义。

encodeURI 和 encodeURIComponent 有什么区别?

encodeURI 用于整条 URL,会保留结构字符(: / ? # [ ] @ 等)。encodeURIComponent 用于单个值,连这些结构字符也一并编码——查询参数的值应该用它。

How to Use URL Encoder / Decoder

  1. Paste or type your input in the input area above.
  2. The tool processes your input automatically or click Run.
  3. Copy or download the result using the action buttons.
  4. Use Ctrl+Enter to run quickly from the keyboard.