為什么Php過濾器會發生故障?
Q1. 這肯定是一個無效的網址。 http://gvdvb.com/?mail=ali&bus=wertdomainn#wronghttp://gvdvb.com/?mail=ali&bus=wert(
)根據這個網址過濾器,最后一個字符將上述內容渲染成一個無效的網址。 https://regexr.com/39nr7
那么php怎么會驗證這個無效的url呢? 我沒有得到任何提示,我在表單的url輸入欄中輸入的url是一個無效的url。
網址過濾器
< form method="POST" name="textfield" id="textfield" action=">
<fieldet>
<標簽 for="url"> Url:</label><br>
<input type="text" name="url" id="domain" maxlength="255" size="20" >
<br>
<button type="submit">現在提交!</button>
</form>
<?php?
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
if(ISSET($_POST['url'])
{
if(!filter_input(INPUT_POST,'url', FILTER_VALIDATE_URL)
{
die('Invalid Url: '/span> . $_POST['url']); echo '<br> ' 。
}
else; }
{
$url = $_POST['url'/span>]。
$parse = parse_url($url)。
$domain = $parse['host'/span>]。
if(!filter_var($domain, FILTER_VALIDATE_DOMAIN)
{
die("Invalid Domain: $domain"); echo '<br> ' 。
}
echo 'Valid Domain: '/span> .$domain;
}
}
注意,在html表單上,我把域名輸入欄位設定為:
<label for="url"> Url:</label><br>
<輸入型別="text"
我是故意這樣做的,這樣html5就不會出現錯誤了。我想用php來代替這個錯誤,因為我需要學習如何用php來過濾url.
。問題2. 為什么php的域名過濾器不起作用? 每當我輸入一個無效的網址和一個無效的域名:xxx.
我得到的回音是:"我的域名是xxx。
我得到回音。 無效的域名。LINE: 27
< form method="POST" name="textfield" id="textfield" action=">
<fieldet>
<標簽 for="url"> Url:</label><br>
<input type="text" name="url" id="domain" maxlength="255" size="20" >
<br>
<button type="submit">現在提交!</button>
</form>
<?php?
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
if(ISSET($_POST['url'])
{
$url = $_POST['url'/span>]。
$domain = parse_url($url,PHP_URL_HOST) 。
if(!filter_input(INPUT_POST,'url', FILTER_VALIDATE_DOMAIN)
{
echo "Invalid Domain: $domain"; echo '<br> ' 。
echo 'LINE: ' . __LINE__;
}
else; .
{
echo 'Valid Domain: '/span> .$domain;
echo 'LINE: ' 。__LINE__;
}
}
非常令人費解!
uj5u.com熱心網友回復:
這些過濾器只是根據相關的標準,檢查域名或URL在語法上是否有效。
FILTER_VALIDATE_DOMAIN根據RFC 1034, RFC 1035, RFC 952, RFC 1123, RFC 2732, RFC 2181, 和RFC 1123檢查它是否有效。
FILTER_VALIDATE_URL檢查它是否根據 RFC 2396 的規定有效。
他們不檢查域名是否真的存在,URL是否真的有一個網路服務器,引數是否適合URL,等等。
因此,你不能用它們來判斷URL是否真的有用,而只是判斷它是否看起來像一個URL。
uj5u.com熱心網友回復:
讓我們來分析一下你的樣本URI
http://gvdvb.com/?mail=ali&bus=wertdomainn#wronghttp://gvdvb.com/?mail=ali&bus=wert(/code>
該協議。
http://
域名。
<代碼>gvdvb.com代碼>
查詢字串。
mail=ali&bus=wertdomainn 查詢字串:mail=ali&bus=wertdomainn
最后,頁面錨點。
wronghttp://gvdvb.com/?mail=ali&bus=wert(
)
雖然我個人不會使用這樣的錨,但它仍然是OK。
PHP filter_var()的FILTER_VALIDATE_URL是基于RFC 2396 - Uniform Resource Identifiers(URI)
這些規則允許構建特權域(我經常在內部或本地網路中使用)以及擴展公共域,而無需在發生變化時重新撰寫規則。
RFC的靈活性比 "固定 "規則更重要。這確實意味著你無法確認一個域名是否存在有效或有效(格式正確)。
如果您想要一個valid as in exists規則,您將需要撰寫您自己的查找查詢。
至于你的代碼,是的,所使用的PHP將檢查輸入的格式是否是一個有效的URL,但不檢查該URL是否可以公開訪問。
而且讓我們想一想,域名總是來來去去的。如果你今天想檢查一個 URL 是否可被訪問,你是否打算明天再檢查一次以確保它仍然可被訪問?
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/319533.html
標籤:
上一篇:有像as3這樣的排版詞典嗎?
