首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >preg_replace在每个超链接前添加自己的网站

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

Stack Overflow用户
提问于 2016-10-30 08:15:55
回答 2查看 68关注 0票数 0

对于一个项目,我需要获取一个网站的内容,并改变HTML代码。该网站上的每个链接都必须替换为我自己的链接。我一直使用str_replace,直到我意识到链接有时会被分配类。

我已经尝试过在<a> </a>标签之间的每个href链接之前添加我自己的网站的preg_replace函数。在$content中获取的网站是否包含href=""或href=''应该无关紧要。

代码语言:javascript
复制
$content = preg_replace('~(<a\b[^>]*\shref=")([^"]*)(")~igs', '\1http://website.com/fetch.php?url=\2\3', $content);

这不起作用,我找不到错误。其行为应如下所示:

代码语言:javascript
复制
<a class="link" href="http://google.com">Google</a>

应该变成

代码语言:javascript
复制
<a class="link" href="http://website.com/fetch.php?url=http://google.com">Google</a>

有人能帮我找出错误吗?提前谢谢你。

EN

回答 2

Stack Overflow用户

发布于 2016-11-03 11:48:30

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

票数 0
EN

Stack Overflow用户

发布于 2016-11-03 12:14:36

只需使用simplexml和preg_replace即可

代码语言:javascript
复制
        <?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;


         ?>

输出:

代码语言:javascript
复制
<a class="link" href="http://website.com/fetch.php?url=http%3A%2F%2Fgoogle.com">Google</a>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40324935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档