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

时间:2016-10-30 00:15:55

标签: php html regex pcre

对于项目,我需要获取网站内容并更改HTML代码。该网站上的每个链接都必须替换为我自己的链接。我使用MyModel::withCount('enabledUsers', 'phoneUsers')->get(); 直到我意识到链接有时会分配给它们。

我已尝试str_replace功能在每个href链接之前添加我自己的网站,该链接也位于preg_replace <a>个标记之间。 </a>中获取的网站是否包含$contenthref=""无关紧要。

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>

有人可以帮我找到错误吗?提前谢谢。

2 个答案:

答案 0 :(得分:0)

不要错过一个会错过很多案例的正则表达式。只需将每个文档读入DOM树(将此html5 DOM parser一行),然后使用XPath获取具有href属性的所有链接,并更新它们,然后保存结果。

答案 1 :(得分:0)

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