PHPのctype_space関数で引数をintで渡すと…
PHPのctype_space
関数(www.php.net
)でハマったのでメモ。
HTMLフォームの入力チェックにctype_space
を使い、入力欄に「9」を入れたところ、空白文字だと判定されてしまいました。原因を探るため、次のコードを実行してみます。
$i = 0;
while ($i < 100) {
if (ctype_space($i)) {
echo (string) $i. "は空白文字\n";
}
$i++;
}
0も含めたすべての自然数は「空白文字」ではありませんから、何も出力されないはず。と思いきや、9〜13と32の6行が出力されてしまいます。
これ、ASCIIコードの10進数ですね…。引数をint
のまま渡してしまうと、10は改行(LF)、32は半角空白といった具合に判断されてしまうようです。
というわけで、引数は仕様どおりstring
で渡さなくてはなりません。先ほどのコードなら次のように修正します。
$i = 0;
while ($i < 100) {
$str = (string) $i; // ここでキャスト!
if (ctype_space($str)) {
echo $str. "は空白文字\n";
}
$i++;
}