10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Response headerの「Content-Type:text/html; charset=UTF-8」のUTF-8を削除する

Last updated at Posted at 2016-01-29

単純なところで久々にハマったので残しておく。

##要望
Response HeaderのContent-Typeのcharset=UTF-8を削除したい。

スクリーンショット 2016-01-29 18.49.37.png ↑charset=UTF=8を消したい

##環境
apache+PHP5.6.0以上

##原因と対策
(1)、(2)のどちらかが正なら現象は発生する

(1)httpd.confでAddDefaultCharsetにUTF-8が指定されている

httpd.conf
AddDefaultCharset UTF-8

↓コメントアウトする

httpd.conf
#AddDefaultCharset UTF-8

(2)php.iniのdefault_charsetにUTF-8が指定されている。もしくはdefault_charsetが指定されていない。

php.ini
default_charset = "UTF-8" 
        or
;default_charset = "UTF-8" 

↓default_charsetのdefaultはUTF-8なので空文字指定する ←ここ重要

php.ini
default_charset = "" 

注意)「default_charset = ""」は公式ページによると"おすすめしない"と書いてある。
http://php.net/manual/ja/ini.core.php#ini.default-charset

さいごに

対応として、default_charsetは htmlentities()、html_entity_decode() 、htmlspecialchars()等のデフォルト値となり、空文字をしていすることは、二次的な問題が発生するリスクがあるのでやりたくない。そもそも.phpのみなら別にUTF-8縛りでも問題ない。問題なのはhtmlをphpとして処理している環境だったときである。この場合、SJISで書かれた静的なページが文字化けするので困る。今どき、UTF-8縛りで困ることはないのと、そもそもhtmlをphpとして処理すること自体が危険なのだが。。。

※htmlをphpとして処理している環境

httpd.conf
AddType application/x-httpd-php .html

以上です。

10
10
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?