POSTすると日本語が消えてしまう。PHP5.4~ htmlspecialcharsの使い方が変わっているので注意

とある掲示板プログラムでサーバーの引越しをしてからPOSTされた日本語が消えてしまうという不具合が発見されました。
php.iniの文字コード設定関係を疑いまいたが、結果htmlspecialcharsが原因でした。

PHP5.4からhtmlspecialcharsの第3引数を省略するとUTF-8として認識され、有効な文字コードではないので切り捨てられるようです。

なので、htmlspecialcharsを使われているところを探すところから始めました。

使われているhtmlSpecialChars関数をgrepで洗い出し

grep -rin 'htmlSpecialChars'

メモ:grepオプション
-r –recursive 再帰的
-i –ignore-case 大文字小文字判定なし
-n –line-number 行数を表示

実行結果

ちなみに自分が調べたとき、ソースコードに書かれていたのがhtmlspecialcharsではなくhtmlSpecialCharsのように大文字交じりで書かれていたので検索にヒットせず、余計な時間をかけてしまいました。
使われているPHP関数を調べる時は大文字小文字判定をしない-iオプションを忘れずにつけましょう。

上記で見つかったファイルを以下のようにShift_JIS用に修正します。

参考

[PHP]htmlspecialchars()を使うと文字が消える? | PHP Archive

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL