繁体   English   中英

使用preg_replace()格式化链接网址时出错

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM