簡體   English   中英

在PHP中使用parse_url,我們如何檢查輸入是url還是只是字符串

[英]Using parse_url in php, how do we check whether input is a url or just a string

這是我的代碼

<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時要輸出的主機名,現在,如果我嘗試輸入一些垃圾輸入,則會出現錯誤:“ Undefined index:host”,我想知道我們如何檢查其名稱一個有效的URL或只是一個字符串,然后回顯parse_url函數的輸出

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

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

或者,您可以創建一個正則表達式來檢查傳遞給parse_url的字符串的格式是否正確。 這有點困難,但是可以做到。 請參閱: 使用PHPPHP URL驗證+檢測 使用Regex解析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'];

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>";
}
}
?>

如果無法將變量解析為url,則parse_url()將返回false。 如果檢查parse_url()結果是否為!== false,則會使您知道該字符串已被函數成功解析,因此是有效的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'];
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM