PHP: поиск совпадений в строке - PullRequest
0 голосов
/ 06 августа 2010

Я хотел бы отфильтровать 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;

}

}
?>

Ответы [ 2 ]

1 голос
/ 06 августа 2010

Попробуйте что-то вроде этого:

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 голосов
/ 06 августа 2010

Вы должны иметь возможность настроить шаблоны ниже, чтобы соответствовать больше доменов.

<?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.";
...