我正在使用一些代码将 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)“Darba sākšana ar Gmail”
字符串(24)“Darba sākšana ar Gmail”
您可以使用utf8_decode函数修复长度问题。试试这个
$this->assertEquals(($pair[1]), (utf8_decode(imap_utf8($pair[0]))));
关于phpunit 认为两个相等的字符串不相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28266826/