我想在文章中重写/屏蔽所有外部网址,并添加nofollow
和target="_blank"
。因此,外部站点的原始链接将被加密/屏蔽/重写。
例如:
original link: www.google.com
rewrite it to: www.mydomain.com?goto=google.com
joomla有一个插件可以重写外部链接:rewrite plugin。
但我不是在使用joomla。请看看上面的插件,它正是我正在寻找的。 p>
我想要什么?
$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
}
答案 0 :(得分: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;
答案 1 :(得分: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而不是依赖于经常脆弱的正则表达式。