さまざまな RSS フィードから大量のテキストを読み取り、データベースに挿入しています。
もちろん、フィードでは UTF-8 や ISO 8859-1 など、いくつかの異なる文字エンコーディングが使用されます。
残念ながら、テキストのエンコードに問題が発生することがあります。例:
「Fußball」の「ß」は、私のデータベースでは「Ÿ」のようになります。「Ÿ」であれば、正しく表示されます。
時々、「Fußball」の「ß」が私のデータベースでは「ß」のように見えます。もちろん、その場合は間違って表示されます。
他の場合には、「ß」は「ß」として保存されるため、変更されません。その場合も誤って表示されます。
ケース 2 と 3 を回避するにはどうすればよいでしょうか?
すべてを同じエンコーディング (できれば UTF-8) にするにはどうすればよいでしょうか? いつ を使用する必要がありutf8_encode()
、いつ を使用する必要がありutf8_decode()
(効果は明らかですが、いつ 関数を使用する必要がありますか?)、いつ入力に対して何もしなくてもよいのでしょうか?
すべてを同じエンコーディングにするにはどうすればいいでしょうか? おそらく関数を使うのでしょうかmb_detect_encoding()
? このための関数を書くことはできますか? 私の問題は次のとおりです:
- テキストがどのエンコーディングを使用しているかを確認するにはどうすればよいですか?
- 古いエンコードが何であれ、それを UTF-8 に変換するにはどうすればよいでしょうか?
このような機能は動作するでしょうか?
function correct_encoding($text) {
$current_encoding = mb_detect_encoding($text, 'auto');
$text = iconv($current_encoding, 'UTF-8', $text);
return $text;
}
テストしましたが、動作しません。何が問題なのでしょうか?
ベストアンサー1
すでに UTF-8 の文字列に適用するとutf8_encode()
、文字化けした UTF-8 出力が返されます。
私はこれらすべての問題に対処する関数を作成しました。これは と呼ばれますEncoding::toUTF8()
。
文字列のエンコードが何であるかを知る必要はありません。Latin1(ISO 8859-1)、Windows-1252または UTF-8、または文字列にそれらの組み合わせを含めることができます。Encoding::toUTF8()
すべてを UTF-8 に変換します。
あるサービスが UTF-8 と Latin1 を同じ文字列に混在させためちゃくちゃなデータ フィードを提供していたため、これを実行しました。
使用法:
require_once('Encoding.php');
use \ForceUTF8\Encoding; // It's namespaced now.
$utf8_string = Encoding::toUTF8($utf8_or_latin1_or_mixed_string);
$latin1_string = Encoding::toLatin1($utf8_or_latin1_or_mixed_string);
ダウンロード:
https://github.com/neitanod/forceutf8
Encoding::fixUFT8()
文字化けしたように見えるすべての UTF-8 文字列を修正する別の関数 も追加しました。
使用法:
require_once('Encoding.php');
use \ForceUTF8\Encoding; // It's namespaced now.
$utf8_string = Encoding::fixUTF8($garbled_utf8_string);
例:
echo Encoding::fixUTF8("Fédération Camerounaise de Football");
echo Encoding::fixUTF8("Fédération Camerounaise de Football");
echo Encoding::fixUTF8("FÃÂédÃÂération Camerounaise de Football");
echo Encoding::fixUTF8("Fédération Camerounaise de Football");
出力は次のようになります:
Fédération Camerounaise de Football
Fédération Camerounaise de Football
Fédération Camerounaise de Football
Fédération Camerounaise de Football
関数 ( forceUTF8
) を というクラスの静的関数ファミリーに変換しましたEncoding
。新しい関数は ですEncoding::toUTF8()
。