我有一个我要解析的法语网站,但是遇到了将(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时,它最终会变成一个未知字符( )。
我如何确保两项测试都通过?
答案 0 :(得分:2)
作为一个小建议,请确保您的.php文件编码设置为utf8,您不知道有多少人错过了。
答案 1 :(得分:2)
test1
没有失败,答案是正确的。你比较的字符串不一样。 “& nbsp;”未解码为空格(0x20
)。它是一个不间断的空格字符,因此被解码为0xa0
。当您在冒号前更改strTo
以包含该字符时,assertEquals
将返回true。当然,您必须确保使用UTF-8编码保存文件,就像PERR0_HUNTER mentioned一样,但是您可能已经在使用“'”字符。 :)