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

如何用substr和strrpos清理特定字符后的字符串并修复空值问题

URL参数截取修复方案

嘿,我来帮你搞定这个问题!你遇到的空值问题,根源在于strrpos找不到指定子串时会返回false,而substr会把这个false当作0来处理——substr($url, 0, 0)的结果就是空字符串,只要原URL里有任何一个关键词不存在,后续的截取操作就会直接把整个URL清空。

下面给你两种靠谱的修复方法:

方法一:检查关键词存在性再截取

这种方法保留你原来的思路,但每次截取前先确认关键词确实存在,避免无效截取导致空值:

$url = '/resutls?offer=1&gclid=CjwKCAjw1f_pBRAEEiwApp0JK';

// 把需要移除的关键词整理成数组,方便遍历
$removeKeywords = [
    '&gclid',
    '&utm_source',
    '?utm_campaign',
    '?utm_medium',
    '?token',
    '&fbclid',
    '&utm_campaign',
    '&utm_medium',
    '&token'
];

foreach ($removeKeywords as $keyword) {
    $pos = strrpos($url, $keyword);
    // 只有找到关键词时才执行截取操作
    if ($pos !== false) {
        $url = substr($url, 0, $pos);
    }
}

echo $url; // 输出:/resutls?offer=1

方法二:用正则表达式批量处理(更简洁高效)

既然你要移除的都是类似gclid、utm_*这类追踪参数,用正则可以一次性搞定,比逐个处理更省心:

$url = '/resutls?offer=1&gclid=CjwKCAjw1f_pBRAEEiwApp0JK';

// 正则匹配并移除所有目标追踪参数(包括前面的分隔符)
$url = preg_replace('/(&|\?)(gclid|utm_source|utm_campaign|utm_medium|token|fbclid)=[^&]*/', '', $url);

// 处理可能残留的末尾分隔符(比如最后一个参数被移除后剩下的?或&)
$url = rtrim($url, '?&');

echo $url; // 输出:/resutls?offer=1

这个正则的逻辑是:

  • (&|\?)匹配参数前面的分隔符(要么是&要么是?)
  • (gclid|utm_source|...)是你要移除的参数名列表
  • =[^&]*匹配参数的取值部分,直到下一个&或者字符串结束

这样不管URL里有没有这些参数,都不会出现截空的问题,还能一次性清理所有目标参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:23:27