5

何らかの理由で、mb_convert_encodingphpunit で実行すると、予期しない結果が得られます。たとえば、次のようにします。

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

上記はbool (true)PHP-FPM および PHP-CLI では返されますが、PHPunit では false が返され、mb_convert_encoding()何かを実行しているだけで、めちゃくちゃな文字列にエンコードされます。

4

2 に答える 2

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場合があります。

于 2013-01-22T09:53:41.717 に答える
0

答えではないかもしれませんが、ここに画像を添付する必要があると思います。

コーディングエディタを使用して、Unicodeを含むページを適切なエンコーディングに変更する方法を示すことを目指しています。私はNotepad++でそれを行いますが、エディターのエンコードオプションを確認する必要があります。

Notepad++エンコーディングオプション

その間、私はコンピュータサイエンスの専門家になりたいと思っていますが、そうではありません:)。私の側でユニコードの問題を解決する方法を提案しただけです。最初に「UTF-8に変換」を試してみて、うまくいかない場合は「BOMなしでUTF-8に変換」を実行すると、このオプションで毎回解決できました。過去の問題。ただし、BOMについて疑問がある場合は、ここを確認してください:http: //en.wikipedia.org/wiki/Byte_order_mark

于 2013-01-21T17:05:24.693 に答える