
本文介绍如何使用 `urlencode()` 函数正确编码字符串(如含 `+`、空格、`/` 等特殊字符),确保重定向时 url 参数被准确解析,避免 `+` 被误作空格、斜杠破坏路径结构等问题。
在 PHP 中构建带参数的重定向 URL(如 header("Location: ..."))时,若原始数据包含特殊字符(例如数学表达式中的 +、空格、/、?、& 等),直接拼接会导致 URL 解析异常:浏览器会将未编码的 + 视为空格(因 application/x-www-form-urlencoded 格式中 + 是空格的约定编码),后端接收时便无法还原原始值。
正确做法是——对每一个需作为查询参数值传递的变量,单独调用 urlencode() 进行百分号编码(URL encoding)。该函数会将 + 编码为 %2B,空格为 %20,/ 为 %2F,确保语义完整且符合 RFC 3986 标准。
例如,修复你提供的代码:
⚠️ 注意事项:
立即学习“PHP免费学习笔记(深入)”;
- ❌ 不要对整个 URL 字符串调用 urlencode()(会把 :、/、? 等协议和结构符也编码,导致 URL 失效);
- ✅ 始终只对参数值(value)编码,而非键(key)或 URL 框架;
- ? 若参数需出现在 URL 路径部分(如 /api/v1/users/John+Doe),应使用 rawurlencode() ——它对 / 不编码,而 urlencode() 会将 / 编为 %2F,破坏路径层级;
- ? 重定向前务必调用 exit 或 die(),防止后续代码执行造成意外输出或 headers already sent 错误;
- ? 对多参数场景,推荐使用 http_build_query() 自动编码并拼接:
$params = ['i0' => $_GET['eqn'], 'ord' => $_GET['ord']]; $query = http_build_query($params); // 自动 urlencode 所有值 header("Location: http://example.com/?" . $query); exit;
总结:urlencode() 是 PHP 中处理 URL 查询参数编码的基石函数。只要牢记“只编码参数值,不编码 URL 结构”,就能彻底规避 + 变空格、中文乱码、路径断裂等常见问题,让重定向与参数传递稳定可靠。











