HTMLPurifier 4.4.0
|
00001 <?php 00002 00010 class HTMLPurifier_AttrDef_Integer extends HTMLPurifier_AttrDef 00011 { 00012 00016 protected $negative = true; 00017 00021 protected $zero = true; 00022 00026 protected $positive = true; 00027 00033 public function __construct( 00034 $negative = true, $zero = true, $positive = true 00035 ) { 00036 $this->negative = $negative; 00037 $this->zero = $zero; 00038 $this->positive = $positive; 00039 } 00040 00041 public function validate($integer, $config, $context) { 00042 00043 $integer = $this->parseCDATA($integer); 00044 if ($integer === '') return false; 00045 00046 // we could possibly simply typecast it to integer, but there are 00047 // certain fringe cases that must not return an integer. 00048 00049 // clip leading sign 00050 if ( $this->negative && $integer[0] === '-' ) { 00051 $digits = substr($integer, 1); 00052 if ($digits === '0') $integer = '0'; // rm minus sign for zero 00053 } elseif( $this->positive && $integer[0] === '+' ) { 00054 $digits = $integer = substr($integer, 1); // rm unnecessary plus 00055 } else { 00056 $digits = $integer; 00057 } 00058 00059 // test if it's numeric 00060 if (!ctype_digit($digits)) return false; 00061 00062 // perform scope tests 00063 if (!$this->zero && $integer == 0) return false; 00064 if (!$this->positive && $integer > 0) return false; 00065 if (!$this->negative && $integer < 0) return false; 00066 00067 return $integer; 00068 00069 } 00070 00071 } 00072 00073 // vim: et sw=4 sts=4