Как расшифровать русские буквы HTTP_REFERER с гугля

bubblegum

Новичок
Как расшифровать русские буквы HTTP_REFERER с гугля

У кого-то есть опыт анализа запросов с гугля, то есть конкретно русскими буквами? Рефереры с яндекса и рамблера нормально расшифровываются простым urldecode,
а с гугля (и наверно других нерусских поисковиков тоже) ну ни в какую
Перепробовал разные комбинации urldecode, convert_cyr_string, iconv
Кто такое делал, подскажите пжл, если не жалко )

в поиске уже был ) "HTTP_REFERER+русск*"
 

God

Новичок
Сначала urldecode, а потом полученную строку из UTF8 в нужную кодировку.
 

MadGreen

meninweb
с яндекса периодически приходят запросы тоже в разных кодировках...
 

WP

^_^
PHP:
 function register_referer()
 {
  // yandex, google, msn, mail, aport, rambler, yahoo, km, altavista
  if (!is_empty($ref = gpcvar_str($_SERVER['HTTP_REFERER'])))
  {
   $uri = parse_url($ref);
   $host = isset($uri['host'])?$uri['host']:'';
   parse_str($a = gpcvar_str($uri['query']),$query);
   if ($host == 'www.yandex.ru') {$search_query = gpcvar_str($query['text']);}
   elseif (preg_match('~^www\.google\.~',$host) or preg_match('~search\..*?\.msn.com~',$host) or $host == 'www.altavista.com') {$search_query = utf8_win1251(gpcvar_str($query['q']));}
   elseif ($host == 'sm.aport.ru') {$search_query = gpcvar_str($query['r']);}
   elseif ($host == 'go.mail.ru') {$search_query = gpcvar_str($query['q']);}
   elseif ($host == 'www.rambler.ru') {$search_query = gpcvar_str($query['words']);}
   elseif ($host == 'go.km.ru') {$search_query = gpcvar_str($query['sq']);}
   elseif ($host == 'search.yahoo.com') {$search_query = utf8_win1251(gpcvar_str($query['p']));}
   else {$search_query = '';}
   $this->sql->insert(SQL_TBLPREFIX.'webstat_referers',array(
    'url'			=> array($ref,FIELDTYPE_CHAR,256),
    'host'			=> array($host,FIELDTYPE_CHAR,50),
    'search_query'	=> array($search_query,FIELDTYPE_CHAR,50)
   ));
  }
 }
utf8_win1251 можно найти в факе.

-~{}~ 16.08.06 15:39:

bubblegum
Про urldecode забудь, выкинь бяку. Нужно ПРАВИЛЬНО делать, так как я сделал функцию выше. Примет параметры в любом порядке, если не в UTF-8 тоже все будет ок.
 

WP

^_^
[offtopic]
moxnatiy
Ничего гениального, обычная.
HEm
Я использую gpcvar_(str|int|float|array) для импортирования внешний переменных, в подлинности которых я не могу быть уверен, например я бы мог расчитывать получить в $query['p'] строку, а какой-нибудь злой дядя передал бы массив, и функция strtr в utf_win1251 блеванула бы нотисом. Проверять каждый раз (isset($query['p'])?strval($query['p']:'') очень геморрно, т.е. требует писать много букав, да и читабельность снижается.
А gpcvar_str точно вернет строку, если переменная не существует - пустую строку (без нотиса). Плюс gpcvar_int('1q') вернет не 1 а 0, что является в общем случае более правильным, хотя intval('1q') вернет 1.
[/offtopic]
 

bubblegum

Новичок
function register_referer() {...}
Вот этот код встречал когда рыскал по теме


Что за функция gpcvar_str ? Не найду ни в поиске ни в мануале, подкиньте ссылочек плз. И даже если в природе такая есть, как ее заюзать на хостинге? Я уже опробовал, вываливает еррор
 

WP

^_^
bubblegum
> Вот этот код встречал когда рыскал по теме
Угу, не первый раз привожу его.
> Что за функция gpcvar_str ?
Могу и эти фукнции привести.
> Не найду ни в поиске ни в мануале, подкиньте ссылочек плз.
=))
PHP:
function gpcvar_str(&$var) {return strval($var);}
function gpcvar_int(&$var,$empty = FALSE)
{
 if ($empty and strlen($var) == 0) {return '';}
 if (strval(intval($var)) != $var) {return 0;}
 return intval($var);
}
function gpcvar_float(&$var,$empty = FALSE) {if ($empty and strlen($var) == 0) {return '';} return floatval($var);}
function gpcvar_array(&$var) {return is_array($var)?$var:array();}
function gpcvar_mixed(&$var) {return $var;}
 
Сверху