0

私は短縮スクリプトに取り組んでおり、http:// が URL と一緒に渡されると問題が発生しました。

問題:ユーザーが http:// を含むリンクを提供しない場合、スクリプトはそれを処理できず、無効な url エラーを返します。preg_match は http、https、およびそれらのいずれも含まれていないリンクを解析する必要があるため、発生するはずのないものです。

httpのチェックを担当するコードスニペットは次のとおりです

$url = $_REQUEST['url'];  

  if(!preg_match("/^[a-zA-Z]+[:\/\/]+[A-Za-z0-9\-_]+\\.+[A-Za-z0-9\.\/%&=\?\-_]+$/i", $url)) {  
    $html = "<h1 id='upc' style='padding:8px 8px;text-align:center;'>Error: invalid URL</h1>";  
  } else {  
    $url = $_REQUEST['url'];  

それを修正し、http と https の解析と、http または https なしでのリンクの解析を可能にする最善の方法は何でしょうか。

4

1 に答える 1

0

使用できますfilter_var()

if (filter_var($url, FILTER_VALIDATE_URL)) {
    // $url is valid
} else {
    // $url is NOT valid
}

プロトコルが有効かどうかはチェックしません (foo://www.foo.com/bar検証はしますが、検証foo:/\www.foo.com/barはしません) が、これが始まりです。ドキュメントによると、parse_url()URL を検証するためのものではありません。

于 2013-02-04T16:46:44.563 に答える