PHP:从UTF-8 HTML转换

时间:2009-08-07 13:37:31

标签: php html parsing utf-8

我有一个我要解析的法语网站,但是遇到了将(uft-8)html转换为latin-1的问题。

问题显示在以下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时,它最终会变成一个未知字符( )。

我如何确保两项测试都通过?

2 个答案:

答案 0 :(得分:2)

作为一个小建议,请确保您的.php文件编码设置为utf8,您不知道有多少人错过了。

答案 1 :(得分:2)

test1没有失败,答案是正确的。你比较的字符串不一样。 “& nbsp;”解码为空格(0x20)。它是一个不间断的空格字符,因此被解码为0xa0。当您在冒号前更改strTo以包含该字符时,assertEquals将返回true。当然,您必须确保使用UTF-8编码保存文件,就像PERR0_HUNTER mentioned一样,但是您可能已经在使用“'”字符。 :)