2017-02-28 39 views
0
$url="http://www.example.com/日本語/こんにちは.html"; 
$result=filter_var(urlencode($url), FILTER_VALIDATE_URL); 

我編碼URL!那麼,爲什麼是$returnfalsePHP - filter_var返回false甚至用urlencode

+0

的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

+0

@deceze這在過濾器中仍然無效。 – Blackbam

+0

@Blackbam ...? https://3v4l.org/POAWp – deceze

回答

1

您使用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 
0

因爲它不是可能是一個有效的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()是編碼參數不是整個網址。

相關問題