public $always_make_tags = 0;␊ |
␊ |
/**␊ |
* entity control options␊ |
* Allows decimal entities.␊ |
*␊ |
* An entity has to decimal format <code> </code>.␊ |
* For example, the entity <code>@</code> is the <code>@</code> character.␊ |
*␊ |
* @var int␊ |
*/␊ |
public $allow_numbered_entities = 1;␊ |
␊ |
/**␊ |
* Allows hexadecimal entities.␊ |
*␊ |
* An entity has to decimal format <code> </code>.␊ |
* For example, the entity <code>@</code> is the <code>@</code> character.␊ |
*␊ |
* @var int␊ |
*/␊ |
public $allow_hexadecimal_entities = 1;␊ |
␊ |
public $allowed_entities = array(␊ |
'amp',␊ |
'gt',␊ |
|
'quot',␊ |
);␊ |
␊ |
␊ |
function go($data)␊ |
{␊ |
$this->tag_counts = array();␊ |
|
␊ |
function check_entity($preamble, $term)␊ |
{␊ |
if ($term != ';') {␊ |
return '&'.$preamble;␊ |
}␊ |
if ($this->is_valid_entity($preamble)) {␊ |
return '&'.$preamble;␊ |
if (';' === $term) {␊ |
if ($this->is_valid_entity($preamble)) {␊ |
return '&'.$preamble;␊ |
}␊ |
}␊ |
return '&'.$preamble;␊ |
}␊ |
␊ |
/**␊ |
* Determines if the string provided is a valid entity.␊ |
*␊ |
* @param string $entity String to test against.␊ |
* @return boolean␊ |
*/␊ |
function is_valid_entity($entity)␊ |
{␊ |
if (preg_match('!^#([0-9]+)$!i', $entity, $m)) {␊ |
if ($m[1] > 127) {␊ |
return 1;␊ |
if (preg_match('#^\#([0-9]{2,}|x[0-9a-f]{2,})$#i', $entity, $m)) {␊ |
if (0 === strpos($m[1], 'x')) {␊ |
// hexadecimal entity␊ |
if ($this->allow_hexadecimal_entities && $this->not_control_caracter($m[1])) {␊ |
return true;␊ |
}␊ |
return false;␊ |
} else {␊ |
// decimal entity␊ |
if ($this->allow_numbered_entities && $this->not_control_caracter($m[1])) {␊ |
return true;␊ |
}␊ |
return false;␊ |
}␊ |
return $this->allow_numbered_entities;␊ |
}␊ |
if (in_array($entity, $this->allowed_entities)){␊ |
return 1;␊ |
// HTML 4.0 character entity␊ |
return in_array($entity, $this->allowed_entities);␊ |
}␊ |
␊ |
/**␊ |
* Determines if the data provided is not a control character.␊ |
*␊ |
* @param string|int $data Data to test against like "64" or "x40".␊ |
* @return boolean␊ |
*/␊ |
function not_control_caracter($data)␊ |
{␊ |
if (0 === strpos($data, 'x')) {␊ |
$data = substr($data, 1);␊ |
$data = hexdec($data);␊ |
} else {␊ |
$data = intval($data);␊ |
}␊ |
return 0;␊ |
return (31 < $data && (127 > $data || 159 < $data));␊ |
}␊ |
␊ |
// within attributes, we want to convert all hex/dec/url escape␊ |
|
{␊ |
if ($d < 0) { $d = 32; } // space␊ |
// don't mess with huigh chars␊ |
if ($d > 127) {␊ |
if ($this->not_control_caracter($d)) {␊ |
if ($orig_type == '%') { return '%'.dechex($d); }␊ |
if ($orig_type == '&') { return "&#$d;"; }␊ |
}␊ |