Файл: sys/inc/utf8_html_entity_decode.php
Строк: 57
<?php
function utf8_html_entity_decode($s, $is_htmlspecialchars = false) {
if (strlen($s) < 4 || ($pos = strpos($s, '&') === false) || strpos($s, ';', $pos) === false)
return $s;
$table = array(
' ' => "xc2xa0",
'¡' => "xc2xa1",
'¢' => "xc2xa2",
'£' => "xc2xa3",
'¤' => "xc2xa4",
'¥' => "xc2xa5",
'¦' => "xc2xa6",
'§' => "xc2xa7",
'¨' => "xc2xa8",
'©' => "xc2xa9",
'ª' => "xc2xaa",
'«' => "xc2xab",
'¬' => "xc2xac",
'­' => "xc2xad",
'®' => "xc2xae",
'¯' => "xc2xaf",
'°' => "xc2xb0",
'±' => "xc2xb1",
'²' => "xc2xb2",
'³' => "xc2xb3",
'´' => "xc2xb4",
'µ' => "xc2xb5",
'¶' => "xc2xb6",
'·' => "xc2xb7",
'¸' => "xc2xb8",
'¹' => "xc2xb9",
'º' => "xc2xba",
'»' => "xc2xbb",
'¼' => "xc2xbc",
'½' => "xc2xbd",
'¾' => "xc2xbe",
'¿' => "xc2xbf",
'À' => "xc3x80",
'Á' => "xc3x81",
'Â' => "xc3x82",
'Ã' => "xc3x83",
'Ä' => "xc3x84",
'Å' => "xc3x85",
'Æ' => "xc3x86",
'Ç' => "xc3x87",
'È' => "xc3x88",
'É' => "xc3x89",
'Ê' => "xc3x8a",
'Ë' => "xc3x8b",
'Ì' => "xc3x8c",
'Í' => "xc3x8d",
'Î' => "xc3x8e",
'Ï' => "xc3x8f",
'Ð' => "xc3x90",
'Ñ' => "xc3x91",
'Ò' => "xc3x92",
'Ó' => "xc3x93",
'Ô' => "xc3x94",
'Õ' => "xc3x95",
'Ö' => "xc3x96",
'×' => "xc3x97",
'Ø' => "xc3x98",
'Ù' => "xc3x99",
'Ú' => "xc3x9a",
'Û' => "xc3x9b",
'Ü' => "xc3x9c",
'Ý' => "xc3x9d",
'Þ' => "xc3x9e",
'ß' => "xc3x9f",
'à' => "xc3xa0",
'á' => "xc3xa1",
'â' => "xc3xa2",
'ã' => "xc3xa3",
'ä' => "xc3xa4",
'å' => "xc3xa5",
'æ' => "xc3xa6",
'ç' => "xc3xa7",
'è' => "xc3xa8",
'é' => "xc3xa9",
'ê' => "xc3xaa",
'ë' => "xc3xab",
'ì' => "xc3xac",
'í' => "xc3xad",
'î' => "xc3xae",
'ï' => "xc3xaf",
'ð' => "xc3xb0",
'ñ' => "xc3xb1",
'ò' => "xc3xb2",
'ó' => "xc3xb3",
'ô' => "xc3xb4",
'õ' => "xc3xb5",
'ö' => "xc3xb6",
'÷' => "xc3xb7",
'ø' => "xc3xb8",
'ù' => "xc3xb9",
'ú' => "xc3xba",
'û' => "xc3xbb",
'ü' => "xc3xbc",
'ý' => "xc3xbd",
'þ' => "xc3xbe",
'ÿ' => "xc3xbf",
'ƒ' => "xc6x92",
'Α' => "xcex91",
'Β' => "xcex92",
'Γ' => "xcex93",
'Δ' => "xcex94",
'Ε' => "xcex95",
'Ζ' => "xcex96",
'Η' => "xcex97",
'Θ' => "xcex98",
'Ι' => "xcex99",
'Κ' => "xcex9a",
'Λ' => "xcex9b",
'Μ' => "xcex9c",
'Ν' => "xcex9d",
'Ξ' => "xcex9e",
'Ο' => "xcex9f",
'Π' => "xcexa0",
'Ρ' => "xcexa1",
'Σ' => "xcexa3",
'Τ' => "xcexa4",
'Υ' => "xcexa5",
'Φ' => "xcexa6",
'Χ' => "xcexa7",
'Ψ' => "xcexa8",
'Ω' => "xcexa9",
'α' => "xcexb1",
'β' => "xcexb2",
'γ' => "xcexb3",
'δ' => "xcexb4",
'ε' => "xcexb5",
'ζ' => "xcexb6",
'η' => "xcexb7",
'θ' => "xcexb8",
'ι' => "xcexb9",
'κ' => "xcexba",
'λ' => "xcexbb",
'μ' => "xcexbc",
'ν' => "xcexbd",
'ξ' => "xcexbe",
'ο' => "xcexbf",
'π' => "xcfx80",
'ρ' => "xcfx81",
'ς' => "xcfx82",
'σ' => "xcfx83",
'τ' => "xcfx84",
'υ' => "xcfx85",
'φ' => "xcfx86",
'χ' => "xcfx87",
'ψ' => "xcfx88",
'ω' => "xcfx89",
'ϑ' => "xcfx91",
'ϒ' => "xcfx92",
'ϖ' => "xcfx96",
'•' => "xe2x80xa2",
'…' => "xe2x80xa6",
'′' => "xe2x80xb2",
'″' => "xe2x80xb3",
'‾' => "xe2x80xbe",
'⁄' => "xe2x81x84",
'℘' => "xe2x84x98",
'ℑ' => "xe2x84x91",
'ℜ' => "xe2x84x9c",
'™' => "xe2x84xa2",
'ℵ' => "xe2x84xb5",
'←' => "xe2x86x90",
'↑' => "xe2x86x91",
'→' => "xe2x86x92",
'↓' => "xe2x86x93",
'↔' => "xe2x86x94",
'↵' => "xe2x86xb5",
'⇐' => "xe2x87x90",
'⇑' => "xe2x87x91",
'⇒' => "xe2x87x92",
'⇓' => "xe2x87x93",
'⇔' => "xe2x87x94",
'∀' => "xe2x88x80",
'∂' => "xe2x88x82",
'∃' => "xe2x88x83",
'∅' => "xe2x88x85",
'∇' => "xe2x88x87",
'∈' => "xe2x88x88",
'∉' => "xe2x88x89",
'∋' => "xe2x88x8b",
'∏' => "xe2x88x8f",
'∑' => "xe2x88x91",
'−' => "xe2x88x92",
'∗' => "xe2x88x97",
'√' => "xe2x88x9a",
'∝' => "xe2x88x9d",
'∞' => "xe2x88x9e",
'∠' => "xe2x88xa0",
'∧' => "xe2x88xa7",
'∨' => "xe2x88xa8",
'∩' => "xe2x88xa9",
'∪' => "xe2x88xaa",
'∫' => "xe2x88xab",
'∴' => "xe2x88xb4",
'∼' => "xe2x88xbc",
'≅' => "xe2x89x85",
'≈' => "xe2x89x88",
'≠' => "xe2x89xa0",
'≡' => "xe2x89xa1",
'≤' => "xe2x89xa4",
'≥' => "xe2x89xa5",
'⊂' => "xe2x8ax82",
'⊃' => "xe2x8ax83",
'⊄' => "xe2x8ax84",
'⊆' => "xe2x8ax86",
'⊇' => "xe2x8ax87",
'⊕' => "xe2x8ax95",
'⊗' => "xe2x8ax97",
'⊥' => "xe2x8axa5",
'⋅' => "xe2x8bx85",
'⌈' => "xe2x8cx88",
'⌉' => "xe2x8cx89",
'⌊' => "xe2x8cx8a",
'⌋' => "xe2x8cx8b",
'⟨' => "xe2x8cxa9",
'⟩' => "xe2x8cxaa",
'◊' => "xe2x97x8a",
'♠' => "xe2x99xa0",
'♣' => "xe2x99xa3",
'♥' => "xe2x99xa5",
'♦' => "xe2x99xa6",
'Œ' => "xc5x92",
'œ' => "xc5x93",
'Š' => "xc5xa0",
'š' => "xc5xa1",
'Ÿ' => "xc5xb8",
'ˆ' => "xcbx86",
'˜' => "xcbx9c",
' ' => "xe2x80x82",
' ' => "xe2x80x83",
' ' => "xe2x80x89",
'‌' => "xe2x80x8c",
'‍' => "xe2x80x8d",
'‎' => "xe2x80x8e",
'‏' => "xe2x80x8f",
'–' => "xe2x80x93",
'—' => "xe2x80x94",
'‘' => "xe2x80x98",
'’' => "xe2x80x99",
'‚' => "xe2x80x9a",
'“' => "xe2x80x9c",
'”' => "xe2x80x9d",
'„' => "xe2x80x9e",
'†' => "xe2x80xa0",
'‡' => "xe2x80xa1",
'‰' => "xe2x80xb0",
'‹' => "xe2x80xb9",
'›' => "xe2x80xba",
'€' => "xe2x82xac",
);
$htmlspecialchars = array(
'"' => "x22",
'&' => "x26",
'<' => "x3c",
'>' => "x3e",
);
if ($is_htmlspecialchars)
$table += $htmlspecialchars;
preg_match_all('/&[a-zA-Z]+d*;/s', $s, $m, null, $pos);
foreach (array_unique($m[0]) as $entity) {
if (array_key_exists($entity, $table))
$s = str_replace($entity, $table[$entity], $s);
}
if (($pos = strpos($s, '&#')) !== false) {
$htmlspecialchars_flip = array_flip($htmlspecialchars);
$s = preg_replace(
'/&#((x)[da-fA-F]{2,4}|d{1,4});/se', '(array_key_exists($a = pack("C", $d = ("$2") ? hexdec("$1") : "$1"), $htmlspecialchars_flip) && ! $is_htmlspecialchars) ?
$htmlspecialchars_flip[$a] :
iconv("UCS-2BE", "UTF-8", pack("n", $d))', $s, -1, $pos);
}
return $s;
}
?>