You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.6 KiB
56 lines
1.6 KiB
<?php |
|
|
|
/** |
|
* Performs miscellaneous cross attribute validation and filtering for |
|
* input elements. This is meant to be a post-transform. |
|
*/ |
|
class HTMLPurifier_AttrTransform_Input extends HTMLPurifier_AttrTransform |
|
{ |
|
/** |
|
* @type HTMLPurifier_AttrDef_HTML_Pixels |
|
*/ |
|
protected $pixels; |
|
|
|
public function __construct() |
|
{ |
|
$this->pixels = new HTMLPurifier_AttrDef_HTML_Pixels(); |
|
} |
|
|
|
/** |
|
* @param array $attr |
|
* @param HTMLPurifier_Config $config |
|
* @param HTMLPurifier_Context $context |
|
* @return array |
|
*/ |
|
public function transform($attr, $config, $context) |
|
{ |
|
if (!isset($attr['type'])) { |
|
$t = 'text'; |
|
} else { |
|
$t = strtolower($attr['type']); |
|
} |
|
if (isset($attr['checked']) && $t !== 'radio' && $t !== 'checkbox') { |
|
unset($attr['checked']); |
|
} |
|
if (isset($attr['maxlength']) && $t !== 'text' && $t !== 'password') { |
|
unset($attr['maxlength']); |
|
} |
|
if (isset($attr['size']) && $t !== 'text' && $t !== 'password') { |
|
$result = $this->pixels->validate($attr['size'], $config, $context); |
|
if ($result === false) { |
|
unset($attr['size']); |
|
} else { |
|
$attr['size'] = $result; |
|
} |
|
} |
|
if (isset($attr['src']) && $t !== 'image') { |
|
unset($attr['src']); |
|
} |
|
if (!isset($attr['value']) && ($t === 'radio' || $t === 'checkbox')) { |
|
$attr['value'] = ''; |
|
} |
|
return $attr; |
|
} |
|
} |
|
|
|
// vim: et sw=4 sts=4
|
|
|