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

时间:2014-08-24 13:59:58

标签: php

我有一个多链接:

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

4 个答案:

答案 0 :(得分:0)

正则表达式必须以符号开头和结尾,例如: preg_replace(" /& paged = \ D /","",$ actual_link);. 您还必须更正变量$ actual_link: $ actual_link =" http:// {$ _SERVER [' HTTP_HOST']} {$ _SERVER [' REQUEST_URI']}&#34 ;; 没有引号会引发错误。

答案 1 :(得分:0)

试试这个:

preg_replace("/[&?]paged=\d/", "", $actual_link);

答案 2 :(得分:0)

这可以达到你想要的效果:(注意多位数字后面的+)

 $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=list

在这种情况下,我们制作&可选,并且不要删除?。

$link = preg_replace('/[&]?paged=\d+[&]?/', '', $link);

明智地选择你的毒药。

答案 3 :(得分:0)

尝试这个技巧

$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