如何从http referer分组主机

时间:2018-02-04 03:28:09

标签: php http-referer

如何分组相同名称但不同的tld。

例如google.com,google.co.id,google.co.jp等

我想将google.*全部归为google

这是我从http referer获取主机的代码。

if (isset($_SERVER["HTTP_REFERER"])) {
    $referal = $_SERVER["HTTP_REFERER"];
    $host_referal = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST);
}
else {
    $referal = "Unknown";
}

1 个答案:

答案 0 :(得分:1)

在这里吐痰,我没有考虑任何边缘情况。

代码:(Demo

$referers=['https://google.com','https://www.google.co.id','http://www.google.co.jp'];  // $_SERVER['HTTP_REFERER']
foreach($referers as $referer){
    if(!$referer || !$host=parse_url($referer,PHP_URL_HOST)){  // sometimes $_SERVER['HTTP_REFERER'] is not delivered
        echo "couldn't parse missing/malformed url";
    }else{
        echo preg_match('~(?:https?://)?(?:www\.)?\K[^.]+~',$host,$out)?$out[0]:'';
        echo "\n";
    }
}

输出:

google
google
google

如果出现这种情况,请提供破解输入字符串,以便我可以调整方法。

P.S。事实是,你可能只需要打电话就可以逃脱:

$referal=preg_match('~^(?:https?://)?(?:www\.)?\K[^.]+~',$_SERVER["HTTP_REFERER"],$out)?$out[0]:'Unknown'

但StackOverflow上有很多帖子声明这个值不安全,因此使用parse_url()可以让您更安心。