我有一个用户可以输入URL的字段.我需要检查该网址是否来自某个域,在本例中为google.com.
我试过这个,但它不适用于所有情况(我在下面列出):
if(strstr(parse_url($link,PHP_URL_HOST),'google.com') { // continue }
> http://www.google.com/blah – 工作
> https://www.google.com/blah – 作品
> google.com/blah – 不起作用
> www.google.com/blah – 无效
没有正则表达式有没有办法做到这一点?如果没有,怎么办呢?
谢谢.
parse_url
需要有效的网址且google.com/blah无效(截至
PHP 5.3.3) – 因此无法使用.作为解决方法,您可以附加http(如果尚不存在),然后检查域.
使用以下功能:
function checkRootDomain($url) { if (!preg_match("~^(?:f|ht)tps?://~i",$url)) { $url = "http://" . $url; } $domain = implode('.',array_slice(explode('.',parse_url($url,PHP_URL_HOST)),-2)); if ($domain == 'google.com') { return True; } else { return False; } }
测试用例:
var_dump(checkRootDomain('http://www.google.com/blah')); var_dump(checkRootDomain('https://www.google.com/blah ')); var_dump(checkRootDomain('google.com/blah')); var_dump(checkRootDomain('www.google.com/blah '));
结果:
bool(true) bool(true) bool(true) bool(true)
希望这可以帮助!