2011-11-08 55 views
1

這裏是我的代碼在PHP中使用parse_url,我們如何檢查輸入是否是一個URL或只是一個字符串

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
<input type="text" name="text"/> 
<input type="submit" name="submit" value="submit"/> 
</form> 
<?php 
if(isset($_POST['submit'])){ 
$url = $_POST['text']; 
$parse = parse_url($url); 
echo $parse['host']; 
} 
?> 

我使用parse_url以獲取主機的名稱將被輸出,當有人輸入URL,現在如果我試圖進入一些垃圾輸入,它會給出一個錯誤:「未定義的索引:主機」,我想知道我們如何檢查其有效的url或只是一個字符串,然後回顯parse_url函數的輸出

+0

使用'的preg_match()'代替或看到這個[示例](http://php.net/ manual/en/function.parse-url.php#93983) – diEcho

回答

6

您可以檢查是否定義主機:

echo isset($parse['host']) ? $parse['host'] : 'Invalid input'; 

或者,您可以創建一個正則表達式來檢查您傳遞給parse_url的字符串是否格式正確。這有點困難,但可以完成。請參閱:Parse URL with Regex using PHPPHP url validation + detection

+0

This works ... thanx nick –

+0

不客氣!如果它回答你的問題,你能將它標記爲已接受嗎?謝謝。 – nickb

1

使用正則表達式

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
<input type="text" name="text"/> 
<input type="submit" name="submit" value="submit"/> 
</form> 
<?php 
if(isset($_POST['submit'])){ 
$url = $_POST['text']; 

define('REGEX_URL','/http\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/'); 

if(preg_match(REGEX_URL, $url, $url)) { 
    echo "<a href=\"{$url[0]}\">{$url[0]}</a>"; 
} else { 
    echo "<p>No Match Found</p>"; 
} 
} 
?> 
1

parse_url()將返回false,如果變量無法解析的網址。 檢查!== false的parse_url()結果會讓你知道該字符串已被該函數成功解析,因此是一個有效的url。

$parse = parse_url($url); 
if($parse !== false) 
{ 
    echo 'valid url'; 
    if(isset($parse['host'])) echo $parse['host']; 
} 

之後,由您決定「有效網址」是什麼意思。 PHP的parse_url函數將能夠解析僅僅是例如只是一條路。根據您給定的問題/上下文,您可能會覺得「有效url」至少由scheme + host組成,或者在不同的上下文中,只有相對路徑(無主機)也可能有效。添加自己的支票 - 只是檢查,如果關鍵是現在的解析陣列中 - 可能看起來像:

$parse = parse_url($url); 
if($parse !== false) 
{ 
    if(isset($parse['scheme']) && isset($parse['host'])) 
    { 
     echo 'valid url'; 
     echo $parse['host']; 
    } 
} 
+1

應該注意的是,在PHP5.3.3之前,''parse_url''''''''在返回'false'時也會觸發'E_WARNING',所以你可能需要在 rdlowrey

相關問題