我花了几个小时试图解决这个问题,但我无法得到它。我只是希望preg_replace
仅从锚标记中删除http://
。我试过这个str_replace
,但正如您已经知道它在preg_replace
内无效:
$site = preg_replace('/<a href="(.*?)">/','<a href="mypage.php?url='. str_replace("http://", "", "$1") .'">', $site);
我只希望任何锚点链接删除http://
部分,但不是图像链接,因此它不会破坏&lt; img src =&#34; .....&#34; &GT;
标签。只有锚标签的网址。实际上,如果你可以删除http://
和www。这也很棒。因此,http://google.com或http://www.google.com将显示为google.com。感谢。
答案 0 :(得分:1)
$1
不是真正的变量,因此您无法在其上使用str_replace
。
试试这个:
$site = preg_replace('/<a href="http:\/\/(.*?)">/','<a href="mypage.php?url=$1">', $site);
只需将http://放在模式中,即可确保它不在$1
中。当然,你需要通过在它前面放一个反斜杠来逃避/
。因此:\/\/
如果你需要这个也适用于https,请尝试:
$site = preg_replace('/<a href="https?:\/\/(.*?)">/','<a href="mypage.php?url=$1">', $site);
?
之后的s
将允许其存在与否。当然,这会将链接https://google.com
重写为mypage.php?url=google.com
,这可能不是您想要的(您不再知道它是http还是https)
对于www。部分:
$site = preg_replace('/<a href="https?:\/\/(www\.|)(.*?)">/','<a href="mypage.php?url=$2">', $site);