我一直在用锤子打断我的头来解决这个问题,但这里就可以了。我目前正在抓取从各种来源获得的一些页面,并且这些 URL 的末尾通常附有 Google Analytics 废话,以这种方式:
&utm_medium=something&utm_source=other
我正在尝试从 URL 中删除这些内容。由于这些附加在 URL 的末尾,我这样做:
$pattern = "^utm_source.*^";
$interUrl = preg_replace($pattern, '', $url);
utm_source 是用于谷歌分析的 URL 的必需部分。这是我的问题出现了。出于某种原因,我无法让模式匹配这样的&符号:“^\&utm_source.*^”。没有&符号(及其转义),我得到匹配。所以我想“没什么大不了的,我只是一个 substr”,如下所示:
$finalUrl = substr($interUrl, 0, strlen($interUrl) - 1);
但什么也没有发生。我将 -1 数字增加到 -3 甚至 -4 但没有任何内容被切断,甚至连字符后面的字符也没有。我也尝试过 str_replace 甚至 rtrim 但没有一个可以过滤掉&符号。这令人沮丧,因为我留下了错误的 URL。不仅如此,当我尝试卷曲页面时,我得到一个 404,而如果我通过浏览器访问该站点,我会被重定向到正确的页面。
关于为什么会发生这种情况的任何想法?
回答
虽然所有的答案都很好而且技术性很强,但我一直在尝试使用正则表达式,直到我弄明白了一些事情。由于某种原因(可能是我的检索方法),这些 URL 被编码了,所以我最终调整了正则表达式,如下所示:
$pattern = "/&utm_source.*/";
它有效!感谢大家的帮助!