我网站上的网址会包含国际字符,例如ş
,ğ
,ı
...
在阅读了大量关于网址验证问题的帖子和博客后,我决定支持filter_var($url, FILTER_VALIDATE_URL)
以及其他代码,因为
然后我在PHP validation/regex for URL
结束了这个想法bažmegakapa提供使用
if (preg_match("#^https?://.+#", $link) and @fopen($link,"r")) echo "OK";
查看是否可以打开链接,这意味着它已经过验证。
在此之后我的问题:
问题 - 我喜欢这个想法&在我看来非常棒。但是在看到它只有+7并且该页面有+>> 7个答案之后,我想问一下php大师的想法是什么,他们很乐意回答这个问题,以帮助喜欢像我这样的人;新秀。
bažmegakapa的代码有什么缺点吗?例如,我不知道,但是有没有任何网址,fopen无法打开它,但实际上它是一个无害的,必须验证的网址?那么你发现的弱点的治疗方法是什么呢?
谢谢
最好的问候
答案 0 :(得分:2)
filter_var($url, FILTER_VALIDATE_URL)
认为javascript://test%0Aalert(321)
有效的事实不是弱点。如果您认为是这样,您对filter_var
所针对的期望是错误的。
filter_var($url, FILTER_VALIDATE_URL)
验证针对RFC 2396的网址的语法。
href
元素中a
属性的值是否安全。< / LI>
这并不是要考虑该方案(可能会对超出RFC 2396中所述内容的URL设置限制)。例如,
ftp://foo:bar@baz
是根据RFC 1738, 3.2 FTP http://foo:bar@baz
不是有效的HTTP网址(即使某些浏览器可以解释此类“网址”)。 filter_var
不烘烤蛋糕,也不煮咖啡。如果您需要蛋糕或咖啡,请使用其他东西(RFC 2616, 3.2.2 http URL是一个好的开始)。
根据具体情况,显示指向服务器无法访问的资源的URL可能是一个好主意或一个坏主意。根据具体情况,显示不指向HTTP或HTTPS资源的URL可能是一个好主意或一个坏主意。一种尺寸并不适合所有人。