2009-08-07 4 views
0

私は解析したいフランス語のサイトを持っていますが、(uft-8)htmlからlatin-1に変換する際に問題が発生しています。PHP:UTF-8 HTMLからの変換

問題は、次の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は罰金完了します。 test1はスペースが正しくないので失敗するように見えるので、asciiに変換すると、未知の文字( )として終わります。

両方のテストに合格するにはどうすればよいですか?

+0

なぜ '&'と 'nbsp;'の間にスペースがありますか?それはあなたが修正しようとしていることですか? – Nate

+0

私はスペースなしで書くことができないので、私がそうでなければスペースに変換します。 – Yacoby

+0

"& nbsp;"と書いてください。 – Bombe

答えて

2

test1は失敗しません。その答えは正しいです。あなたが比較する文字列は同じではありません。 "& nbsp;"は、ではなく、がスペース(0x20)にデコードされています。これは改行されない空白文字なので、0xa0にデコードされます。コロンの前にその文字を含むようにstrToを変更すると、assertEqualsがtrueを返します。もちろん、ファイルがUTF-8エンコーディングで保存されていることを確認する必要があります。ちょうどPERR0_HUNTER mentionedと同じですが、おそらく既に '' '文字を使用していることがわかります。 :)

2

小さな提案として、.phpファイルのエンコードがutf8に設定されていることを確認してください。