web-dev-qa-db-ja.com

文字列にPHP

文字列にURLしか含まれていない場合、これがチェックする適切な方法であるかどうか疑問に思っています:

if (stripos($string, 'http') == 0 && !preg_match('/\s/',$string)) {
  do_something();
}

stripos()は、文字列が「http」で始まるかどうかをチェックします
preg_match()は、文字列にスペースが含まれているかどうかを確認します

そうでない場合、文字列はURL以外のものではないと想定しますが、その仮定は有効ですか?これを達成するためのより良い方法はありますか?

34
yan

filter_var() を使用します

if (filter_var($string, FILTER_VALIDATE_URL)) { 
  // you're good
}

フィルターをさらに洗練させることができます。 マニュアルを参照 詳細については.

103
John Conde

PHP URLを検証するより良い方法があります http://www.php.net/manual/en/function.filter-var.php

if(filter_var('http://example.com', FILTER_VALIDATE_URL)))
    echo 'this is URL';
8
Winston

URL(および「非ASCII」のURL)をより安全に検証するには、次のことができます。

  1. フィルターで確認します( manual でフィルターが状況に合っていることを確認してください)
  2. DNSレコードがあるかどうかを確認します

$string = idn_to_ascii($URL); if(filter_var($string, FILTER_VALIDATE_URL) && checkdnsrr($string, "A")){ // you have a valid URL }

0
CFP Support