PHP5.4.0のhtmlspecialchars()で日本語文字化け…だと!
たまには備忘録書きます久々にPHPのバージョンを更新したら構築してたWebシステムが従来通りに動作しなくなりました.症状としては,日本語だけがHTMLに表示されないという問題アルファベットは問題なく出力されている状態で,内部的にマルチバイトデータがブツ切りにでもなってるのかと思って確認してみたら,特に問題なし.というかデバッグ用に入れたコードで普通に日本語表示されているので,既存の日本語を出力しているモジュールに問題があることが判明!でで,画面に文字を出力する際にはHTMLのタグを無害化するためにサニタイジングをする訳なんだけど,これに使用しているのがhtmlspecialchars()なのである.ふむむ,こいつがあやしい…!リファレンスを見に行くと,PHP5.4.0からhtmlspecialchars()の仕様が変わっとるやんけーーーっ!!大型のアップデートなら分かるけど,ごく普通のバージョンアップでこういった仕様変更はさすがです先輩ででで,具体的にはhtmlspecialchars()のデフォルト値がISO-8859-1からUTF-8に変更されました.これにより,第3引数のオプションを省略して日本語出力してた場合は,文字コードによっては文字が出力されないことになります.ですので,Shift-JIS環境だったので下記のように指定することで無事回避htmlspecialchars($ROCKMAN, ENT_COMPAT | ENT_HTML401, 'Shift-JIS')$ROCKMANはサニタイジングしたい変数であるゾ.第2引数は,デフォルト値を記述していますが,詳細は下記を参照.htmlspecialchars PHP リファレンスhtmlspecialchars()の数が多かったらちぬとこだったけど,出力は一まとめにしてたらか影響範囲は少なかったよ何となくオプション気にしないで使う関数多いので,これからはちょっとは気にして引数を指定する形にした方が良いのかなぁと思いましたねぇ~こういった切り分けは楽しいなぁ…あぁ,飲み会でコーラ飲み過ぎてたぷんたぷんですー(´・ω・`)【1000円以上送料無料】10日でおぼえるPHP5入門教室/山田祥寛【100円クーポン配布中!】PHP徹底攻略シリーズ【1000円以上送料無料】PHP4→PHP5移行ガイド いまこそPHP資産をマイグレーション/桑村潤【100円クーポン配布中!】