我的猜测是你正在使用一组不同的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。即输入字符集的自动检测出错了。如果你只是在寻找一个快速修复,并不在乎为什么,明确地添加第三个参数到mb_convert_encoding
可能是你所需要的。
是否有可能phpunit使用不同的php.ini,其中php_mbstring扩展名未启用? – jasir
@mins加载了'mbstring'扩展,正如我所说 - mb_convert_encoding确实返回_something_它只是错误! –
你的'test.php'是否以UTF-8编码而没有BOM? –