У меня есть этот код для декодирования числовых объектов html эквивалентному символу UTF8.Декодирование числовых html-объектов через PHP
Я пытаюсь преобразовать этот символ:
& # 146;
, который должен вывести:
Тем не менее, просто исчезает (не выход). (я проверил исходный код страницы, страница имеет правильные заголовки/мета-теги символов utf8).
Кто-нибудь знает, что не так с кодом?
function entity_decode($string, $quote_style = ENT_COMPAT, $charset = "UTF-8") {
$string = html_entity_decode($string, $quote_style, $charset);
$string = preg_replace_callback('~&#x([0-9a-fA-F]+);~i', "chr_utf8_callback", $string);
$string = preg_replace('~&#([0-9]+);~e', 'chr_utf8("\\1")', $string);
//this is another method, which also doesn't work..
//$string = preg_replace_callback("/(\&#[0-9]+;)/", "entity_decode_callback", $string);
return $string;
}
function chr_utf8_callback($matches) {
return chr_utf8(hexdec($matches[1]));
}
function chr_utf8($num) {
if ($num < 128) return chr($num);
if ($num < 2048) return chr(($num >> 6) + 192) . chr(($num & 63) + 128);
if ($num < 65536) return chr(($num >> 12) + 224) . chr((($num >> 6) & 63) + 128) . chr(($num & 63) + 128);
if ($num < 2097152) return chr(($num >> 18) + 240) . chr((($num >> 12) & 63) + 128) . chr((($num >> 6) & 63) + 128) . chr(($num & 63) + 128);
return '';
}
function entity_decode_callback($m) {
return mb_convert_encoding($m[1], "UTF-8", "HTML-ENTITIES");
}
echo '=' . entity_decode('’');
Пробовал только с html_entity_decode, но это не работает, он возвращает пустой, как хорошо. Не уверен, что вы говорите о пространстве, в моем коде нет места? Я также попытался удалить html_entity_decode или поместив его в качестве последнего для выполнения, но без помощи. Спасибо. – Wesley
@Wesley: В зависимости от вашей версии PHP 'html_entity_decode' возвращает что-то. Однако я продлил ответ, который может пролить немного света. – hakre
Также этот [ответ на «Преобразовать (doublebyte) строку в Hex»] (http://stackoverflow.com/a/7015137/367456) может оказаться полезным. – hakre