URL 编解码

URL / URI 组件的百分号编码与解码,处理中文与特殊字符。

什么是URL 编解码?

URL 编解码工具用于对 URL 或其中的参数片段做百分号编码(Percent-Encoding,即 URL Encode)与解码。编码会把空格、中文、& = ? # 等在 URL 中有特殊含义或不允许直接出现的字符,转换成 %XX 形式的十六进制表示;解码则是把 %XX 还原成原始字符。 工具通常提供两种模式:encodeURIComponent 风格(编码单个参数值,会转义 & = ? / 等分隔符)和 encodeURI 风格(编码整个 URL,保留 :/?#& 等 URL 结构字符),选错模式会导致编码结果不符合预期。

为什么使用URL 编解码?

常见场景:拼接带中文参数的链接(如商品名称、搜索关键词)时需要先编码,避免链接被浏览器或服务器截断解析错误;调试接口时看到日志里的 %E4%B8%AD%E6%96%87 想知道原文是什么;分享包含特殊符号(如 &、空格)的链接前需要先转义。 与直接用浏览器地址栏输入相比,本工具能精确区分“编码整个 URL”和“只编码参数值”两种需求,避免把本该保留的 / 或 ? 也编码掉导致链接失效。

使用示例

编码搜索关键词做拼接

输入 "笔记本电脑 16寸",用 encodeURIComponent 模式编码后得到 "%E7%AC%94%E8%AE%B0%E6%9C%AC%E7%94%B5%E8%84%91%2016%E5%AF%B8",可以直接拼进 "https://example.com/search?q=编码结果" 作为参数值使用。

解码日志里的乱码参数

输入 "name%3D%E5%BC%A0%E4%B8%89%26age%3D20",解码后还原为 "name=张三&age=20",可以看出原始是两个参数被整体当作一个值编码后传递。

区分整体编码与参数编码

对完整链接 "https://a.com/查询?k=你好" 用 encodeURI 模式编码,会保留 "://" "?" "=" 等结构符号,只转义“查询”“你好”等非 ASCII 字符,得到可直接访问的合法 URL;若误用 encodeURIComponent 会把 "://" 也编码成 %3A%2F%2F,导致整个字符串不再是一个可跳转的链接。

使用提示

如果不确定该用哪种模式,记住一个原则:只编码“参数的值”用 encodeURIComponent 风格(转义更彻底);编码“整条链接”用 encodeURI 风格(保留结构符号),避免链接被破坏。

常见问题

encodeURIComponent 和 encodeURI 有什么区别?
本工具用 encodeURIComponent,会对 & = ? / 等分隔符也编码,适合编码「参数值」;encodeURI 保留这些分隔符,适合整条 URL。拼接参数时用组件编码更安全。
中文会被编码成什么?
按 UTF-8 编码为 %XX 序列,例如「你好」→ %E4%BD%A0%E5%A5%BD,解码可还原。
数据会上传吗?
不会,全部在浏览器本地处理。
中文会被正确编码吗?
会,中文字符先按 UTF-8 转成字节,再对每个字节做 %XX 十六进制编码,一个汉字通常对应 3 个 %XX 组(如“中”编码为 %E4%B8%AD)。
+ 号和 %20 都表示空格吗?
在 URL 路径和查询参数的标准编码中空格应编码为 %20;+ 号是表单提交(application/x-www-form-urlencoded)里对空格的传统写法,两者语境不同,混用可能导致解码结果异常,需根据实际接口约定选择。
和 Base64 编码是一回事吗?
不是,URL 编码只针对 URL 中不允许或有歧义的特殊字符做转义,Base64 是把任意二进制数据转成一组固定字符集的编码方式,两者用途和结果完全不同。
解码报错或结果异常怎么办?
常见原因是输入的字符串中包含不完整的 %XX 序列(如末尾被截断),或原文本可能已经被编码了两次(双重编码),需要先解码一次再解码一次。
会把结果发送到服务器吗?
不会,编解码逻辑在浏览器本地的 JavaScript 中完成,不涉及网络请求。

相关工具

相关教程

← 返回工具箱· 数据均在浏览器本地处理,不上传服务器。