1

我正在编写一个小脚本,用户将 url 添加到 textarea,我发现这个小函数来验证单个链接:

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

但我需要它来验证一系列链接

我使用爆炸来分开每个这样的:

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

我知道我需要使用 a 循环 url 数组,foreach但我怎样才能在我的$var内部获取 foreachelseif

例子:

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', $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 回答
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_*or PDO

于 2012-09-06T04:40:43.630 回答
0

或者可能更短一点......?

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