- ベストアンサー
PHPの内部文字コード設定できない?
- Windows 8.1+PHP 7.0.1環境で、php.iniのmbstring.internal_encodingが変更されてもdefault_charsetの値に反映されない問題が発生しています。
- mbstring.internal_encodingを変更しても、default_charsetの値には反映されず、mb_internal_encoding()の値しか変わりません。
- 質問者は、php.iniで設定したい文字コードをmb_check_encodingに利用したいと考えていますが、現在はmbstring.internal_encodingから指定する必要があるようです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> 以下のページを見ますと、mbstring.internal_encodingはPHP 5.6で非推奨となり、default_charsetで設定せよ、とあるのですが、いかがでしょうか。 mbstring.internal_encoding の代わりに default_charset を設定したらmb関数の文字コードが設定されると言う意味ではありません。 mbstring.internal_encoding を設定するとmb関数で文字コードを指定しなくても既定値の文字コードだという前提で動いてくれました。 そういった既定値だと勝手に解釈してくれる事を期待したコーディングは止めましょうと言う事で、mb関数を使う時はしっかり文字コードを意識してコーディングし、プログラムが出力する文字の文字コードを default_charset で指定して、クライアントに対し正しい文字コードを伝える事で文字化けしないようにしましょうと言ってるのです。
その他の回答 (2)
- t_ohta
- ベストアンサー率38% (5241/13712)
> 以下のように整理してみましたが、これで理解はあっていますでしょうか。 あっているんじゃないでしょうか。 基本的には常に使っている文字コードを意識したプログラムを書くことです。 外部から送られてくるパラメータや、ファイルから読み込むデータなど、どんな文字コードが使われているか分らないモノを扱うこともあるので、プログラム全体としてどの文字コードを使うのか、クライアントに返すデータの文字コードに何を使うのかを管理する事が大切です。
お礼
ご回答ありがとうございます。 おかげさまで理解できました。 これまで以上に、文字コードを意識したプログラムを書くようにしたいと思います。
- t_ohta
- ベストアンサー率38% (5241/13712)
default_charset は PHPが出力時にHTTPヘッダとして送信する文字コード名であって、プログラム内で扱う文字コードのことではありません。
補足
ご回答有難うございます。 以下のページを見ますと、mbstring.internal_encodingはPHP 5.6で非推奨となり、default_charsetで設定せよ、とあるのですが、いかがでしょうか。 http://php.net/manual/ja/mbstring.configuration.php しかし、最初の投稿のように、default_charsetを変更しても、mb_internal_encoding関数の戻り値には反映されていないように見えたので、気になった次第でした。 ※たとえばdefault_charsetをEUC-JPにしても、mb_internal_encoding関数はUTF-8を返しているようです。
補足
ご回答ありがとうございます。 なるほど、default_charsetはmbstring.~というパラメータの代わりにはならないのですね。頭がやや混乱してしまったので、以下のように整理してみましたが、これで理解はあっていますでしょうか。 1) mb_~系の関数で文字コードを指定せず、mbstring.internal_encodingも指定しなかった場合、PHP7標準の文字コードであるUTF-8を使用する(default_charsetを見るわけではない) 2) mb_~系の関数でUTF-8以外の文字コードを指定したい場合には、mb_check_encoding関数など個別の関数で引数を明示する 3) もしも複数のmb_~系の関数でUTF-8以外の文字コードをまとめて指定したい場合には、mb_internal_encoding関数で文字コードを設定する ※mbstring.internal_encodingパラメータを使用してはならない 何度も申し訳ありませんが、どうぞよろしくおねがいします。