【php】default_mimetype、default_charset
問題
phpで出力している画面で、Content-Typeにcharsetが付いてないみたい。
charsetは付けた方がいいらしいけど、どうしよう?
答え
HTML(text/html)やプレーンなテキスト(text/plain)は、文字コードもきちんと明示することが推奨されている様子。
HTTP1.1では、デフォルトの文字コードはISO-8859-1。ISO-8859-1以外のWebサイトなら、ブラウザにデフォルトの文字コードで表示されてしまわないように、charsetを送出しておきたい。
phpの場合、以下の設定項目があり、何かしらの出力をしたときに、Content-Typeがtext/htmlになっているのは、phpのおかげ。
名前 | デフォルト |
---|---|
default_mimetype | “text/html” |
default_charset | “” |
デフォルトでは「Content-Type: text/html」、charsetなし。
UTF-8のWebサイトならdefault_charsetはUTF-8にしてよいでしょう。
php.iniに設定はもちろん可能
default_charset = "UTF-8"
いろいろな文字コードのWebサイトが混在していてphp.iniで設定したくない場合は他の箇所でも。
.htaccess に書くとしたら、
php_value default_charset utf-8
phpスクリプト内に書くとしたら、
ini_set('default_charset', 'utf-8');
ところで、このdefault_mimetypeとdefault_charsetの設定、自分でContent-Typeを送出した場合にも影響するかどうかなど、動きが気になるところ。
default_charset=”UTF-8″な環境で試した結果では、
何もしない → Content-Type: text/html; charset=UTF-8
自分で header(‘Content-Type: text/html’) した → Content-Type: text/html; charset=UTF-8
自分で header(‘Content-Type: text/plain’) した → Content-Type: text/plain; charset=UTF-8
自分で header(‘Content-Type: text/html; charset=EUC-JP’) した → Content-Type: text/html; charset=EUC-JP
自分で header(‘Content-Type: application/json’) した → Content-Type: application/json
text/*なMIME Typeのときで、charsetの指定がないときに追加してくれているようだ。
phpのソースを確認したところ、MIME Typeの先頭5文字が”text/”かどうかで処理を変えているところがあったので、そういうことなのでしょう。
ku 2023年9月6日 15:13
めちゃめちゃ古い記事ですが検索からこちらにたどり着き、さくっと問題を解決できました。ありがとうございます!