2010-08-06 63 views
0

我想过滤来自搜索引擎访问者的HTTP_REFERER。我想忽略存储来自搜索引擎的访问者的HTTP_REFERER信息。你能帮忙用PHP脚本吗?PHP:搜索字符串中的巧合

我有这个,但不正确的脚本:

<? 
$exp_list = array('google', 'yahoo'); 

// exapmple of one HTTP_REFERER link from the Goggle search engine 
$link = 'http://www.google.com/search?hl=ru&source=hp&q=bigazart&aq=f&aqi=&aql=&oq=&gs_rfai='; 

for ($j = 0; $j < sizeof($exp_list); $j++){ 

if(!eregi($exp_list[$j], $link)){ 

// storing link to mysql... 

break; 

} 

} 
?> 
+0

你知道,有许多二级域名,如google.ch,google.lt。谷歌等。这就是为什么我需要检测链接中的字符串“谷歌”,这应该是足够的。然后,只需在数组中搜索,如果找到匹配,则以其他方式忽略 - 存储在数据库中。任何例子? ;-) – ilnur777 2010-08-06 17:28:41

回答

1

尝试是这样的:

if (isset($_SERVER['HTTP_REFERER'])) { 
    $host = strtolower(parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST)); 
    $exp_list = array('google', 'yahoo'); 
    $pattern = '/^(?:www\.)?(?:'.implode('|', array_map('preg_quote', $exp_list)).')\./' 
    if (preg_match($pattern, $host)) { 
     // match found 
    } 
} 

重要的事情:

  • 检查是否$_SERVER['HTTP_REFERER']存在与否
  • 使用parse_url到ge牛逼从URL中的主机只搜索有
  • 测试,如果条件由点

包围但是,这仍然会错误地标识类似www.google.example.com主机。所以你可能也想指定顶级/二级域名。

0

您应该可以自定义以下模式以匹配更多域。

<?php 

$ignore_hosts = array(
    '/^www.google.com$/', 
    '/^www.yahoo.com$/' 
    ); 

$host = parse_url($_SERVER['HTTP_REFERRER'], PHP_URL_HOST); 

$ignore = FALSE; 
foreach ($ignore_hosts as $pattern) { 
    if (preg_match($pattern, $host) == 0){ 
     $ignore = TRUE; 
     break; 
    } 
} 

if (! $ignore) 
    echo "Here you should store the referrer.";