Я хочу переписать / замаскировать весь внешний url в своей статье, а также добавить nofollow
и target="_blank"
. Чтобы исходная ссылка на внешний сайт была зашифрована / замаскирована / переписана.
Например:
original link: www.google.com rewrite it to: www.mydomain.com?goto=google.com
Существует плагин для joomla, который переписывает внешнюю ссылку: переписать плагин .
Но я не использую 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 }
Вы можете использовать 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 для вас, вместо того чтобы полагаться на часто хрупкое регулярное выражение.
что-то вроде:
<?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;