2009-08-07 6 views
0

Ich habe eine französische Seite, die ich analysieren möchte, aber in Probleme beim Konvertieren der (UFT-8) html nach Latin-1.PHP: Konvertieren von UTF-8 HTML

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 vervollständigt fein:

Das Problem wird in dem folgenden phpunit Testfall gezeigt. test1 scheint fehl zu schlagen, da der Speicherplatz nicht korrekt ist. Wenn er in ascii konvertiert wird, endet er als unbekanntes Zeichen ().

Wie würde ich sicherstellen, dass beide Tests bestanden werden?

+0

Warum gibt es ein Leerzeichen zwischen dem '&' und 'nbsp;' Versuchen Sie das zu beheben? – Nate

+0

Weil ich es nicht ohne das Leerzeichen schreiben kann, wie SO es in ein Leerzeichen umwandelt, wenn ich nicht – Yacoby

+0

schreibe es als "& nbsp;". – Bombe

Antwort

2

test1 scheitert nicht, seine Antwort ist korrekt. Die Zeichenfolgen, die Sie vergleichen, sind nicht identisch. "& nbsp;" ist nicht in ein Leerzeichen dekodiert (0x20). Es ist ein nicht-brechendes Leerzeichen und wird daher zu 0xa0 decodiert. Wenn Sie strTo ändern, um das Zeichen vor dem Doppelpunkt zu enthalten, gibt assertEquals true zurück. Natürlich müssen Sie sicherstellen, dass Ihre Datei mit der UTF-8-Kodierung gespeichert wird, genauso wie PERR0_HUNTER mentioned, aber Sie sehen, dass Sie das "'" - Zeichen verwenden, das Sie wahrscheinlich schon tun. :)

2

Nur als kleiner Vorschlag, stellen Sie sicher, dass Ihre .php-Datei Codierung auf utf8 festgelegt ist, wissen Sie nicht, wie viele Menschen das vermissen.