Preg_replace在每个超链接之前添加自己的网站


preg_replace to add own website before every hyperlink

对于一个项目,我需要获取一个网站的内容和改变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属性的所有链接,并更新它们,然后保存结果。

只使用simplexmlpreg_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>