読者です 読者をやめる 読者になる 読者になる

ITの隊長のブログ

ITの隊長のブログです。いや、まだ隊長と呼べるほどには至っていないけど、日々がんばります。CakePHPとPlayFrameworkを使って仕事しています。最近はAngular2をさわりはじめたお(^ω^ = ^ω^)

風邪ひきそう。。。(´Д`;

PHP

スポンサードリンク

今日めっちゃ調子悪かった。。。。

久々に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()だけで解決したいんだけど。

うーむ。。。

今日は調子が悪いので寝ます。