You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中如何获取包含&符号的复杂GET参数?

解决GET参数含&时被截断的问题

这个问题我之前开发时也碰到过!核心原因很直白:&是URL里分隔多个GET参数的特殊字符,当你的url参数里包含&时,服务器会把第一个&后面的内容识别成新的独立参数,自然就导致原url参数被截断了。不用修改服务器配置的话,有两个实用的解决办法:

方法一:让请求方对目标URL做URL编码

这是最规范的处理方式。请求方需要把要传递的URL里的特殊字符(比如&、?、空格等)转换成URL编码格式:

  • & → %26
  • ? → %3F
  • 空格 → %20(或+)

比如你原来的请求会变成:

http://localhost/run.php?url=www.google.com%3Faction%3DGo%26category%3D3%26name%3Dfoo%20bar

这时PHP里直接用$_GET['url']就能拿到完整的URL了——因为PHP会自动对GET参数做URL解码,你不需要额外处理。

方法二:手动解析整个查询字符串

如果没办法要求请求方做编码,那可以在PHP里通过$_SERVER['QUERY_STRING']获取完整的原始查询字符串,然后自行提取url参数的内容:

<?php
// 获取?后面的所有原始查询内容
$queryString = $_SERVER['QUERY_STRING'] ?? '';
$url = '';

// 定位到url=的起始位置
$urlParamStart = strpos($queryString, 'url=');
if ($urlParamStart !== false) {
    // 截取url=之后的所有内容
    $rawUrlContent = substr($queryString, $urlParamStart + 4);
    // 对内容做URL解码,还原原始URL
    $url = urldecode($rawUrlContent);
}

echo $url; // 输出完整的www.google.com?action=Go&category=3&name=foo bar
?>

小提醒

无论用哪种方法,都要注意安全风险:直接使用用户传入的URL可能存在SSRF(服务器端请求伪造)等问题,建议在使用前对URL做合法性校验(比如限制允许的域名、协议等)。

内容的提问来源于stack exchange,提问作者albertma789

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:27:53