2012-08-29 48 views
5

我使用字符串和int進行了測試,我可以想象,只要它以http://開頭,它將是使用FILTER_VALIDATE_URL的有效URL。那麼,爲什麼我們需要FILTER_VALIDATE_URL?爲什麼不在輸入中添加http://就可以使其有效?任何以http://開頭的內容都會被FILTER_VALIDATE_URL驗證嗎?

var_dump(filter_var ('http://example',FILTER_VALIDATE_URL)); 
+0

告訴我們你測試了什麼,以及如何。 – 2012-08-29 02:32:51

+0

嘗試使用http:// 20,http://示例,它們是否有效 – Jenny

+0

您用來做測試的rhe代碼是? – 2012-08-29 02:38:21

回答

10

那麼從技術上說,這是後的方案開始(如http://),包含合法的URI字符的任何URI是按照官方的URI規範有效RFC 3986

每個URI開始使用第3.1節中定義的方案名稱,該名稱引用了該方案中用於分配標識符的規範。如此,URI語法是聯合且可擴展的命名系統,其中每個方案的規範可以進一步限制使用該方案的標識符的語法和語義。

所以,你得到的回報沒有什麼奇怪的 - 這就是應該發生的事情。至於爲什麼你應該使用filter_varFILTER_VALIDATE_URL這個標誌......它比在每個可能的URL方案中做下面的事情更符合語義,你不同意嗎?

if (strpos($url, 'http://') === 0 
    || strpos($url, 'ftp://') === 0 
    || strpos($url, 'telnet://') === 0 
) { 
    // it's a valid URL! 
} 
+0

時,http丟失了。我期望過濾器驗證一個url是否包含有效的域名。所以,我的假設是錯誤的。 – Jenny

+1

@Jenny如果這就是你要找的,在完成過濾器調用後,只需將返回值傳遞給[''parse_url'](http://us.php.net/manual/en/function.parse-url。 PHP),你可以得到一個很好的關聯數組,列出URI的組成部分。 – rdlowrey

+0

謝謝,我會盡力的。 – Jenny

相關問題