由于某些原因,在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
中就可以了。