1
驗證RFC 3986的URI非常簡單。你可以使用一個regular expression like:國際資源標識符驗證
/^ # Start at the beginning of the text
([a-z][a-z0-9\*\-\.]*):\/\/ # The scheme
(?: # Userinfo (optional)
(?:(?:[\w\.\-\+!$&'\(\)*\+,;=]|%[0-9a-f]{2})+:)*
(?:[\w\.\-\+%!$&'\(\)*\+,;=]|%[0-9a-f]{2})[email protected]
)?
(?: # The domain
(?:[a-z0-9\-\.]|%[0-9a-f]{2})+ # Domain name or IPv4
|(?:\[(?:[0-9a-f]{0,4}:)*(?:[0-9a-f]{0,4})\]) # or IPv6
)
(?::[0-9]+)? # Server port number (optional)
(?:[\/|\?]
(?:[\w#!:\.\?\+=&@!$'~*,;\/\(\)\[\]\-]|%[0-9a-f]{2}) # The path (optional)
*)?
$/xi
但是,這並不像那些在國際域名中發現的國際字符工作。例如,http://例え.テスト/メインページ。
使用類似
filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED);
這些不工作,要麼。這個問題與所使用的字符有關。
有沒有一種驗證PHP中的URI的好方法?