PHP:搜索字符串中的重合点

问题描述 投票:0回答:2

我想过滤访问者从搜索引擎访问我的网站的 HTTP_REFERER。我想忽略为来自搜索引擎的访问者存储 HTTP_REFERER 信息。您能帮忙编写 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;

}

}
?>
php string sizeof blacklist referrerurl
2个回答
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
    从 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.";
© www.soinside.com 2019 - 2024. All rights reserved.