我正在使用一些代码将ISO-8859字符串转换为utf8。然后我想断言,它已经正确转换。代码是:

class EncodingTest extends TestCase {

    public function testImapUtf8()
    {
        $pairs = [
            ['=?ISO-8859-13?Q?Darba_s=E2k=F0ana_ar_Gmail?=', 'Darba sākšana ar Gmail'],
            ['Normal text', 'Normal text'],
            ['Darba sākšana ar Gmail', 'Darba sākšana ar Gmail'],
        ];

        foreach ($pairs as $pair) {
            $this->assertEquals(($pair[1]), (imap_utf8($pair[0])));
        }
    }
}


但是,对于第一对,它给了我一个错误:

1) EncodingTest::testImapUtf8
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'Darba sākšana ar Gmail'
+'Darba sākšana ar Gmail'


字符串看起来一样。我邀请有一些看不见的角色。如何测试imap_utf8是否按预期工作?

最佳答案

我var_dumped这两个变量,看到长度不相等

var_dump(imap_utf8('=?ISO-8859-13?Q?Darba_s=E2k=F0ana_ar_Gmail?='));
var_dump( 'Darba sākšana ar Gmail');


字符串(26)“ Darbasākšanaar Gmail”

字符串(24)“ Darbasākšanaar Gmail”

您可以使用utf8_decode函数解决长度问题。尝试这个

$this->assertEquals(($pair[1]), (utf8_decode(imap_utf8($pair[0]))));

10-07 14:15