对于一个项目,我需要获取一个网站的内容和改变HTML代码。那个网站上的每个链接都必须被我自己的链接所取代。我使用str_replace
,直到我意识到链接有时有类分配给它们。
我已经尝试了preg_replace
功能在<a>
和</a>
标签之间的每个href链接之前添加我自己的网站。在$content
中获取的网站是否包含href=""
或href=''
并不重要。
$content = preg_replace('~(<a'b[^>]*'shref=")([^"]*)(")~igs', ''1http://website.com/fetch.php?url='2'3', $content);
这不起作用,我找不到错误。它的行为应该如下:
<a class="link" href="http://google.com">Google</a>
应该变成
<a class="link" href="http://website.com/fetch.php?url=http://google.com">Google</a>
有人能帮我找出错误吗?
不要使用会错过大量大小写的正则表达式。只需将每个文档读入DOM树(给这个html5 DOM解析器一个go),并使用XPath获取具有href
属性的所有链接,并更新它们,然后保存结果。
只使用simplexml
和preg_replace
<?php
$string= '<a class="link" href="http://google.com">Google</a>';
$a = new SimpleXMLElement('<a class="link" href="http://google.com">Google</a>');
$newurl="http://website.com/fetch.php?url=".urlencode($a['href']);
$pattern = "/(?<=href=('"|'))[^'"']+(?=('"|'))/";
$body = preg_replace($pattern,$newurl,$string);
echo $body;
?>
输出:<a class="link" href="http://website.com/fetch.php?url=http%3A%2F%2Fgoogle.com">Google</a>