Differences Between: [Versions 310 and 401] [Versions 310 and 402] [Versions 310 and 403]
1 <?php 2 3 /** 4 * Injector that removes spans with no attributes 5 */ 6 class HTMLPurifier_Injector_RemoveSpansWithoutAttributes extends HTMLPurifier_Injector 7 { 8 /** 9 * @type string 10 */ 11 public $name = 'RemoveSpansWithoutAttributes'; 12 13 /** 14 * @type array 15 */ 16 public $needed = array('span'); 17 18 /** 19 * @type HTMLPurifier_AttrValidator 20 */ 21 private $attrValidator; 22 23 /** 24 * Used by AttrValidator. 25 * @type HTMLPurifier_Config 26 */ 27 private $config; 28 29 /** 30 * @type HTMLPurifier_Context 31 */ 32 private $context; 33 34 public function prepare($config, $context) 35 { 36 $this->attrValidator = new HTMLPurifier_AttrValidator(); 37 $this->config = $config; 38 $this->context = $context; 39 return parent::prepare($config, $context); 40 } 41 42 /** 43 * @param HTMLPurifier_Token $token 44 */ 45 public function handleElement(&$token) 46 { 47 if ($token->name !== 'span' || !$token instanceof HTMLPurifier_Token_Start) { 48 return; 49 } 50 51 // We need to validate the attributes now since this doesn't normally 52 // happen until after MakeWellFormed. If all the attributes are removed 53 // the span needs to be removed too. 54 $this->attrValidator->validateToken($token, $this->config, $this->context); 55 $token->armor['ValidateAttributes'] = true; 56 57 if (!empty($token->attr)) { 58 return; 59 } 60 61 $nesting = 0; 62 while ($this->forwardUntilEndToken($i, $current, $nesting)) { 63 } 64 65 if ($current instanceof HTMLPurifier_Token_End && $current->name === 'span') { 66 // Mark closing span tag for deletion 67 $current->markForDeletion = true; 68 // Delete open span tag 69 $token = false; 70 } 71 } 72 73 /** 74 * @param HTMLPurifier_Token $token 75 */ 76 public function handleEnd(&$token) 77 { 78 if ($token->markForDeletion) { 79 $token = false; 80 } 81 } 82 } 83 84 // vim: et sw=4 sts=4
title
Description
Body
title
Description
Body
title
Description
Body
title
Body