
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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- PHP phpのメールフォームの完了画面でメール受信のコードを書いています。 1 2023/05/31 11:39
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- C言語・C++・C# sprintf()の使い方について 1 2022/08/17 16:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字化け変換方法
-
、"(ダブルクォーテーション)...
-
VBAのコマンドボタンの文字列の...
-
エクセルでの漢字、カタカナ、...
-
Excel関数「COUNTIF」で”文字”...
-
メッセージボックスで1025文字...
-
正規表現で、半角大文字と半角...
-
文字列の置換をCStringで(C++)
-
カンマの含まれる文字列の数値...
-
DOSプロンプトの質問
-
LaTeX: captionの中で改行した...
-
文字の入力で横バー上段、中断...
-
全角括弧と全角読点の間隔を狭...
-
phpでhtmlソースを解析し、文字...
-
ショートメールの文字数
-
C#における改行を含む文字の探索
-
正規表現で特定のHTMLタグのク...
-
ソースコードの1行が長いとき...
-
VBでcsv読込TextFieldParser...
-
テキストボックス行の桁数を制...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字化け変換方法
-
PHP cURLでPOSTした値が文字化...
-
PostgreSQLからCSV形式でエクス...
-
PHPでの文字列置換について
-
SQL Serverで文字コードUTF-8
-
文字変換
-
記号全削除のクラスを作成したい
-
mb_send_mail()関数のタイトル...
-
postの文字化け防止について
-
SJISで取得した半角カナをUTF-8...
-
UTF8メールがLotus Notesで文字...
-
mb_send_mailの2重投稿を防止し...
-
日本語混じりの文字列の語数制限
-
10文字以降は非表示にしたいん...
-
SJIS→UTF-8変換後の文字化けに...
-
multipart/form-dataの文字化け
-
メール送信プログラムで特定文...
-
mysql登録時の文字化け
-
Warning: mb_strpos(): Unknown...
-
mb_ereg_replaceに関して
おすすめ情報