本文详解 php 中使用 `urlencode()` 函数对字符串进行标准 url 编码的方法,解决 `+` 号被误解析为空格、特殊字符未转义导致重定向失败等问题,并提供安全重定向的完整实践示例。
在 PHP 中构建带参数的重定向 URL(如 header(“Location: …”))时,若原始数据包含空格、+、/、?、& 等特殊字符,直接拼接会导致 URL 语义错误。典型问题如:+ 在 URL 查询字符串中默认被解码为空格(因 application/x-www-form-urlencoded 规范将 + 视为空格),而非字面量加号;而 / 或 = 若未编码,可能被服务器误判为路径分隔符或参数分界符。
正确做法是:对每一个需作为查询参数值传递的变量,单独调用 urlencode() 进行编码。该函数严格遵循 RFC 3986,将非字母数字字符(除 -._~ 外)转换为 %XX 十六进制格式,且将空格编码为 %20(而非 +),从而彻底规避歧义。
以下是一个安全重定向的完整示例: