Cyeam Logo
Go工具集

URL Escape 在线编解码

什么是URL 编码

URL 编码(URL encode),也称为百分号编码(percent-encoding),是一种将字符转换为可在 URL 中安全传输的格式的方法。

编码的目的

  • 符合 URL 规范:URL 只能使用特定的字符集,包括字母、数字和一些特殊字符(如 -_.~ 等)。对于不在这个字符集中的字符,需要进行编码以便能够在 URL 中传输。 例如,空格在 URL 中是不允许直接出现的字符,会被编码为 %20。
  • 防止歧义:某些字符在 URL 中有特殊含义,如 /、?、& 等。如果不进行编码,可能会导致 URL 解析错误。例如,如果要在 URL 中传递一个包含问号 ? 的参数值,就需要对问号进行编码,否则会被误认为是参数分隔符。

编码规则

  • 对于需要编码的字符,将其 ASCII 值转换为十六进制数,然后在前面加上 % 符号。例如,字符 # 的 ASCII 值为 35,转换为十六进制为 23,所以在 URL 编码中,# 被编码为 %23。
  • 保留字符和非保留字符:保留字符包括用于分隔 URL 不同部分的字符(如 /、?、:、#、[、]、@、!、$、&、'、(、)、*、+、,、;、=)以及用于控制 URL 编码和解码的字符(如 %)。这些字符在特定情况下有特定的用途,一般情况下如果它们不是用于其特殊用途,也需要进行编码。 非保留字符包括字母、数字以及 -_.~ 这几个字符。这些字符可以直接出现在 URL 中而不需要进行编码。

应用场景

  • URL 参数传递:当通过 URL 传递参数时,如果参数值中包含特殊字符或非 ASCII 字符,就需要进行 URL 编码。例如,在一个搜索页面的 URL 中,如果用户输入的搜索关键词包含空格或其他特殊字符,就需要对关键词进行编码后再添加到 URL 中。 如 https://www.example.com/search?q=hello%20world,这里的 hello world 经过 URL 编码后变为 hello%20world。
  • 表单提交:当通过 HTML 表单提交数据时,如果表单字段的值包含特殊字符,浏览器会自动对表单数据进行 URL 编码后再发送给服务器。 例如,一个包含用户名和密码的登录表单,如果用户名包含特殊字符,在提交表单时,浏览器会对用户名进行 URL 编码后将其包含在请求 URL 中。
  • AJAX 请求:在使用 JavaScript 进行 AJAX 请求时,如果请求的 URL 或参数中包含特殊字符,也需要进行 URL 编码,以确保请求能够正确地被服务器解析。
  • Go实现

    url.QueryEscape("https://www.cyeam.com")
    字符 URL编码 说明
    空格 %20 网页中最常用的编码之一,用于替换空格
    斜杠 %2F 用于分隔 URL 路径(如https%3A%2F%2Fexample.com
    问号 %3F URL 中查询参数的起始符号(如?key=value
    等号 %3D 查询参数中键值对的连接符(如key%3Dvalue
    与符号 %26 多个查询参数的分隔符(如key1%3Dvalue1%26key2%3Dvalue2
    井号 %23 用于 URL 锚点(如#section
    加号 %2B 表示空格或正号(在表单提交中常见)
    百分号 %25 转义自身(因为 URL 编码以%开头)
    逗号 %2C 用于分隔参数或路径(如 CSV 文件下载链接)
    冒号 %3A 用于分隔 URL 协议和端口(如https%3A//
    分号 %3B 在某些 URL 格式中用于分隔参数
    大于号 %3E 符号>的编码
    小于号 %3C 符号<的编码
    感叹号 %21 符号!的编码
    星号 %2A 符号*的编码
    单引号 %27 符号'的编码
    双引号 %22 符号"的编码
    括号 %28(左)、%29(右) 符号()的编码
    方括号 %5B(左)、%5D(右) 符号[]的编码
    花括号 %7B(左)、%7D(右) 符号{}的编码
    竖线 %7C 符号 `|`
    波浪线 %7E 符号~的编码
    at 符号 %40 符号@的编码(常用于邮箱地址在 URL 中)
    美元符号 %24 符号$的编码
    英镑符号 %A3 符号£的编码(根据字符集不同可能有差异)
    Web Analytics Made Easy - Statcounter