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

PHP如何从字符串中拆分提取url参数对应的目标链接

PHP提取URL中嵌套的url参数值方案

场景说明

你当前遇到的是URL参数未编码导致的解析问题:原始URL中url参数的值本身包含&符号,直接用parse_str或$_GET解析时会把值里的&识别为新参数的分隔符,无法拿到完整的目标URL。
下面提供两种对应场景的实现方案:

方案1:url参数在查询串首位时使用(最简便)

如果你的url参数固定在?后面第一个位置,直接截取url=之后的全部内容即可:

// 你的原始URL
$rawUrl = 'https://example.in?url=https://test.in/admin/qrcode.php?s=qr&d=sps_dev_chanel_3&sf=8&ms=r&md=0.8&format=text';

// 提取?后面的查询字符串部分
$queryStr = parse_url($rawUrl, PHP_URL_QUERY);

$targetUrl = '';
// 判断查询串是否以url=开头
if (strpos($queryStr, 'url=') === 0) {
    // 截取url=后面的所有内容,就是完整的目标URL
    $targetUrl = substr($queryStr, 4);
}

// 输出验证
echo $targetUrl;

方案2:通用兼容方案(url参数位置不固定也可用)

如果url参数可能出现在查询串的任意位置,用正则匹配提取:

$rawUrl = 'https://example.in?url=https://test.in/admin/qrcode.php?s=qr&d=sps_dev_chanel_3&sf=8&ms=r&md=0.8&format=text';

// 正则匹配url参数的完整值
preg_match('/[?&]url=(.+?)(?=&[^=&]+=|$)/', $rawUrl, $matches);
$targetUrl = $matches[1] ?? '';

echo $targetUrl;

标准场景处理(参数已编码的情况)

如果后续生成这类带嵌套URL的参数时,建议先对嵌套URL做urlencode编码,这种情况下可以直接用PHP原生方法解析,不需要额外处理:

// 编码后的原始URL示例:https://example.in?url=https%3A%2F%2Ftest.in%2Fadmin%2Fqrcode.php%3Fs%3Dqr%26d%3Dsps_dev_chanel_3%26sf%3D8%26ms%3Dr%26md%3D0.8%26format%3Dtext
$rawUrl = '编码后的URL';
$queryStr = parse_url($rawUrl, PHP_URL_QUERY);
parse_str($queryStr, $params);
$targetUrl = urldecode($params['url']);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:09:04