Zgaduję, że używasz innego zestawu ustawień mbstring ini. Oto jeden ze sposobów na rozwiązanie tego problemu. Najpierw w kanale możesz uruchomić php -i |grep -i "mb"
, aby je zobaczyć.
Następnie utwórz test phpunit, który zapewnia, że wartości są takie same. Tu jest moje (I tylko nie prawdopodobnych podejrzanych):
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'));
}
}
marginesie: nie mogłem dostać kod do pracy. Musiałem powiedzieć, że kodowanie źródłowe to ISO-8859-1. To znaczy. automatyczne wykrywanie wejściowego zestawu znaków jest błędne. Jeśli szukasz tylko szybkiej poprawki i nie obchodzi Cię dlaczego, dodanie tego trzeciego parametru jawnie do mb_convert_encoding
może być wszystkim, czego potrzebujesz.
Czy to możliwe, że phpunit używa innego pliku php.ini, gdzie rozszerzenie php_mbstring nie jest włączone? – jasir
@mins ładowane jest rozszerzenie 'mbstring', jak już wspomniałem - mb_convert_encoding zwraca _something_ it; s właśnie źle! –
Czy Twój kod 'test.php' jest kodowany w UTF-8 bez LM? –