最近の、別の記事を探す
【タイトル】
phpのバージョンアップで文字が消える。原因はhtmlspecialcharsのencodingデフォルト
【キーワード】
php,バージョンアップ,文字,消える,htmlspecialchars,encoding,デフォルト
【内容】
サーバーはXREAを使っています。拡張子cgiで動作させているものも含めて、php7への移行確認をしていました。cgiの先頭行末尾でバージョンを選べます。全部55(php5.5)で動かしているつもりでしたが、末尾にバージョンを示す数字を付けてないものがありました。
いきなり7にする前に
55を付けて確認したら、末尾に数字なしの状態で正しく表示されていた文字が出なくなりました。cgiはシフトJISでエンコードしています。
原因は
htmlspecialcharsのencoding省略時のデフォルトでした。渡したデータの文字コードとencodingの文字コードが異なる時は、データが戻らないようです。
デフォルトはPHPのバージョンによって異なります。
PHP 5.6.0 以降---------default_charsetの値を使います
PHP 5.4 と PHP 5.5 ----UTF-8
5.4以前----------------ISO-8859-1
5.5で正しく動作させるにはencodingに(この場合は)シフトJIS明示指定が必要。7で動作させるにはdefault_charsetで(この場合は)シフトJIS明示指定が必要でした。
このサイト本体とサイトを作るための自作簡易CMSは
UTF-8にするのと同時に5.5に移行したので、エンコード省略しても、デフォルトの問題は顕在化せず、通り過ぎて来たのです。
更新日 2016-08-08