URI编码(也称百分号编码/Percent-encoding)是Web开发中最基础也最容易出错的环节之一。URL中只能包含ASCII字符,中文、空格、特殊符号等都必须经过编码才能安全传输。本工具支持三种编码模式(encodeURIComponent、encodeURI、urlencode),提供URL结构解析、字符对照表和批量处理功能。
| 特性 | encodeURIComponent | encodeURI | urlencode (PHP) |
|---|---|---|---|
| 编码范围 | 编码除 A-Z a-z 0-9 - _ . ! ~ * ' ( ) 之外的所有字符 | 不编码 : / ? # [ ] @ ! $ & ' ( ) * + , ; = -_.~ | 同Component,但空格编码为+而非%20 |
| : / ? & = | ✅ 编码 | ❌ 不编码(保留URL结构) | ✅ 编码 |
| 空格 | %20 | %20 | +(加号) |
| 适用场景 | URL参数值、表单字段值 | 完整URL(保留结构) | PHP表单数据、query string |
| JavaScript | encodeURIComponent() | encodeURI() | — |
| PHP | rawurlencode() | 自定义实现 | urlencode() |
将中文、特殊字符等编码后放入URL参数中传输。例如搜索关键词q=你好世界需要编码为q=%E4%BD%A0%E5%A5%BD%E4%B8%96%E7%95%8C,否则URL会被浏览器截断或服务器解析错误。必须使用encodeURIComponent模式。
调用REST API时,请求参数中的特殊字符(如&、=、+)必须编码以避免与URL语法冲突。调试时经常需要手动编码参数或解码API返回的编码字符串查看实际内容。
在URL中使用中文路径或文件名(如/文档/报告.pdf)时需要URI编码。分享链接时中文URL被自动编码导致看不懂,需要解码还原查看。
HTML表单POST提交时,表单数据默认使用application/x-www-form-urlencoded格式,即urlencode编码。调试表单提交问题时需要编码/解码表单数据。
构建OAuth回调URL、支付跳转URL时,redirect_uri参数本身就是一个URL,需要整体编码(encodeURIComponent)后作为另一个URL的参数值传递。这种"URL中嵌套URL"的场景最容易出错。
Cookie值不能包含空格、分号、逗号等字符。将复杂内容存入Cookie前需要URI编码,读取时解码还原。
构建mailto:链接的subject和body参数、微信/微博分享链接的标题和描述参数时,都需要URI编码确保特殊字符正确传递。
检查搜索引擎爬虫抓取的URL是否正确编码,分析服务器日志中的编码URL,调试canonical标签和sitemap中的中文URL。
工具提供四个标签页:「🔄 编码/解码」用于文本与URI编码的互转;「🔍 URL解析」将完整URL拆解为协议、域名、路径、参数等组成部分并逐个解码;「📊 字符对照表」展示常见特殊字符在三种模式下的编码结果;「📋 批量处理」一次处理多条数据。
在编码/解码标签页中,点击顶部三个模式按钮切换。encodeURIComponent(默认)编码所有特殊字符包括: / ? & =,适合编码URL参数值。encodeURI保留URL结构字符,适合编码整个URL。urlencode同Component但空格编码为+而非%20,与PHP的urlencode()一致。
在左侧"原始文本"区域输入或粘贴要编码的内容(中文、URL、特殊字符均可)。工具实时自动编码,结果显示在右侧。下方同时显示输入字符数、字节数、输出长度、被编码的字符数和膨胀比例。还会展示三种模式的对比结果,方便选择最合适的模式。
在右侧区域粘贴已编码的URI字符串(如%E4%BD%A0%E5%A5%BD),工具自动解码并在左侧显示原文。支持自动识别%XX和+(空格)两种编码格式。
切换到「🔍 URL解析」标签页,粘贴一个完整URL。工具将其拆解为协议(scheme)、域名(host)、端口(port)、路径(path)、查询参数(query)、锚点(fragment)等组成部分。所有参数自动解码并以表格形式展示参数名、原始值和解码值的对照。
切换到「📊 字符对照表」查看空格、!、#、$、&、+、/、:、?、@、中文等40+种特殊字符在三种编码模式下的不同结果。绿色表示不编码(原样保留),红色表示编码(转为%XX格式)。这有助于理解为什么不同场景需要不同的编码模式。
切换到「📋 批量处理」标签页,选择编码/解码方向和编码模式,在文本框中每行输入一条数据(最多500条),点击处理。结果以表格形式展示输入和对应编码/解码结果。
简单规则:编码URL的某个参数值时用encodeURIComponent(编码一切特殊字符),编码整个URL时用encodeURI(保留://、?、&等URL结构字符)。最常见的错误是用encodeURI编码参数值导致&和=没有被编码。
%20是RFC 3986的标准URI编码,+是application/x-www-form-urlencoded的表单编码(PHP的urlencode使用此格式)。在URL路径中应使用%20,在表单POST数据中两者通用。推荐统一使用%20。
一个中文字符在UTF-8编码下占3个字节,每个字节编码为%XX格式(3字符),所以一个中文字符变成9个ASCII字符。例如"你"→%E4%BD%A0。这就是URI编码膨胀的主要原因。
如果把已经编码的字符串再编码一次,%号本身也会被编码为%25,导致%E4变成%25E4。解码时只还原一层就会得到错误结果。检查方法:如果编码结果中出现%25,很可能是二次编码了。
RFC 3986规定URI中的"未保留字符"(A-Z、a-z、0-9、-、_、.、~)可以直接使用不需要编码。它们在任何上下文中都不会产生歧义。
看场景。encodeURIComponent会编码#为%23(因为作为参数值时#不应有特殊含义)。encodeURI不会编码#(因为它是URL锚点标记)。如果你的参数值包含#,必须用encodeURIComponent。
编码解码均在当前页面PHP后端即时处理,不传输到第三方服务器,处理后不存储任何数据。