こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

-広告-

解決済みの質問

PHPの内部文字コードを設定できない

環境はWindows 8.1+PHP 7.0.1です。

php.iniのmbstring.internal_encodingがPHP5.6で非推奨になったので、
default_charsetで文字コードを設定しています。
ところが、default_charsetの値を変えても、以下の結果が変わりません。

echo mb_internal_encoding();

mbstring.internal_encodingを変更すると、確かに反映されるのですが、
default_charsetの値はmb_internal_encoding()には反映されないのでしょうか。

もともとは、mb_check_encodingで判定に利用する文字コードを、php.iniで設定したかったのですが、現在はこれを利用するにはやはりmbstring.internal_encodingから指定しなければならないのでしょうか(現在は常にUTF-8でチェックしているようです)。

投稿日時 - 2016-01-25 21:35:25

QNo.9117095

困ってます

質問者が選んだベストアンサー

> 以下のページを見ますと、mbstring.internal_encodingはPHP 5.6で非推奨となり、default_charsetで設定せよ、とあるのですが、いかがでしょうか。

mbstring.internal_encoding の代わりに default_charset を設定したらmb関数の文字コードが設定されると言う意味ではありません。
mbstring.internal_encoding を設定するとmb関数で文字コードを指定しなくても既定値の文字コードだという前提で動いてくれました。
そういった既定値だと勝手に解釈してくれる事を期待したコーディングは止めましょうと言う事で、mb関数を使う時はしっかり文字コードを意識してコーディングし、プログラムが出力する文字の文字コードを default_charset で指定して、クライアントに対し正しい文字コードを伝える事で文字化けしないようにしましょうと言ってるのです。

投稿日時 - 2016-01-26 11:58:50

補足

ご回答ありがとうございます。
なるほど、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パラメータを使用してはならない

何度も申し訳ありませんが、どうぞよろしくおねがいします。

投稿日時 - 2016-01-26 15:31:44

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(3)

ANo.3

> 以下のように整理してみましたが、これで理解はあっていますでしょうか。

あっているんじゃないでしょうか。
基本的には常に使っている文字コードを意識したプログラムを書くことです。
外部から送られてくるパラメータや、ファイルから読み込むデータなど、どんな文字コードが使われているか分らないモノを扱うこともあるので、プログラム全体としてどの文字コードを使うのか、クライアントに返すデータの文字コードに何を使うのかを管理する事が大切です。

投稿日時 - 2016-01-27 17:18:19

お礼

ご回答ありがとうございます。
おかげさまで理解できました。
これまで以上に、文字コードを意識したプログラムを書くようにしたいと思います。

投稿日時 - 2016-01-27 21:13:17

ANo.1

default_charset は PHPが出力時にHTTPヘッダとして送信する文字コード名であって、プログラム内で扱う文字コードのことではありません。

投稿日時 - 2016-01-26 09:33:17

補足

ご回答有難うございます。
以下のページを見ますと、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を返しているようです。

投稿日時 - 2016-01-26 11:06:42

-広告-
-広告-
-広告-
-広告-