filter_var()でURLのフォーマットチェック(とバグ)
PHPにはfilter_var()という関数があって、この関数を使うとURLのフォーマットチェックができます。(PHP 5.2.0以降)
ですが、この関数のURLフォーマットチェックにはバグがあって、ドメイン部分にハイフンがあると「URLではない」と判定されてしまうようです。
- PHP :: Bug #51192 :: FILTER_VALIDATE_URL will invalidate a hostname that includes '-'
- PHP :: Bug #51258 :: FILTER_VALIDATE_URL thinks dashes/hyphens in host name are invalid
- PHP 5.3.2環境で確認(5.3.3でも修正されていない?)
正常:
<?php $value = 'http://example.com/test.html'; $ret = filter_var($value, FILTER_VALIDATE_URL); var_dump($ret);
$ php test.php string(28) "http://example.com/test.html"
なんかおかしい:
<?php $value = 'http://exam-ple.com/test.html'; $ret = filter_var($value, FILTER_VALIDATE_URL); var_dump($ret);
$ php test.php bool(false)