$url="http://www.example.com/日本語/こんにちは.html";
$result=filter_var(urlencode($url), FILTER_VALIDATE_URL);
我編碼URL!那麼,爲什麼是$return
false
?PHP - filter_var返回false甚至用urlencode
$url="http://www.example.com/日本語/こんにちは.html";
$result=filter_var(urlencode($url), FILTER_VALIDATE_URL);
我編碼URL!那麼,爲什麼是$return
false
?PHP - filter_var返回false甚至用urlencode
您使用urlencode
編碼查詢參數值。它編碼具有特殊意義的網址,字符,如:
,/
,?
等
如果編碼完整的網址 - 而不是值在查詢部分 - 它不是一個有效的URL了。
這是您的網址您編碼之後:
http%3A%2F%2Fwww.example.com%2F%E6%97%A5%E6%9C%AC%E8%AA%9E%2F%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF.html
因爲它不是可能是一個有效的URL:
http://php.net/manual/de/filter.filters.validate.php
從文檔:
void驗證值作爲URL(根據» http://www.faqs.org/rfcs/rfc2396),任選地與所需 組件。請注意,有效的網址可能不會指定HTTP協議,因此可能需要進一步的驗證以確定網址 使用預期的協議,例如, ssh://或mailto :.請注意, 函數只會發現ASCII URL有效;國際化 域名(包含非ASCII字符)將失敗。
URL編碼的URL總是失敗,因爲urlencode會向URL添加無效的charactares。此功能不適用於使用中文字符驗證網址。
特別是最後一行說的確切:請注意, 函數只會發現ASCII URL有效;國際化 域名(包含非ASCII字符)將失敗。
編輯:@jeroen是右btw urlencode()
是編碼參數不是整個網址。
的URL必須是'http://example.com/%E6%97%A5%E6%9C%AC%E8%AA% 9E /%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF.html'。在事實只有一個無效的URL作爲起點之後,您無法輕易修復該問題。 – deceze
@deceze這在過濾器中仍然無效。 – Blackbam
@Blackbam ...? https://3v4l.org/POAWp – deceze