我的猜測是你正在使用一組不同的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? –