【Webサーバー】レンタルサーバーでphpをバージョンアップしたら文字化けした
相変わらず脆弱性の対応に追われている
ところどころでセキュリティの観点で
ものを見れるようになったことや
そもそも覚えることが多いので
役に立っているのはいいが
そのうち君セキュリティ担当な!
とか言われたらイヤだなぁ…
Webサーバーに文字化け発生
サーバーで使っているphpのバージョンが
古すぎる (5シリーズ) ということで
セキュリティにひっかかり、
バージョンを7シリーズまであげる
羽目になった
たしかに今になるとバージョン低いことが
リスクだと感じるようになったので
バージョンをあげるにこしたことはない
しかし、このバージョンアップにより
サーバー上の一部のhtmlに文字化けが発生
php5.5までならデフォルト文字コードの
設定は"デフォルト値"が"なし"でもよく
要するにどんな文字コードでも受け入れて
くれる設定だったということらしい
ところがphp5.6より新しいバージョンでは
デフォルト文字コードが"なし"は
許されず何かしら設定しないといけない
これもセキュリティの一環らしい
デフォルトでは"UTF-8"が設定されている
.htaccessまたはhost.conf?あたりに
以下の記述がされていると
(Apacheの場合)
拡張子が.phpのものと.htmlのものは
phpの設定が適用される
つまりUTF-8が適用される
AddHandler application/x-httpd-php .php .html
文字化けへの対策
文字化けしているhtmlのコードを見てみる
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <title></title> </head>
思った通り、
meta情報がEUC-JPになっている
これをUTF-8に変えれば
楽勝だろうと思いきや
変わらない…
サクラエディタあたりの
エディタソフトで開くと
htmlファイルの文字コード自体が
EUC-JPで保存されていることが
確認できる
なのでこれをUTF-8に変更して
上書き保存してやると
文字化けがなおった!
ちなみにmeta情報は変更しても
しなくても変わらず
phpinfoのdefault_charsetと
htmlファイル自体の文字コードが
一致することのほうが優先されるの
だと思う
php.iniにて
default_charset = "UTF-8"
の記述があるのでこれを
default_charset = "EUC-JP"
に変えてやれば
もちろん文字コードは
変更される
けど、
php5.5以下の環境で
文字コードが混在したphpファイルや
htmlファイルが存在していた場合は
どちらかに統一するしかない
ちなみに前述のとおり
デフォルトが"なし"は許されないので
;default_charset = "UTF-8"
デフォルト文字コードを指定しなかった
場合はUTF-8が設定される
php やら DB をさわっていると文字コード
ってなにかとネックになる気がする
英語圏ならこんな悩みはないのか。。
と、ちょっとだけ欧米人がうらやましい