我正在尝试转换为unicode并创建一些单元测试以确保unicode正常工作。
这是我当前的代码,它在mb_detect_encoding()行上失败,而且我也不确定它是否是对unicode支持的有效测试:
function testMultiLingualEncodings(){
// Create this string via a heredoc.
$original = '
A good day, World!
Schönen Tag, Welt!
Une bonne journée, tout le monde!
يوم جيد، العالم
좋은 일, 세계!
Một ngày tốt lành, thế giới!
こんにちは、世界!
'; // Contains international characters from utf-8
$this->assertTrue(mb_detect_encoding($original, 'UTF-8', true) === true); // Fails regardless of whether strict is true or not.
$returned = query_item("select :multi limit 10", array(':multi'=>$original)); // Select this exact string, parameterized, from the database
//debug($returned, string_diff($returned, $original));
$this->assertTrue((bool)$original); // test original isn't null.
$this->assertTrue((bool)$returned); // Test returned string isn't null.
$this->assertTrue($original === $returned); // Test original exactly matches returned string
}
所以mb_detect_encoding()表示上面的初始字符串不是UTF-8。我也试图将该字符串传递到数据库并将其取出,然后与原始字符串进行比较。但是,我不确定这是否是对数据库连接编码的有效测试。
所以一般来说,如何为utf-8支持创建一个单元测试,上面的方法可以修改以解决这个目标吗?
答案 0 :(得分:3)
抱歉,但这没有意义。您的测试文件以一种格式编码。无论您放入测试字符串的是什么,都将以与文件相同的方式进行编码。我也不会依赖于mb_detect_encoding函数。我们采取以下字符串:“abcde”。它可以是ASCII或UTF-8。你无法判断,因为没有特殊的性格。编码是一种如何操纵数据的方式。
// EDIT
要使您的测试工作$this->assertTrue(mb_detect_encoding($original, 'UTF-8') === 'UTF-8')