在 PHP 中处理 URL 中带有 & 的参数时,关键是理解它的来源和如何正确解析。 & 是 HTML 实体,表示字符 & ,通常出现在 HTML 中的链接或表单中,例如:
<a href=”test.php?a=1&b=2″>Link</a>
浏览器在访问这个链接时会自动将 & 解码为 & ,所以 PHP 实际接收到的是:
test.php?a=1&b=2
🧼 如果你从 HTML 中读取原始字符串(比如数据库或模板),并需要还原 & 为 & :
$raw = “a=1&b=2”;
$decoded = html_entity_decode($raw); // 输出: a=1&b=2
parse_str($decoded, $params);
echo $params[‘a’]; // 1
echo $params[‘b’]; // 2
🧼 如果浏览器没有做进一步地转义,你收到的仍旧是未转换的 & 或者转换之后的也是 & .
这种情况少有发生,但也的确会存在,比如 新浪微博 不提供直接向第三方 URL 地址之冬跳转,而是将第三方地址编码,允许用户手工复制地址并再粘贴到浏览器地址栏实现跳转——这实在是技术被政策扭曲到畸形的典型案例。
原地址:
test.php?a=1&b=2
第一次转义后:
test.php?a=1&b=2
第二次转义后:
test.php?a=1&amp;b=2
此时即便浏览器做一遍了 & 到 & 的转义, 在服务器端的程序, 如 PHP 收到的仍旧是未被完全转义后的 URL 地址, 形如
test.php?a=1&b=2
此时,如果要获得预期的参数 b 的正确的数值, 除了上文提到的使用
html_entity_decode + parse_str
这个组合函数外,还可以简单直接了当地、将错就错地获取参数 b 的数值
$b_value = $_REQUEST[‘amp;b’];
—-
Assisted by Microsoft Copilot.
Oct 14, 2025.










