public static function token_to_string(array $token, $escape = true)
{
switch ($token['type']) {
case HTMLTokenizer::NODE_TYPE_TEXT:
return $escape ? Utils::htmlspecialchars(html_entity_decode($token['value'], ENT_QUOTES, 'UTF-8')) : $token['value'];
break;
case HTMLTokenizer::NODE_TYPE_ELEMENT_OPEN:
case HTMLTokenizer::NODE_TYPE_ELEMENT_EMPTY:
$out = '<' . $token['name'];
if (isset($token['attrs']) && is_array($token['attrs'])) {
foreach ($token['attrs'] as $attr => $attrval) {
$out .= " {$attr}=\"";
if ($escape) {
$out .= Utils::htmlspecialchars(html_entity_decode($attrval, ENT_QUOTES, 'UTF-8'));
} else {
$out .= html_entity_decode($attrval, ENT_QUOTES, 'UTF-8');
}
$out .= '"';
}
}
$out .= '>';
break;
case HTMLTokenizer::NODE_TYPE_ELEMENT_CLOSE:
$out = "</{$token['name']}>";
break;
case HTMLTokenizer::NODE_TYPE_PI:
$out = "<?{$token['name']}{$token['value']}>";
break;
case HTMLTokenizer::NODE_TYPE_COMMENT:
$out = "<!--{$token['value']}-->";
break;
case HTMLTokenizer::NODE_TYPE_CDATA_SECTION:
$out = "<![CDATA[{$token['value']}]]>";
break;
case HTMLTokenizer::NODE_TYPE_STATEMENT:
$out = "<!{$token['name']}";
if (!empty($token['value'])) {
$out .= " {$token['value']}";
}
$out .= ">";
break;
}
return $out;
}