Web サイトの最初の「ページ」アイテムの $_GET パラメータを削除したいと考えています。
以下は、ローカル サーバーのテスト スクリプトで完全に機能します。
$urls = array(
'http://www.foo.com/bar.html?p=1', //should match
'http://www.foo.com/bar.html?p=23',
'http://www.foo.com/bar.html?p=120',
'http://www.foo.com/bar.html?baz=123&p=1' //should match
);
foreach ($urls as $url) {
echo $url . '<br>';
echo preg_replace('/([\?&]p=1)(?!\d)/', '', $url) . '<p>';
}
これにより、次が生成されます。
http://www.foo.com/bar.html?p=1
http://www.foo.com/bar.html
http://www.foo.com/bar.html?p=23
http://www.foo.com/bar.html?p=23
http://www.foo.com/bar.html?p=120
http://www.foo.com/bar.html?p=120
http://www.foo.com/bar.html?baz=123&p=1
http://www.foo.com/bar.html?baz=123
ただし、ライブ サイトでは、一致することはありません。
さらに悪いことに、
str_replace('?p=1','',$url);
同様に機能しません。私は何が欠けていますか?1つのクエスチョン マークに一致することはできますが、その後に何かが続くとすぐに運が悪くなります。これは、str_replace と preg_replace の両方に当てはまります。明らかな何かが欠けているように感じますが、理解できません。ご協力ありがとうございました。
解決:
私の特定のケースでは、基盤となる Magento ショップ システムがすでに html_encoded 文字を提供していることが判明しました。これに加えて、最初のパラメーターが常にセッション ID であり、後で URL 文字列から削除されるという事実により、私のタスクは次のように簡単になりました
$url = str_replace('&p=1', '', $url);