今日めっちゃ調子悪かった。。。。
久々にPHPを触ったんだけども、フレームワークなしで触るのが本当に久々。
簡単なフォームを作って欲しいとの依頼だった。
フレームワークなしで触ることが経験上少ないので、そういうケースは調べながらやるので結構大変。
よくわからなかったこととして。。。
<?php $email = filter_input(INPUT_POST, 'email'); $userName = filter_input(INPUT_POST, 'user_name'); $email = h($email); // utf8じゃない場合 if (mb_detect_encoding($userName) === 'UTF-8') { $userName = h($userName, 'UTF-8'); } else { $userName = h($userName, 'EUC-JP'); } // ... 省略
※h()
はhtmlspecialchars()
のラッパー関数
なんか最近の記事読むと、$_POST
とかに直接アクセスせずに、filter_input()
つかいなさい。ってのが多いのだけど、filter_input()
を使ってサニタイズさせたいときに、定数のFILTER_SANITIZE_FULL_SPECIAL_CHARS
を使ったんだけど、エラーがでた。
解決不可能だったので、とりあえずは取り出して、あとから、文字コードを確認して同じ文字コードでサニタイズするようにコードを書いたんだけど。。。。。。。。。
あーーー、なるほど。エラーになったわけがわかった気がする。
htmlspecialchars() に ENT_QUOTES を指定してコールするのと同じです。 クォートのエンコードを無効にするには FILTER_FLAG_NO_ENCODE_QUOTES を設定します。
ようするに、この定数もhtmlspecialchars()
を呼んでいるので、文字コードがデフォルトと違うとエラーになるんだな。なるほど。
えー、じゃあどうしようかな。できれば、filter_input()
だけで解決したいんだけど。
うーむ。。。
今日は調子が悪いので寝ます。