首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文章中的重写/屏蔽外部链接

问文章中的重写/屏蔽外部链接
EN

Stack Overflow用户
提问于 2013-02-20 01:25:46
回答 2查看 899关注 0票数 1

我想重写/屏蔽我文章中的所有外部url,并添加nofollow和target="_blank"。这样,到外部站点的原始链接就会被加密/屏蔽/重写。

例如,:

代码语言:javascript
复制
original link: www.google.com
rewrite it to: www.mydomain.com?goto=google.com

joomla有一个插件,可以重写外部链接:重写插件。

但我没有利用joomla。请看上面的插件,它做的正是我想要的。

我想要什么?

代码语言:javascript
复制
$article = "hello this is example article I want to replace all external link http://google.com";
$host = substr($_SERVER['HTTP_HOST'], 0, 4) == 'www.' ? substr($_SERVER['HTTP_HOST'], 0) : $_SERVER['HTTP_HOST'];

if (thisIsNotMyWebsite){
    replace external url

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-20 05:16:46

您可以使用DOMDocument解析和遍历文档。

代码语言:javascript
复制
function rewriteExternal($html) {

        // The url for your redirection script
        $prefix = 'http://www.example.com?goto=';

        // a regular expression to determine if
        // this link is within your site, edit for your
        // domain or other needs
        $is_internal = '/(?:^\/|^\.\.\/)|example\.com/';

    $dom = new DOMDocument();

    // Parse the HTML into a DOM
    $dom->loadHTML($html);

    $links = $dom->getElementsByTagName('a');

    foreach ($links as $link) {
            $href = $link->getAttribute('href');
            if (!preg_match($is_internal, $href)) {
                $link->getAttributeNode('href')->value = $prefix . $href;
                $link->setAttributeNode(new DOMAttr('rel', 'nofollow'));
                $link->setAttributeNode(new DOMAttr('target', '_blank'));
            }
    }

    // returns the updated HTML or false if there was an error
    return $dom->saveHTML();
}

这种方法比使用基于正则表达式的解决方案要可靠得多,因为它实际上为您解析DOM,而不是依赖通常脆弱的正则表达式。

票数 0
EN

Stack Overflow用户

发布于 2013-02-20 01:53:27

类似于:

代码语言:javascript
复制
<?php
 $html ='1224 <a href="http://www.google.com">google</a> 567';
$tracking_string = 'http://example.com/track.php?url=';
$html = preg_replace('#(<a[^>]+href=")(http|https)([^>" ]+)("?[^>]*>)#is','\\1'.$tracking_string.'\\2\\3\\4',$html);
echo $html; 

在这里行动:http://codepad.viper-7.com/7BYkoc

--我的最新消息

代码语言:javascript
复制
<?php
$html =' 1224 <a href="http://www.google.com">google</a> 567';

$tracking_string = 'http://example.com/track.php?url=';
$html = preg_replace('#(<a[^>]+)(href=")(http|https)([^>" ]+)("?[^>]*>)#is','\\1 nofollow  target="_blank" \\2'.$tracking_string.'\\3\\4\\5',$html);

echo $html;

http://codepad.viper-7.com/JP8sUk

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14970744

复制
相关文章

相似问题

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