53 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			53 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|   | <?php | ||
|  | 
 | ||
|  | // must be called POST validation
 | ||
|  | 
 | ||
|  | /** | ||
|  |  * Adds rel="nofollow" to all outbound links.  This transform is | ||
|  |  * only attached if Attr.Nofollow is TRUE. | ||
|  |  */ | ||
|  | class HTMLPurifier_AttrTransform_Nofollow extends HTMLPurifier_AttrTransform | ||
|  | { | ||
|  |     /** | ||
|  |      * @type HTMLPurifier_URIParser | ||
|  |      */ | ||
|  |     private $parser; | ||
|  | 
 | ||
|  |     public function __construct() | ||
|  |     { | ||
|  |         $this->parser = new HTMLPurifier_URIParser(); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * @param array $attr | ||
|  |      * @param HTMLPurifier_Config $config | ||
|  |      * @param HTMLPurifier_Context $context | ||
|  |      * @return array | ||
|  |      */ | ||
|  |     public function transform($attr, $config, $context) | ||
|  |     { | ||
|  |         if (!isset($attr['href'])) { | ||
|  |             return $attr; | ||
|  |         } | ||
|  | 
 | ||
|  |         // XXX Kind of inefficient
 | ||
|  |         $url = $this->parser->parse($attr['href']); | ||
|  |         $scheme = $url->getSchemeObj($config, $context); | ||
|  | 
 | ||
|  |         if ($scheme->browsable && !$url->isLocal($config, $context)) { | ||
|  |             if (isset($attr['rel'])) { | ||
|  |                 $rels = explode(' ', $attr['rel']); | ||
|  |                 if (!in_array('nofollow', $rels)) { | ||
|  |                     $rels[] = 'nofollow'; | ||
|  |                 } | ||
|  |                 $attr['rel'] = implode(' ', $rels); | ||
|  |             } else { | ||
|  |                 $attr['rel'] = 'nofollow'; | ||
|  |             } | ||
|  |         } | ||
|  |         return $attr; | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | // vim: et sw=4 sts=4
 |