1

nofollow記事内のすべての外部 URL を書き換え/マスクし、さらに と を追加したいと考えていtarget="_blank"ます。そのため、外部サイトへの元のリンクは暗号化/マスク/書き換えられます。

例えば:

original link: www.google.com
rewrite it to: www.mydomain.com?goto=google.com

外部リンクを書き換える joomla のプラグインrewrite pluginがあります。

しかし、私はjoomlaを使用していません。上記のプラグインをご覧ください。私が探しているものを正確に実行します。

私は何をしたいですか?

$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

}
4

2 に答える 2

0

何かのようなもの:

<?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

-- 私の最後の更新

<?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

于 2013-02-20T01:53:27.960 に答える
0

DOMDocumentを使用して、ドキュメントを解析およびトラバースできます。

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 を解析するため、正規表現ベースのソリューションを使用するよりもはるかに信頼性が高くなります。

于 2013-02-20T05:16:46.647 に答える