• 締切済み

PHPでの文字化け修正ツールの作り方を教えて下さい

 なんか「ググれやボケカス!」とか怒られそうな丸投げ的な質問で申し訳ありません(^_^;  ネット上にはすでに文字化けした文章を、デコードと言いますか、本来の文字コードに変換して読めるようにしてくれるサイトがあったりしますが、あれをPHP使って自分で作れないかなと。  ただ、自分でいろいろ調べてみたものの、いまいち仕組みが全然分からないんですよね。  「urldecode」でできるかなと思いましたが、これってURLエンコードされたものを戻すやつですからもちろんダメ。  「mb_convert_encoding」で文字化け後のコードから文字化け前のコードに戻せるかと思ってたら、文字化けした文字をそのままコード変換するだけなのでまったくの無意味。  あれってどうやって文字化け修正してるんでしょうか?  1から10まで教えて下さいとは言いませんので、せめて「こういうキーワードで検索しろ」というものがあれば教えて下さい。

みんなの回答

noname#244856
noname#244856
回答No.3

ごめんなさい、本文ちゃんと読んでませんでした… (しかも文字化け検知じゃなくて修正でしたよね) 以下のコードでUTF-8に化けてしまったShift_JISをもとのUTF-8に戻すことには成功しました。$listは自動判定にしていますが、ツールをUTF-8で作成するならUTF-8だけ書いておけば十分だと思います。ちょっと自信がないですが… <?php $str = '譌・譛ャ'; $list = 'ASCII,JIS,UTF-8,CP51932,SJIS-win'; $result = mb_convert_encoding($str, 'SJIS-win', $list); var_dump($result); // string(6) "日本" 自動判定すべきなのはむしろ 'SJIS-win' と書いている部分です。しかしPHPの関数にここを自動判定する機能を持つものはないので、自分で「一番正解っぽい結果」を選ぶ必要があります。これは出力後の文字コード範囲を見るとかぐらいしかなさそうです…

noname#235729
質問者

お礼

 お礼が遅くなり申し訳ありません。  ご回答ありがとうございました。  そのソースでの変換は成功したんですが、文字化けしたものを変換にかけてみるとダメでした。  なんだか、$マークが使われていたり、普通の文字化けと違うような気がします。困った…(^_^;

noname#244856
noname#244856
回答No.2

例: UTF-8の「日本」をSJIS-winと認識し「譌・譛ャ」になってしまった場合 <?php $str = '譌・譛ャ'; $list = 'ASCII,JIS,UTF-8,CP51932,SJIS-win'; $result = mb_detect_encoding($str, $list); var_dump($result); // string(5) "UTF-8" ※ この回答を投稿する際に「・」「ャ」が強制的に全角に変換されてしまってるのでそのままコピペしても動きません

noname#235729
質問者

お礼

ご回答ありがとうございました。

  • bunthit
  • ベストアンサー率0% (0/1)
回答No.1

文字化けには様々なパターンがありますが、例えばEUC-JPからUTF-8へ変換するプログラムがあった場合にShift_JISの文字列を与えると文字化けになったりします。 mb_convert_encoding()であれば、第3引数に変換元の文字コードを与えることで自動認識に頼らず強制変換することで戻せる可能性があります。 また、例えばメール本文の場合、base64エンコードやmimeエンコードがでエンコードされている可能性があります。base64の場合はbase64_decode()、mimeの場合はmb_decode_mimeheader()を試してみてください。

noname#235729
質問者

お礼

 お礼が遅くなり申し訳ありません。  ご回答ありがとうございました。  第3引数を指定してみてもダメでした(^_^;  いったい、この文字化けは何なのか…。

関連するQ&A