2009-10-16 4 views
2

Im работает над скребком данных imdb для сайта, и я, кажется, кодирую все в странной кодировке, которую я никогда раньше не видел.Какая кодировка это ... и как вам избежать ее в php?

<a href="/keyword/exploding-ship/">Exploding&#xA0;Ship</a> 
A Bug&#x27;s Life 

Есть ли функция php, которая преобразует их в обычные символы?

+0

Как вы можете избежать его с PHP? – 2009-10-16 08:00:26

ответ

5

Это не кодировка HTML-сущностей шестнадцатеричных код.

попробовать

$converted = html_entity_decode($string, ENT_QUOTES, 'UTF-8'); 
+0

В некотором смысле это * * кодировка. – Joey

+0

Это * кодировка * Джим, но не так, как мы это знаем. – pavium

+0

Это работает для пространства, но не апострофа (или амперсанда). – 2009-10-16 08:28:36

1

Это SGML символьные escape-последовательности. Они могут быть десятичными (&#39;) или шестнадцатеричными (&#xA0) и обращаться непосредственно к кодовой точке Юникода.

html_entity_decode() должен работать на PHP 5. Хотя я не могу проверить на данный момент.

В первом комментарии на этой странице ссылок, следующий код даются для более старых версий PHP:

// For users prior to PHP 4.3.0 you may do this: 
function unhtmlentities($string) 
{ 
    // replace numeric entities 
    $string = preg_replace('~&#x([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $string); 
    $string = preg_replace('~&#([0-9]+);~e', 'chr("\\1")', $string); 
    // replace literal entities 
    $trans_tbl = get_html_translation_table(HTML_ENTITIES); 
    $trans_tbl = array_flip($trans_tbl); 
    return strtr($string, $trans_tbl); 
} 
Смежные вопросы