2012-09-06 72 views
1

我書面方式一個小的腳本,用戶添加URL到一個文本,我發現這個litttle函數來驗證單鏈接:驗證url數組?

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

,但我需要它來驗證鏈接

我一個數組使用爆炸到單獨的每個這樣的:

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

我明白,我需要循環使用foreach,但我怎麼能得到的foreach $var裏面我URL的數組

例子:

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)); 
} 
+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

+0

這可行,但它與另一個功能衝突(請看第一篇文章) –

+1

讓我看看! – Deepak

+0

與tat相沖突的函數有什麼意外的結果? – Deepak

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; 
0

或者也許有點短...?

$urls = array_map('trim', explode("\n", $string)); 
$validUrls = array_filter(filter_var_array($urls, FILTER_VALIDATE_URL));