2013-01-21 10 views
5

Z jakiegoś powodu, podczas uruchamiania mb_convert_encoding w phpunit, otrzymuję nieoczekiwane wyniki. Na przykład w następujący sposób:mb_convert_encoding() nie działa z phpunitem

var_dump(mb_convert_encoding(utf8_decode('ö'), 'UTF-8') === 'ö')

Powyższe powraca bool (true) pod PHP-FPM i PHP-CLI, jednak pod phpunit zwraca false, mb_convert_encoding() robi coś, po prostu koduje się zawiedli ciąg.

+2

Czy to możliwe, że phpunit używa innego pliku php.ini, gdzie rozszerzenie php_mbstring nie jest włączone? – jasir

+0

@mins ładowane jest rozszerzenie 'mbstring', jak już wspomniałem - mb_convert_encoding zwraca _something_ it; s właśnie źle! –

+1

Czy Twój kod 'test.php' jest kodowany w UTF-8 bez LM? –

Odpowiedz

1

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.

0

Może nie jest to odpowiedź, ale myślę, że trzeba tu dołączyć obraz;

Mam zamiar pokazać, jak zmienić strony zawierające unicode na odpowiednie kodowanie za pomocą edytora kodu. Robię to z Notepad ++, więc musisz sprawdzić opcje kodowania edytora.

Notepad++ encoding options

Tymczasem ja chce być ekspertem w dziedzinie informatyki, ale nie jestem :). To była tylko sugestia, jak rozwiązać problemy z Unicode po mojej stronie, najpierw próbuję "Konwertuj na UTF-8", jeśli nie działa, a następnie "Konwertuj na UTF-8 bez LM" i ta opcja za każdym razem rozwiązała moje problem w przeszłości. Ale jeśli zastanawiasz się nad LM, sprawdź tutaj: http://en.wikipedia.org/wiki/Byte_order_mark

+0

Moje pliki to zdecydowanie UTF-8, ponieważ działa on zarówno na PHP-CLI, jak i na PHP-FPM –