私はこれを理解するためにハンマーで頭を壊してきましたが、ここに行きます. 私は現在、さまざまなソースから取得したいくつかのページをスクレイピングしていますが、URL の末尾に次のように Google アナリティクスのがらくたが添付されていることがよくあります。
&utm_medium=something&utm_source=other
そして、URLからそれらを取り除こうとしています。これらは URL の末尾に追加されるため、次のようにします。
$pattern = "^utm_source.*^";
$interUrl = preg_replace($pattern, '', $url);
utm_source は、Google アナリティクスの URL の必須部分です。ここに私の問題が現れます。何らかの理由で、"^\&utm_source.*^" のようなアンパサンドに一致するパターンを取得できません。アンパサンド (およびそのエスケープ) がなければ、一致します。だから私は次のように「大したことはありません、私はただsubstrに行きます」と思いました:
$finalUrl = substr($interUrl, 0, strlen($interUrl) - 1);
しかし、何も起こりません。-1 の数値を -3 または -4 に増やしましたが、アンパサンドの後の文字でさえ、何も途切れませんでした。str_replace や rtrim も試しましたが、アンパサンドを除外することはできませんでした。間違った URL が残っているので、これはイライラします。それだけでなく、ページをカールしようとすると 404 が返されますが、ブラウザからそのサイトにアクセスすると、正しいページにリダイレクトされます。
なぜこれが起こっているのかについてのアイデアはありますか?
答え
すべての答えは素晴らしく技術的でしたが、私は何かを理解するまで正規表現でたわごとを試み続けました. URL は、何らかの理由で (おそらく私の取得方法)、エンコードされていたため、次のように正規表現を微調整することになりました。
$pattern = "/&utm_source.*/";
そしてそれは動作します!みんなの助けに感謝します!