php - 从 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);
解决方案
你可以使用我做的这个小功能... \(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_replace
和rtrim
永远array_diff_key
存在array_flip
的strpos
。
不用说,但是您可以根据需要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
...
推荐阅读
- codeigniter - 即使在 Codeigniter 中正确设置了 MVC 文件,也返回 404
- reactjs - 如何使用 Firestore 数据在 React Native 中实现虚拟滚动 FlatList?
- sed - How to use Sed to Replace Wildcard with Space
- c# - 我的 KeyStrokesCounter 一直运行良好,直到今天
- netsuite - Berkshire script search on transaction
- r - 从简单的特征几何转换为数据框
- command-line-interface - Splunk - 连接到远程服务器时来自 cli 的“未找到”
- javascript - Brotli in a React application using server side rendering(SSR)
- c# - 设置DataGridView的DataSource后,Columns和Rows还是空的
- java - How to Display Fragments in Main Activity from Navigation Drawer?