首页 > 解决方案 > 从 URL 中批量删除查询字符串的组件

问题描述

我想将以下 mySQL 查询转换为快速的 PHP 解决方案。这里的变量是$url,我想要的是删除以以下字符串开头的所有内容,包括它们。

例如

domain.com/foo/bar?gcllid=abcdefghi

应该

domain.com/foo/bar

这是查询

UPDATE browsing SET url = SUBSTRING_INDEX( url ,'?gclid',1), 
url = SUBSTRING_INDEX( url ,'&gclid',1), 
url = SUBSTRING_INDEX( url ,'?fbclid',1), 
url = SUBSTRING_INDEX( url ,'&utm_source',1),
url = SUBSTRING_INDEX( url ,'?utm_campaign',1),
url = SUBSTRING_INDEX( url ,'?utm_medium',1),
url = SUBSTRING_INDEX( url ,'?token',1),
url = SUBSTRING_INDEX( url ,'&fbclid',1),
url = SUBSTRING_INDEX( url ,'&utm_campaign',1),
url = SUBSTRING_INDEX( url ,'&utm_medium',1),
url = SUBSTRING_INDEX( url ,'&token',1);

标签: phpmysql

解决方案


你可以使用我做的这个小功能... \(o.0)/

$remove = ["foo"];
$url = 'domain.com/foo/bar?gcllid=abcdefghi&foo=bar';

function f($u,array$r){$x='?';if(!strpos($u,$x))return$u;parse_str(parse_url($u,6),$g);return rtrim(substr_replace($u,http_build_query(array_diff_key($g,array_flip($r))),strpos($u,$x)+1),$x);}




echo f($url,$remove);

输出

domain.com/foo/bar?gcllid=abcdefghi

沙盒

如上所示,任何“键”(区分大小写)都$remove将被删除。它们不只是以粗鲁的方式“剥离”出来。但相反,它使用了以下功能的组合:

  • parse_url- 用于从 url 获取查询字符串
  • parse_str- 用于将查询字符串解析为数组
  • http_build_query- 用于从数组重建查询字符串

还有一些我最喜欢的功能,比如,,,substr_replacertrim永远array_diff_key存在array_flipstrpos

不用说,但是您可以根据需要keys$remove列表中添加任意数量。它还?通过仅返回它们来正确处理缺少查询字符串的 URL。它将删除?if 它是查询字符串中唯一剩下的东西,所以没有尾随?

对于你的例子,从问题:

例如

domain.com/foo/bar?gcllid=abcdefghi

应该

domain.com/foo/bar

您只需使用这些输入:

$remove = ["gcllid"];
$url = 'domain.com/foo/bar?gcllid=abcdefghi';

你得到这个输出

domain.com/foo/bar

干杯!

*PS您可能想将其重命名为f...


推荐阅读