2009-10-16 7 views
2

Im travaillant sur un grattoir de données imdb pour un site, et moi, ils semblent encoder tout dans un codage bizarre que je n'ai jamais vu auparavant.Quel codage est-ce ... et comment vous échapper en php?

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

Existe-t-il une fonction PHP qui convertira ces caractères en caractères normaux?

+0

Comment pouvez-vous échapper avec php? –

Répondre

5

Ce n'est pas l'encodage, il est des entités html codes hexadécimaux.

essayer

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

D'une certaine manière c'est * un * encodage. – Joey

+0

C'est un encodage * Jim, mais pas tel que nous le connaissons. – pavium

+0

Cela fonctionne pour l'espace, mais pas l'apostrophe (ni l'esperluette). –

1

Ce sont des échappements de caractères SGML. Ils peuvent être décimaux (&#39;) ou hexadécimaux (&#xA0) et se référer directement à un point de code Unicode.

html_entity_decode() devrait fonctionner en PHP 5. Bien que je ne peux pas tester pour le moment.

Dans le premier commentaire sur cette page de référence, le code suivant est donné pour les versions PHP âgées:

// 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); 
} 
Questions connexes