我想删除网站上第一个“页面”项目的 $_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);
也不会工作。我错过了什么?我可以匹配一个问号,但是一旦出现问题,我就不走运了。str_replace 和 preg_replace 都是这种情况。我觉得我错过了一些明显的东西,但我无法弄清楚。谢谢您的帮助。
解决方案:
在我的具体情况下,事实证明,底层的 Magento 商店系统已经发出了 html_encoded 字符。这一点,加上第一个参数总是一个会话 ID,后来从 URL 字符串中删除,让我的任务变得简单
$url = str_replace('&p=1', '', $url);