我的网址将有国际字符,如ş
, ğ
, ı
…
filter_var($url, FILTER_VALIDATE_URL)
,因为
- 如果url有int。字符,url无法验证
- http://www.d-mueller.de/blog/why-url-validation-with-filter_var-might-not-be-a-good-idea/由bažmegakapa回复+7.
,然后我总结了这个想法在PHP验证/regex URL
bažmegakapa提供使用
if (preg_match("#^https?://.+#", $link) and @fopen($link,"r")) echo "OK";
查看链接是否可以打开,则表示该链接已通过验证。
在这之后我的问题:
问题-我喜欢这个主意&在我看来,这很精彩。但是在看到它只有+7而那个页面有+>>7个答案之后,我想问一下php大师的想法是什么,他们会很乐意回答这个问题来帮助像我这样的人;新秀。
bažmegakapa的代码有什么弱点吗?例如,我不知道但是否存在fopen无法打开的url但实际上是无害的,必须经过验证的url?那么,如何解决你发现的弱点呢?
谢谢
事实上,filter_var($url, FILTER_VALIDATE_URL)
认为javascript://test%0Aalert(321)
有效并不是一个弱点。如果你认为它是,你对filter_var
的期望是错误的。
filter_var($url, FILTER_VALIDATE_URL)
根据RFC 2396验证URL的语法。
-
不是用来判断URL所指向的资源是否可访问。
-
当URL由用户提供时,它并不意味着确定在HTML文档的
a
元素中使用URL作为href
属性的值是否安全。 -
这并不意味着要考虑该方案(它可能会对超出RFC 2396中描述的url进行限制)。例如while
-
ftp://foo:bar@baz
是根据RFC 1738, 3.2 FTP, 的有效FTP URL。 -
http://foo:bar@baz
是不是一个有效的HTTP URL根据RFC 2616, 3.2.2 HTTP URL(即使一些浏览器可以解释这样的"URLs")。
-
filter_var
既不烤蛋糕,也不煮咖啡。如果您需要蛋糕或咖啡,请使用其他东西(RFC 2324是一个很好的开始)。
根据具体情况,显示指向服务器无法访问的资源的URL可能是一个好主意,也可能是一个坏主意。根据具体情况,显示不指向HTTP或HTTPS资源的URL可能是一个好主意,也可能是一个坏主意。一种尺寸不适合所有人