- ベストアンサー
UTF-8で文字化け
いつもお世話になっております。 全てのファイルをEUC-JP で作成しております。 Googleマップを使用することになり、1ページだけ UTF-8 で出力したいと思います。 php.ini の設定は以下のようになっております。 -------------------------------------------------- default_charset EUC-JP mbstring.detect_order no value mbstring.encoding_translation Off mbstring.func_overload 0 mbstring.http_input pass mbstring.http_output EUC-JP mbstring.internal_encoding EUC-JP mbstring.language Japanese mbstring.substitute_character no value -------------------------------------------------- Googleマップを出力するページで以下のようにしたのですが 文字化けが直りません。 map.php -------------------------------------------------- ini_set("default_charset", "UTF-8"); mb_internal_encoding("UTF-8"); 他に設定する箇所はありますでしょうか。 よろしくご教示お願いいたします。 <環境> PHP:4.3.1
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
・header()できちんとutf-8を指定しているか ・metaタグで文字コードを指定しているか ・吐き出しているものはutf-8で書かれているか くらいですかね。 文字化けの問題は「どこの設定を間違えたか」ではなく 「どこの処理で文字化けを起こしたか」を知ることが肝要です。 吐き出している文字が既に間違えているのか、 クライアント側が正常に認識していないか、 それとも他の要因でゴミが入っているのか、 原因は色々あります。 一概に「これが悪い!」とは即答できないかと。
その他の回答 (4)
- shimix
- ベストアンサー率54% (865/1590)
すでに蛇足ですが(汗 >1つ確認なのですが、ini_set() で残しておいた方がいいものは >ありますでしょうか。 ini_set()などはよほどのことがない限りは書かないほうがいいと思います。私なら書くときにini_set()をざっくり消しても問題なく動くように・・と考えます。
お礼
shimix さん、ご回答ありがとうございます。 ini_set() は削除しても文字化けしないことを確認しました。 ↓のみ追加して作成していきます。 header("Content-Type: text/html;charset=utf-8"); 大変勉強になりました。 ありがとうございました。
- wp_
- ベストアンサー率54% (132/242)
間違えて送信されちった^^; >ini_set() で残しておいた方がいい 動いているのであればいじらないほうが良い・・と言うのは都市伝説ですが。^^; >ini_set("default_charset", "UTF-8"); >mb_internal_encoding("UTF-8"); mb_convert_encoding()を噛ましているのであれば必要ないかと。 DBなど内部処理がEUC-JPになっていてページ内で使用しているのであれば 前述のとおり洗い出し→mb_convert_encoding()とし、 上記は取っ払った方が良いかもしれません。
お礼
wp_ さん、ご回答ありがとうございます。 ini_set() は削除しても文字化けしないことを確認しました。 とても勉強になりました。
- wp_
- ベストアンサー率54% (132/242)
>mbstring.http_input pass これが設定されていればphp側でゴミが入ることは殆どないと思いますよ。 むしろ、UTF-8を使う箇所を「全て」洗い出し、そこだけmb_convert_encoding()を噛ますだけにした方がバグは少なくなりそうです。 たかが文字コードごときでサーバの設定をページごとに変えるのは好ましくないですしね。 そのコンテンツだけ(ページ単位でなくコンテンツ単位で)変えたいと言う場合であれば、 phpでini_set()するより.htaccessやそれに関連する機能で設定した方が良いかと思います。
お礼
wp_ さん、ご回答ありがとうございます。 UTF-8 を使うページはGoogleマップのページのみ1ページです。 特にini_set() で残すものはなさそうですね。 ありがとうございました。
- shimix
- ベストアンサー率54% (865/1590)
基本的にANo.1の方が書かれたようなことですが、 ・化けている状態でブラウザがエンコードを何と自動認識しているかを確認 ・エンコードを強制変更して、何にすれば化けないかを確認 以上を確認すれば、間違いは追っていけると思います。
お礼
shimix さん、ご回答ありがとうございます。 解決できました。 ありがとうございます。 1つ確認なのですが、ini_set() で残しておいた方がいいものは ありますでしょうか。 よろしくお願いいたします。
お礼
wp_ さん、ご回答ありがとうございます。 meta タグでは utf-8 に設定していたのですが、header() では 設定していませんでした。 ↓を追加したら、文字化けはなくなりました。 header("Content-Type: text/html;charset=utf-8"); ありがとうございました。 1つ確認なのですが、ini_set() で残しておいた方がいいものは ありますでしょうか。 よろしくお願いいたします。