単純なところで久々にハマったので残しておく。
##要望
Response HeaderのContent-Typeのcharset=UTF-8を削除したい。
##環境
apache+PHP5.6.0以上
##原因と対策
(1)、(2)のどちらかが正なら現象は発生する
(1)httpd.confでAddDefaultCharsetにUTF-8が指定されている
AddDefaultCharset UTF-8
↓コメントアウトする
#AddDefaultCharset UTF-8
(2)php.iniのdefault_charsetにUTF-8が指定されている。もしくはdefault_charsetが指定されていない。
default_charset = "UTF-8"
or
;default_charset = "UTF-8"
↓default_charsetのdefaultはUTF-8なので空文字指定する ←ここ重要
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として処理している環境
AddType application/x-httpd-php .html
以上です。