2016-08-15 9 views
1

は気前可能なURL(原因組み合わせるドットと文字に漠然とドメイン名のように見えるもの)を検出しようとすると、それを解析しようと、次のコードを考えてみましょう:正規表現と組み合わされたときにparse_urlが不正なURLを検出することはありますか?

if (preg_match('/[a-z\.0-9]+\.[a-z]{2,6}/i', $text, $possibleUrl)) { 
    $urlResult = parse_url('http://' . $possibleUrl[0]); 
    echo $urlResult === false ? 'malformed URL' : 'parseable URL'; 
} 

は、そのコードにAを付与することができます出力malformed URLを生成する$textの入力値?

+0

'parse_url'はバリデータではなくパーサーです。 '$ text = 'it.isは決してURLではありません';'は依然として「解析可能なURL」となります。 Validatorは次のようなものです:https://github.com/symfony/validator/blob/master/Constraints/UrlValidator.php –

+0

Im「検証するだけではなく、検出すること」。この質問に対するアンサーのおかげで、私はおそらく 'parse_url'への呼び出しを中止します。 – chiborg

答えて

1

TL; DR:号

長い答え:parse_url(PHPのCのソースコードで参照:EXT /標準/ url.c php_url_parse_ex()機能)方式との間の任意の入力の妥当性をチェックしない(すなわち、ここではhttp://)およびそれに続く@,:または/;それは単にそれがホスト部分であると仮定します。 [注:@のために、それはそれホスト後に一部を考慮]

あなたの正規表現は、文字だけ[a-zA-Z0-9.]、これにはどのような場合にホスト部分として認識されますすることができます。

関連する問題