unicode支持的单元测试

时间:2012-09-24 22:09:12

标签: php unicode encoding utf-8

我正在尝试转换为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支持创建一个单元测试,上面的方法可以修改以解决这个目标吗?

1 个答案:

答案 0 :(得分:3)

抱歉,但这没有意义。您的测试文件以一种格式编码。无论您放入测试字符串的是什么,都将以与文件相同的方式进行编码。我也不会依赖于mb_detect_encoding函数。我们采取以下字符串:“abcde”。它可以是ASCII或UTF-8。你无法判断,因为没有特殊的性格。编码是一种如何操纵数据的方式。

// EDIT

要使您的测试工作$this->assertTrue(mb_detect_encoding($original, 'UTF-8') === 'UTF-8')