本文详解 php 中使用 `urlencode()` 将普通字符串(含特殊字符如 `+`、空格、`/` 等)安全转换为符合 rfc 3986 规范的 url 查询参数,避免重定向时 `+` 被误解析为空格等典型编码陷阱。
在 PHP 开发中,通过 header(“Location: …”) 实现重定向时,若需将用户输入(如数学表达式、Base64 片段或含运算符的字符串)作为 URL 参数传递,直接拼接未编码的原始值极易导致语义错误。典型问题如:+ 号在 URL 查询字符串中被浏览器和服务器默认解释为空格(因 application/x-www-form-urlencoded 编码规范将 + 视为空格占位符),而非字面量加号;同样,空格、/、?、& 等字符若未经处理,将破坏 URL 结构,引发 400 错误或参数截断。
正确做法是:对每一个独立的查询参数值单独调用 urlencode() 函数。该函数严格遵循 URL 编码标准,将 + 编码为 %2B,空格编码为 %20(而非 +),斜杠 / 编码为 %2F,确保参数可被目标服务端准确还原。
例如,假设用户提交了表达式 a+b/c(含 + 和 /):