1

ユーザーが URL をテキストエリアに追加する小さなスクリプトを書いています。単一のリンクを検証するこの小さな関数を見つけました。

function isValidURL($url){
 return preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url);
}

しかし、リンクの配列を検証するために必要です

私は爆発を使用して、次のようにそれぞれを分離します。

$urls = explode("\n", $_POST['urls']);

を使用して URL の配列をループする必要があることは理解していますが、自分の内部foreachで foreach を取得するにはどうすればよいですか$varelseif

例:

function isValidURL($url){
 return preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $valid);
}

$urls = array('http://iamvalid.com','iamnotvalid.com','http://iamvalidaswell.com');

foreach ($urls as $check) {
 $validate = isValidURL($check);
}

if($check != $validate) {
//  If fail
 $result = 'fail';
} else {
//  If pass
 $result = 'pass';
}  // if

echo $result;

(デモ目的で expode の代わりに配列を使用)

更新: Deepaks の回答はうまく機能しますが、私の mysql インジェクション防止機能と競合します

競合する関数:

function sanitizeSQL($input) {
 if(get_magic_quotes_gpc() == true){
   $input = stripslashes($input);
  }
   return mysql_real_escape_string(htmlspecialchars($input));
}
4

3 に答える 3

1
function isValidURL($url){
   return preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url);
}

function sanitizeSQL($input) {
   if(get_magic_quotes_gpc() == true){
      $input = stripslashes($input);
   }
   return mysql_real_escape_string(htmlspecialchars($input));
}

$urls = explode("\n", $_POST['urls']);

$errorcount = 0;
foreach($urls as $url) {
   // next line fixes conflict by cleaning here rather then before
   $url = sanitizeSQL($url);
   $result = isValidURL(trim($url));
   // Do something with ur result
   if(!$result) $errorcount++;

}
if($errorcount>0){
  //Failed
} else {
  //Passed
}

ノート

mysql_*関数の使用mysqli_*またはを避けるようにしてくださいPDO

于 2012-09-06T04:40:43.630 に答える
1

サンプルコード(爆発ではなく配列)を使用して、次のようなものを提案します

function isValidURL($url){
  return preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $valid);
}

$urls = array('http://iamvalid.com','iamnotvalid.com','http://iamvalidaswell.com');

$result = 'pass';
foreach ($urls as $check) {
  if(!isValidURL($check)) {
    $result = 'fail';
    break;
  }
}

echo $result;
于 2012-09-06T04:32:31.240 に答える
0

それとももう少し短いかも…?

$urls = array_map('trim', explode("\n", $string));
$validUrls = array_filter(filter_var_array($urls, FILTER_VALIDATE_URL));
于 2017-07-18T08:32:07.080 に答える