PHPの mb_detect_encoding 関数を使っているのですが、
文字エンコーディングの検出が間違っていないかを検証する為に、
以下のように、検出された文字コードに戻し、元の文字列と一致するかで、
検出された文字エンコーディングが正しかったか確認しています。
$str = file_get_contents ( $url );
$moji_code = mb_detect_encoding ( $str , "ASCII,JIS,UTF-8,eucJP-win,SJIS-win" );
$str_after = mb_convert_encoding ( $str , 'UTF-8' , $moji_code );
if ( $str !== mb_convert_encoding ( $str_after , $moji_code , 'UTF-8' ) ) {
//文字化けしている可能性あり
}
これで、完璧でしょうか?
No.3ベストアンサー
- 回答日時:
>他に何か良い方法はありませんでしょうか?
#1で書いたとおり、文字コードを「完璧」に自動判別することは100%不可能です。
ある程度でよければご提示の方法で使用に耐えうる範囲だと思います。
No.2
- 回答日時:
文字コードの変換は、逆変換すると元に戻ることが多いです。
コードA (エンコードa)
↓エンコードa→UTF-8変換
コード B(UTF-8)
↓UTF-8→エンコードa変換
コードA (エンコードa)
ところが、これは、エンコードが違っていてもだいたい成り立ちます。
コードA (エンコードaだけどエンコードbと判定された)
↓エンコードb→UTF-8変換
コード C (UTF-8)
↓UTF-8→エンコードb変換
コードA (エンコードa)
と、判定に失敗しても前後が同じになるケースが無いわけでもありません。
また、対応する文字が無かったり、1対多対応で変換/逆変換で文字が変わったりがあるので、正しく判定されても違う文字になることもあります。
No.1
- 回答日時:
>完璧でしょうか?
mb_detect_encoding()自体の信頼性の問題なのでどこまで行っても
完璧はありえません。
ある程度確率は高いですがしょせん「たぶんこうじゃね?」という
あてずっぽでしかないということです。
文字コードの判定については昔から、「美乳処理」などいろいろ
工夫されてきていますが、テキストファイルはどこまでいっても
テキストファイルなので決め手に掛けます。
かといってBOMで処理するのはHTTPのヘッダ処理の兼ね合いから
敬遠される場合が多いようです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
php自動返信メール本文の一部の...
-
文字列のアスタリスク置換
-
エスケープ文字の復帰(¥r)と...
-
【VBA】エクセルで最後の不要な...
-
JAVA System.out.println の ...
-
文字の入力で横バー上段、中断...
-
ExcelのVBAでカタカナをチェッ...
-
電話番号のチェック ハイフン...
-
メッセージボックスで1025文字...
-
PHPで出力したHTMLのソースが汚い
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
テキストボックス行の桁数を制...
-
文の改行
-
C++で空Enterの入力を判...
-
VB6.0 Base64のデコード方法を...
-
JavaMail,本文中の改行について
-
PHPメールフォーム URLと半角...
-
改行について
-
C#の改行について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字化け変換方法
-
UTF8メールがLotus Notesで文字...
-
PHP+Postgres 「髙」が文字化け
-
phpMyAdmin内での文字化け
-
PHPmailerでの添付ファイルの文...
-
SJISで取得した半角カナをUTF-8...
-
SJIS→UTF-8変換後の文字化けに...
-
SQL Serverで文字コードUTF-8
-
PHPのsendmailでの文字化けにつ...
-
mb_strposについて予定外の結果...
-
「あ」→「82A0」のようにshift-...
-
includeファイルの文字コードに...
-
PHPスクリプトでエンコードエラー
-
multipart/form-dataの文字化け
-
mb_send_mailの2重投稿を防止し...
-
IMAP関数で取得した文字列の、...
-
メールのCCに複数のアドレスを...
-
自動返信メールへの画像添付
-
mb_regex_encodingでエンコード...
-
メール題名の文字化け
おすすめ情報