2009-08-07 7 views
0

J'ai un site en français que je veux analyser, mais je rencontre des problèmes pour convertir le html (uft-8) en latin-1.PHP: Conversion de UTF-8 HTML

Le problème est illustré dans le cas de test PhpUnit:

class Test extends PHPUnit_Framework_TestCase { 

    private static function fromHTML($str){ 
     return html_entity_decode($str, ENT_QUOTES, 'UTF-8'); 
    } 

    public function test1(){ 

     //REMOVE THE SPACE between the '&' and 'nbsp'. SO won't 
     //let me write it without the space 
     $strFrom = 'Wanted& nbsp;: les Chasseurs de Tamriel'; 
     $strTo = 'Wanted : les Chasseurs de Tamriel'; 
     $strFrom = self::fromHTML($strFrom); 
     $this->assertEquals($strTo, $strFrom); 
    } 

    public function test2(){ 
     $strFrom = 'Remplacement d’Almalexia'; 
     $strTo  = 'Remplacement d’Almalexia'; 
     $strFrom = self::fromHTML($strFrom); 
     $this->assertEquals($strTo, $strFrom); 
    } 

    } 

test2 complète bien. test1 semble échouer car l'espace n'est pas correct, donc lorsqu'il est converti en ascii, il finit comme un caractère inconnu ().

Comment puis-je m'assurer que les deux tests réussissent?

+0

Pourquoi y a-t-il un espace entre '&' et 'nbsp;'? Est-ce ce que vous essayez de réparer? – Nate

+0

Parce que je ne peux pas l'écrire sans l'espace que SO le convertit en un espace si je ne le sais pas – Yacoby

+0

Ecrivez-le comme "& nbsp;". – Bombe

Répondre

2

test1 n'échoue pas, sa réponse est correcte. Les chaînes que vous comparez ne sont pas les mêmes. "& nbsp;" est et non décodé en un espace (0x20). C'est un caractère d'espace insécable et en tant que tel est décodé à 0xa0. Lorsque vous modifiez strTo pour contenir ce caractère avant le deux-points, le assertEquals renvoie true. Bien sûr, vous devez vous assurer que votre fichier est enregistré avec l'encodage UTF-8, tout comme PERR0_HUNTER mentioned mais vu que vous utilisez le caractère "'" vous le faites probablement déjà. :)

2

Juste comme une petite suggestion, assurez-vous que votre encodage de fichier .php est défini sur utf8, vous ne savez pas combien de personnes manquent cela.