我正在编写一个小脚本,用户将url添加到textarea,我发现这个小函数来验证单个链接:
function isValidURL($url){
return preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url);
}
但我需要它来验证一系列链接
我使用explode来分隔每个人:
$urls = explode("\n", $_POST['urls']);
我知道我需要使用foreach
循环网址数组,但如何在$var
elseif
示例:
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));
}
答案 0 :(得分: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;
答案 1 :(得分: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
。
答案 2 :(得分:0)
或者可能有点短......?
$urls = array_map('trim', explode("\n", $string));
$validUrls = array_filter(filter_var_array($urls, FILTER_VALIDATE_URL));