Преобразование utf-8 html entity (#xXXX; и #XXX;)


Встроенная функция html_entity_decode не справляется с строками вида:

  1. Тестовое
  2. описание

Вот уже и наступила весна и солнышка все чаще и чаще заглядывает в окошко. Я конечно ему очень рад, но иногда его слишком много. Вот и подумываю купить жалюзи. Пока еще не определился, но уже прицениваюсь.

Можно использовать функцию:

  1. <?
  2. function html_entity_decode_utf8($string)
  3. {
  4.     static $trans_tbl;
  5.    
  6.     // replace numeric entities
  7.     $string = preg_replace('~&#x([0-9a-f]+);~ei', 'code2utf(hexdec("\\1"))', $string);
  8.     $string = preg_replace('~&#([0-9]+);~e', 'code2utf(\\1)', $string);
  9.  
  10.     // replace literal entities
  11.     if (!isset($trans_tbl))
  12.     {
  13.         $trans_tbl = array();
  14.         foreach (get_html_translation_table(HTML_ENTITIES) as $val=>$key)
  15.             $trans_tbl[$key] = utf8_encode($val);
  16.     }
  17.     return strtr($string, $trans_tbl);
  18. }
  19.  
  20. function code2utf($num)
  21. {
  22.     if ($num < 128) return chr($num);
  23.     if ($num < 2048) return chr(($num >> 6) + 192) . chr(($num & 63) + 128);
  24.     if ($num < 65536) return chr(($num >> 12) + 224) . chr((($num >> 6) & 63) + 128) . chr(($num & 63) + 128);
  25.     if ($num < 2097152) return chr(($num >> 18) + 240) . chr((($num >> 12) & 63) + 128) . chr((($num >> 6) & 63) + 128) . chr(($num & 63) + 128);
  26.     return '';
  27. }
  28. ?>

Пример использования:

  1. <?
  2.     $string='Тестовое описание';
  3.     echo html_entity_decode_utf8($string);
  4. ?>

Функция возвращает строку в UTF-8.

One Response to “Преобразование utf-8 html entity (#xXXX; и #XXX;)”

  1. reader:

    html_entity_decode($a, ENT_QUOTES, ‘UTF-8’);

Leave a Reply