2013-01-21 7 views
5

Per qualche motivo, quando si esegue mb_convert_encoding in phpunit, ottengo risultati imprevisti. Ad esempio nel seguente modo:mb_convert_encoding() non funziona con phpunit

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

I rendimenti superiori bool (true) sotto PHP-FPM, e PHP-CLI, comunque sotto PHPUnit restituisce false, mb_convert_encoding() sta facendo qualcosa, ma solo codifica di una stringa incasinato.

+2

E 'possibile che phpunit usi php.ini diversi, dove l'estensione php_mbstring non è abilitata? – jasir

+0

@mins l'estensione 'mbstring' è caricata, come ho detto - mb_convert_encoding restituisce _qualcosa_ è solo sbagliato! –

+1

Il tuo 'test.php' è codificato in UTF-8 senza BOM? –

risposta

1

Suppongo che tu stia utilizzando un diverso set di impostazioni mbstring ini. Ecco un modo per risolverlo. Per prima cosa nel cli puoi eseguire php -i |grep -i "mb" per vederli.

Quindi creare un test phpunit che asserisca che i valori sono tutti uguali. Qui è la mia (ho fatto solo i probabili sospetti):

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')); 
} 

} 

parte: non ho potuto ottenere il codice per lavorare. Avevo bisogno di dirgli che la codifica sorgente è ISO-8859-1. Cioè il rilevamento automatico del set di caratteri di input ha sbagliato. Se stai solo cercando una soluzione rapida e non ti interessa il motivo, aggiungere quel 3 ° parametro esplicitamente a mb_convert_encoding potrebbe essere tutto ciò che serve.

0

Forse non è una risposta, ma penso che sia necessario allegare l'immagine qui;

Il mio obiettivo è mostrare come modificare le pagine contenenti unicode alla codifica corretta con l'editor di codifica. Lo faccio con Notepad ++ così, ma devi controllare le opzioni di codifica del tuo editor.

Notepad++ encoding options

Nel frattempo, mi augurerei di essere un esperto di informatica, ma non sto :). Era solo un suggerimento su come risolvere i problemi Unicode dalla mia parte, prima provo "Converti in UTF-8", se non funziona, quindi "Converti in UTF-8 senza BOM" e questa opzione ha risolto ogni volta il mio problema in passato. Ma se ti chiedi informazioni sulla distinta base, controlla qui: http://en.wikipedia.org/wiki/Byte_order_mark

+0

I miei file sono sicuramente UTF-8 poiché funziona sia su PHP-CLI che su PHP-FPM –