2009-08-07 48 views
0

我有一個法國網站,我想解析,但遇到轉換(uft-8)HTML到拉丁-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 2009-08-07 13:57:59

+0

因爲如果我不把這個空間轉換成一個空格,我不能寫空格 – Yacoby 2009-08-07 14:01:37

+0

把它寫成「& nbsp;」。 – Bombe 2009-08-07 15:02:11

回答

2

test1不會失敗,其答案是正確的。你比較的字符串是不一樣的。 「& nbsp;」是而不是解碼爲空格(0x20)。這是一個不間斷的空格字符,因此被解碼爲0xa0。當您更改strTo以在冒號之前包含該字符時,assertEquals將返回true。當然,你必須確保你的文件是用UTF-8編碼保存的,就像PERR0_HUNTER mentioned一樣,但是看到你使用了「'」字符,你可能已經這麼做了。 :)

2

就像一個小建議,確保你的.php文件編碼設置爲utf8,你不知道有多少人錯過了。