PHP は文字をトランスコードするときに iconv 関数をよく使用しますが、特定のトランスコード中に問題が発生しました。
例:
$str = '今日の天気 - 晴れ';
$str = iconv('UTF-8','GBK',$str,);
トランスコード後、$str は確かに「今日の天気は晴れです」だけです。マニュアルを見ると、iconv の 2 番目のパラメータで 2 つのサフィックス
??//TRANSLIT は、直接変換できない文字を 1 つ以上の近似文字に自動的に変換します。
?//IGNORE は変換できない文字を無視し、デフォルトの効果は最初の不正な文字から切り捨てられます。
?
使用:
1. iconv は文字「-」を gb2312 に変換するときにエラーが発生することがわかりました。ignore パラメーターがないと、この文字に続くすべての文字列を保存できません。この「-」はどうやってもうまく変換できず出力できません。 なお、mb_convert_encoding にはこのバグはありません。
2. mb_convert_encoding は複数の入力エンコーディングを指定できますが、実行効率は iconv よりもはるかに悪くなります。
3. 通常の状況では、iconv を使用します。mb_convert_encoding 関数は、元のエンコーディングが特定できない場合、または変換後に iconv が正常に表示されない場合にのみ使用してください。
注: mb_convert_encoding を使用するには、php.ini でこの拡張機能を有効にする必要があります