2013-01-21 38 views
5

何らかの理由で、mb_convert_encodingをphpunitで実行すると、予期しない結果が発生しています。たとえば、次のようやって:mb_convert_encoding()がphpunitで動作しない

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

上記戻りbool (true)をPHP-FPM、およびPHP-CLIの下で、PHPUnitのはfalseを返ししかし下、mb_convert_encoding()が何かをやっている、それだけで台無しに文字列にエンコードします。

+2

phpunitが異なるphp.iniを使用している可能性はありますか?php_mbstring拡張が有効になっていないのはなぜですか? – jasir

+0

@mins私が言ったように 'mbstring'拡張がロードされています - mb_convert_encodingは_something_を返します;間違っています! –

+1

'test.php'はBOMのないUTF-8でエンコードされていますか? –

答えて

1

私はあなたとは異なるmbstring ini設定を使用していると思います。これを解決する1つの方法があります。最初に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であることを伝える必要がありました。私。入力文字セットの自動検出が間違っていました。簡単な修正を探していて気にしない場合は、3番目のパラメータを明示的にmb_convert_encodingに追加するだけで十分です。

0

答えはありませんが、ここに画像を添付する必要があると思います。

私は、コードエディタでユニコードを含むページを適切なエンコーディングに変更する方法を示します。私はメモ帳でそれをやるので、エディタのエンコーディングオプションをチェックする必要があります。

Notepad++ encoding options

一方で、私はコンピュータサイエンスの専門家になりたいと思いますが、私は:)ではないのです。私が「UTF-8に変換」しようとすると、「BOMなしでUTF-8に変換してください」というメッセージが表示され、このオプションで問題が解決された過去の問題しかし、あなたがBOMについて疑問を持っているなら、ここで確認してください:http://en.wikipedia.org/wiki/Byte_order_mark

+0

私のファイルは、これはPHP-CLIとPHP-FPMの両方で動作しているので、間違いなくUTF-8です。 –

関連する問題