1 <?php 2 3 /** 4 * Validates a rel/rev link attribute against a directive of allowed values 5 * @note We cannot use Enum because link types allow multiple 6 * values. 7 * @note Assumes link types are ASCII text 8 */ 9 class HTMLPurifier_AttrDef_HTML_LinkTypes extends HTMLPurifier_AttrDef 10 { 11 12 /** 13 * Name config attribute to pull. 14 * @type string 15 */ 16 protected $name; 17 18 /** 19 * @param string $name 20 */ 21 public function __construct($name) 22 { 23 $configLookup = array( 24 'rel' => 'AllowedRel', 25 'rev' => 'AllowedRev' 26 ); 27 if (!isset($configLookup[$name])) { 28 trigger_error( 29 'Unrecognized attribute name for link ' . 30 'relationship.', 31 E_USER_ERROR 32 ); 33 return; 34 } 35 $this->name = $configLookup[$name]; 36 } 37 38 /** 39 * @param string $string 40 * @param HTMLPurifier_Config $config 41 * @param HTMLPurifier_Context $context 42 * @return bool|string 43 */ 44 public function validate($string, $config, $context) 45 { 46 $allowed = $config->get('Attr.' . $this->name); 47 if (empty($allowed)) { 48 return false; 49 } 50 51 $string = $this->parseCDATA($string); 52 $parts = explode(' ', $string); 53 54 // lookup to prevent duplicates 55 $ret_lookup = array(); 56 foreach ($parts as $part) { 57 $part = strtolower(trim($part)); 58 if (!isset($allowed[$part])) { 59 continue; 60 } 61 $ret_lookup[$part] = true; 62 } 63 64 if (empty($ret_lookup)) { 65 return false; 66 } 67 $string = implode(' ', array_keys($ret_lookup)); 68 return $string; 69 } 70 } 71 72 // vim: et sw=4 sts=4
title
Description
Body
title
Description
Body
title
Description
Body
title
Body