[解決済み] エンコーディングを検出し、すべてをUTF-8にする。
質問
様々な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;
}
テストしてみましたが、うまくいきません。どこが悪いのでしょうか?
解決方法を教えてください。
を適用した場合
utf8_encode()
をすでにUTF-8の文字列に変換すると、文字化けした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()
.
関連
-
[解決済み] PHP & MySQL: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given [重複] PHP & MySQL: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given.
-
[解決済み】SQLSTATE[42000]: 構文エラーまたはアクセス違反が発生しました。1064 SQL 構文にエラーがあります - PHP - PDO [重複]。
-
[解決済み】既に開始されているPHPセッション【重複あり
-
[解決済み] mysql_field_nameを新しいmysqliに変更します。
-
[解決済み] C#で文字列のエンコーディングを手動で指定せずに、一貫性のあるバイト表現を得るには?
-
[解決済み] ずっとUTF-8
-
[解決済み] UTF-8とBOMなしUTF-8の違いは何ですか?
-
[解決済み] UTF-8とUnicodeの違いは何ですか?
-
[解決済み】Node.jsでBase64エンコードを行うにはどうすればよいですか?
-
[解決済み] PHPです。元の文字セットを知らなくても、任意の文字列を UTF-8 に変換する、あるいは少なくとも変換しようとする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] Fatal error: メンバ関数prepare()のNULLでの呼び出し
-
[解決済み】phpのob_start()の使い道は?
-
[解決済み] コマンドの同期がとれていない。
-
[解決済み】「セッションキャッシュリミッターを送信できません - ヘッダーはすでに送信されています」【重複】。
-
[解決済み】Chrome net::ERR_INCOMPLETE_CHUNKED_ENCODING エラーが発生しました。
-
[解決済み] SQLSTATE[HY093]: 無効なパラメータ番号: パラメータが定義されていません
-
[解決済み】警告。数値でない値に遭遇しました
-
[解決済み] [Solved] Fatal error: メンバ関数 query() の null への呼び出し。
-
[解決済み】Wordpressの子テーマのstyle.cssが効かない。
-
[解決済み] PHP と mod_fcgid: handle_request_ipc 関数で ap_pass_brigade が失敗する。