由于某些原因,在phpunit中运行mb_convert_encoding时,出现了意外的结果。例如,执行以下操作:
var_dump( mb_convert_encoding( utf8_decode( 'ö' ), 'UTF-8' ) === 'ö' )
上面的代码在PHP-FPM和PHP-CLI下返回bool (true),但是在PHPunit下返回false,mb_convert_encoding()在做什么,它只是编码为一个困惑的字符串。

最佳答案

我的猜测是您正在使用另一组mbstring ini设置。这是解决该问题的一种方法。首先,您可以在cli中运行php -i |grep -i "mb"来查看它们。

然后创建一个phpunit测试,声明所有值都相同。这是我的(我只做了可能的嫌疑人):

class MbStringTest extends PHPUnit_Framework_TestCase{

function test1(){
$this->assertEquals('UTF-8', ini_get('mbstring.internal_encoding'));
$this->assertEquals(0, ini_get('mbstring.encoding_translation'));
$this->assertEquals('', ini_get('mbstring.detect_order'));
$this->assertEquals(0, ini_get('mbstring.strict_detection'));

$s='ö';
$this->assertEquals($s,mb_convert_encoding( utf8_decode( $s ), 'UTF-8' , 'ISO-8859-1'));
}

}

除了:我无法使您的代码正常工作。我需要告诉它源编码是ISO-8859-1。 IE。自动检测到输入字符集是错误的。如果您只是想快速解决问题,而又不关心为什么,那么只需将第3个参数显式添加到mb_convert_encoding中就可以了。

10-08 04:44