|
|
|
| Ниже приведен код, позаимствованный из счетчика софттайм. Поисковые фразы яндекса и гугля воспроизводятся нормально, а Рамблера отсутствуют.
Можно ли это исправить?
// Это строчка с реферером - URL страницы, с которой посетитель пришёл на сайт
if(!isset($_SERVER['HTTP_REFERER'])) $_SERVER['HTTP_REFERER'] = "";
$reff = urldecode($_SERVER['HTTP_REFERER']);
// Выясняем принадлежность к поисковым системам
$p_s = 'no';
if(strpos($reff,"yandex")) $p_s = 'yandex';
if(strpos($reff,"rambler")) $p_s = 'rambler';
if(strpos($reff,"google")) $p_s = 'google';
if(strpos($reff,"aport")) $p_s = 'aport';
if(strpos($reff,"mail") && strpos($reff,"search")) $p_s = 'mail';
if(strpos($reff,"msn") && strpos($reff,"results")) $p_s = 'msn';
// Определяем поисковый запрос, по которому пришел посетитель
$p_zapros = "no";
if(!empty($reff) && $p_s != "no")
{
switch($p_s)
{
case 'yandex':
{
preg_match("|text=([^&]+)|is", $reff."&", $out);
if(strpos($reff,"yandpage")!=null)
$p_zapros = convert_cyr_string(urldecode($out[1]),"k","w");
else
$p_zapros = utf8_win($out[1]);
break;
}
case 'rambler':
{
preg_match("|words=([^&]+)|is", $reff."&", $out);
$p_zapros = $out[1];
break;
}
case 'mail':
{
preg_match("|q=([^&]+)|is", $reff."&", $out);
$p_zapros = $out[1];
break;
}
case 'google':
{
preg_match("|[^a]q=([^&]+)|is", $reff."&", $out);
$p_zapros = utf8_win($out[1]);
break;
}
case 'msn':
{
preg_match("|q=([^&]+)|is", $reff."&", $out);
$p_zapros = utf8_win($out[1]);
break;
}
case 'aport':
{
preg_match("|r=([^&]+)|is", $reff."&", $out);
$p_zapros = $out[1];
break;
}
}
$symbols = array("\"", "'", "(", ")", "+", ",", "-");
$p_zapros = str_replace($symbols, " ", $p_zapros);
$p_zapros = trim($p_zapros);
$p_zapros = preg_replace('|[\s]+|',' ',$p_zapros);
$p_zapros = substr ($p_zapros, 0, 98);
// echo "<br> p_s $p_s <br> p_zapros ", $p_zapros, "<br>";
}
|
| |
|
|
|
|
|
|
|
для: Владимир55
(26.03.2009 в 00:03)
| | Так как Рамблер поменял дизаин и ссылки на сайте, то запрос теперь выглядит, как:
http://nova.rambler.ru/search?btnG=Найти!&query=тест
|
Поэтому:
<?php
...
case 'rambler': {
preg_match("|query=([^&]+)|is", $reff."&", $out);
$p_zapros = $out[1];
break;
}
...
?>
|
| |
|
|
|
|
|
|
|
для: mihdan
(26.03.2009 в 11:13)
| | В принципе, ситуация изменилась, Спасибо!
Однако она изменилась как-то странно - в большинстве случаев поисковая фраза все же отсутствует, а иногда она в виде кракозябров типа Р?менР
Как я понимаю, приведенная Вами форма запроса
http://nova.rambler.ru/search?btnG=Найти!&query=тест
| отнюдь не единственная, ибо я обнаружил по крайней мере две других. | |
|
|
|
|
|
|
|
для: Владимир55
(26.03.2009 в 00:03)
| | если хочешь, можешь протестировать мой вариант..
сайт на utf-8. вроде все нормально показывает.
<?
function search_query($A=''){
$A = trim($A);
if(empty($A)) return false; //пустая переменная отправляем false
$words_A = array(// массив из ключевых слов поисковиков
'google.com' => 'q', //google.com
'yandex.ru' => 'text', //yandex.ru
'mail.ru' => 'q', //mail.ru
'rambler.ru' => 'query', //rambler.ru
'yahoo.com' => 'p', //yahoo.com
'ask.com' => 'q', //ask.com
'msn.com' => 'q' //msn.com
);
$ref_host = parse_url($A, PHP_URL_HOST); // хост
foreach($words_A as $host => $k) // с каким поисковиком работаем
if(strripos($ref_host, $host)) break;
$word = $words_A[$host]; // ключевое слово на данный процесс
$query = parse_url($A, PHP_URL_QUERY); // возвращаем QUERY из полного URLa
parse_str($query, $output); // создаем массив из переменных QUERY
$result = trim($output[$word]); // значение по ключевому слову
if('mail.ru' == $host) //исключение для mail.ru
$result = iconv('windows-1251','utf-8',$result);
return empty($result) ? false : $result; //возвращаем результат
}
echo search_query($_SERVER['HTTP_REFERER']);
?>
|
| |
|
|
|
|