文字列の末尾にLF(UNIX系OS改行コード)が入るとそれを文字列の末尾と解釈し、マッチしてしまいます。
CR(Mac系OS改行コード)とCR+LF(Windows系OS改行コード)は文字として解釈するためマッチしません。
以下、検証と対策
CRとCR+LFにはマッチしない
PHPで簡単な正規表現を書いてみました
index.php
index.php
<?php $data = isset($_GET['data']) ? $_GET['data']: ''; if (1 === preg_match('/^hoge$/u', $data)) { echo '入力成功'; } else { echo '入力失敗'; }
CR
http://localhost/index.php?data=hoge%0D
CR+LF
http://localhost/index.php?data=hoge%0D%0A
両方共、入力失敗と出力されます
入力成功と出力されてしまいます
index.php
http://localhost/index.php?data=hoge%0D
CR+LF
http://localhost/index.php?data=hoge%0D%0A
両方共、入力失敗と出力されます
LFにマッチしてしまう
http://localhost/index.php?data=hoge%0A入力成功と出力されてしまいます
対策
^と$の代わりに\Aと\zを使用しますindex.php
<?php $data = isset($_GET['data']) ? $_GET['data']: ''; if (1 === preg_match('/\Ahoge\z/u', $data)) { echo '入力成功'; } else { echo '入力失敗'; }
http://localhost/index.php?data=hoge%0A
無事、入力失敗と出力されます
0 件のコメント :
コメントを投稿