私はいつもiconvで問題を抱えていました。文字列をWindows-1250に変換する必要がありますが、これは機能しないようです。
_$string = "ľaľa ho papľuha, ogrcal mi krpce!";
echo $string . ' ( ' . mb_detect_encoding($string) . ' ) <br>';
$string_encoded = iconv( mb_detect_encoding( $string ), 'Windows-1250//TRANSLIT', $string );
echo $string_encoded . ' ( ' . mb_detect_encoding($string_encoded) . ' ) <br>';
$string_encoded = mb_convert_encoding( $string, 'Windows-1250' );
echo $string_encoded . ' ( ' . mb_detect_encoding($string_encoded) . ' ) <br>';
_
上記の3つのエコーは、まさにこれを出力します。
_ľaľa ho papľuha, ogrcal mi krpce! ( UTF-8 )
�a�a ho pap�uha, ogrcal mi krpce! ( )
mb_convert_encoding() Unknown encoding "Windows-1250" ( ASCII )
_
このひし形の疑問符をいつも見てきたので、このPHP関数はまったく機能するのだろうかと思います。UTF-8をWindows-1250に変換するにはどうすればよいですか?
header('Content-Type: text/html; charset=windows-1250');
とsetLocale()
を試しました �文字は、テキストがUTF-8として解釈されていることを示していますが、この時点で無効なバイトシーケンスが検出されました。つまり、UTF-8を提供していませんが、クライアントはそれをUTF-8として読み取っています。これは、iconv
が正常に機能していて、結果を読んでいる人が、Windows-1250として解釈する必要があるというメッセージを受け取らなかったことを意味します。
すべてのプログラマーがテキストを操作するためのエンコーディングと文字セットについて絶対に知っておく必要があること および WebアプリでUnicodeを前後に処理する を参照してください。
同様の問題が発生しました。 CSVファイルを読んでいるときに、Word「Českárepublika」は「Èeskárepublika」と読みました。
これは私のためにそれを解決しました:
iconv( "Windows-1250", "UTF-8", ($string));
古い投稿ですが、UTF-8をWindows-1252に変換すると、同じ効果が得られます。
$str = "ľaľa ho papľuha, ogrcal mi krpce!"
$str = mb_convert_encoding( $str, "Windows-1252", "UTF-8" );
しかし、本当にWindows-1250が必要な場合は、 このソリューション を使用して、ニーズに合わせることができます。
正解はiconv( "UTF-8", "Windows-1250", $string );
です