переписать / замаскировать внешнюю ссылку внутри статьи

Я хочу переписать / замаскировать весь внешний 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; 

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