[英]Error using preg_replace() to format link url
我有一个多链接:
http://test.com/?sort=newest&v=list&paged=2
http://test.com/?paged=2&sort=newest&v=list
和代码的PHP:
$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$actual_link = preg_replace("&paged=/\D/", "", $actual_link);
$actual_link = preg_replace("?paged=/\D/", "", $actual_link);
结果错误Warning: preg_replace(): No ending delimiter '&' found ...
如何删除?paged = xx和&paged = xx
正则表达式必须以符号/开头和结尾,例如:preg_replace(“ /&paged = \\ D /”,“”,$ actual_link);。 您还必须更正变量$ actual_link:$ actual_link =“ http:// {$ _SERVER ['HTTP_HOST']} {$ _SERVER ['REQUEST_URI']}”“; 不带引号将引发错误。
尝试这个:
preg_replace("/[&?]paged=\\d/", "", $actual_link);
这可以满足您的要求:(如果有很多数字,请注意d之后的+)
$link = preg_replace('/[&?]paged=\d+/', '', $link);
但是,删除&之后可能会很好,这样http://test.com/?paged=2&sort=newest&v=list不会成为http://test.com/&sort=newest&v=list (我们没有用&排序前)
最后的&是可选的。 我们可以这样删除它:
$link = preg_replace('/[&?]paged=\d+[&]?/', '', $link);
最后,确定要删除吗? 一开始。 也许您需要在排序之前? 因此, http : //test.com/?paged=2&sort=newest&v=list不会成为http://test.com/sort=newest&v=list ,而是http://test.com/?sort=newest&v=清单
在这种情况下,我们将&设为可选,并且不要删除?。
$link = preg_replace('/[&]?paged=\d+[&]?/', '', $link);
明智地选择你的毒药。
试试这个技巧
$actual_link = "http://test.com/?sort=newest&v=list&paged=2";
$actual_link = preg_replace("/[&?]paged=\d/", "&paged=", $actual_link);
echo $actual_link;
演示版
http://sandbox.onlinephpfunctions.com/code/f4d8392f4948513f8b0682081e717017eb40dea3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.