如何从 http referer 对主机进行分组
How to group host from http referer
如何对相同名称但不同的顶级域名进行分组。
例如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";
}
只是在这里吐槽,我没有考虑任何边缘情况。
代码:(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'
但是 Whosebug 上有许多帖子指出此值不安全,因此使用 parse_url()
可以让您更加安心。
如何对相同名称但不同的顶级域名进行分组。
例如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";
}
只是在这里吐槽,我没有考虑任何边缘情况。
代码:(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'
但是 Whosebug 上有许多帖子指出此值不安全,因此使用 parse_url()
可以让您更加安心。