[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: регулярки: преобразование 16 ричного кода
kuzroman
Неплохо бы, чтобы скрипт самостоятельно приводил url к удобочитаемому виду: заменял всякие
Цитата
http://www.yandex.ru/yandsearch?text=%E9%EE%E6%FB%E3+%F4%F2%F3%EC%E0%ED%E5&stype=www


на

Цитата
http://www.yandex.ru/yandsearch?text=йожыг+фтумане&stype=www


Собственно код:

$H=getenv("HTTP_REFERER"); // получаем URL, с которого пришёл посетитель 

while (ereg('%([0-9A-F]{2})',$H)){ // пока в строке $H будет хоть одно
//сочетание знака % и двух символов из диапазонов 0-9 и A-F
//(шестнадцатиричные цифры)

$val=ereg_replace('.*%([0-9A-F]{2}).*','\1',$H);
// присваиваем $val результат замены выражения,
//содержащего процент и два символа из означенных выше интервалов,
//на эти самые два символа
// короче говоря, теперь в $val у нас очередные 2 символа,
//перед которыми в исходном выражении стоял процент

$newval=chr(hexdec($val)); // получаем сивол с номером,
//полученным переведением полученного в $val
//шестнадцатиричного числа в "нормальное"

$H=str_replace('%'.$val,$newval,$H);
//стандартная строковая функция замены -
//заменяет подстроку, состоящую из процента и друх символов
//из переменной $var на символ, который эти два
//шестнадцатиричных символа кодировали

}// конец цикла :)

$f=fopen("1/visits.log",'a'); // дальше - понятно, пишем всё это в файл
flock ($f,2);
fwrite($f," Пришёл с: $H\n ");
fclose($f);


Помогите доработать, что то здесь не работает, выводит так:
Цитата
Пришёл с: http://yandex.ru/yandsearch?text=РїРёРєСЃР...азин&lr=213





Спустя 8 минут, 5 секунд (9.03.2011 - 13:02) inpost написал(а):
kuzroman
1. Там urldecode и всё.
2. ereg - уже устарел и работать не будет.

Спустя 32 минуты, 18 секунд (9.03.2011 - 13:35) kuzroman написал(а):
Ну допустим:
$qwe= "ежик в тумане";
echo $zxc= urlencode($qwe) ."<br>" ;
echo urldecode($zxc) ;

Работает.

Тогда может кто подскажет. Яндекс использует какое шифрование русских букв?
ведь если
echo $zxc= urlencode($qwe) 
выводит :
Цитата
  %E5%E6%E8%EA+%E2+%F2%F3%EC%E0%ED%E5

то запрос в яндексе по ключу ежик в тумане выводит в url совсем другое, а именно:
text=%D0%B5%D0%B6%D0%B8%D0%BA+%D0%B2+%D1%82%D1%83%D0%BC%D0%B0%D0%BD%D0%B5&clid=9582

Спустя 11 минут, 3 секунды (9.03.2011 - 13:46) inpost написал(а):
kuzroman
К чему это всё? Я, когда делал скрипт, чтобы получить по какому запросу пришли на мой сайт использовал просто urldecode.

Спустя 12 минут, 41 секунда (9.03.2011 - 13:58) kuzroman написал(а):
Цитата (inpost @ 9.03.2011 - 10:46)
kuzroman
К чему это всё? Я, когда делал скрипт, чтобы получить по какому запросу пришли на мой сайт использовал просто urldecode.

Я все же не пойму.
Запускаю

$H=getenv("HTTP_REFERER"); // получаем URL, с которого пришёл посетитель 

$lola= urldecode($H) ;
$f=fopen("1/visits.log",'a');
flock ($f,2);
fwrite($f," Пришёл с: $lola\n ");
fclose($f);


А приходит например это:
Пришёл с: http://yandex.ru/yandsearch?text=дешевая цена Lumix G 20mm F1.7&clid=9403&lr=213

здесь - дешевая ценР- я так понимаю был русский шрифт. С этим то что делать?

Спустя 29 минут, 36 секунд (9.03.2011 - 14:28) linker написал(а):
Внимание, господа, UTF-8.

Спустя 8 минут, 8 секунд (9.03.2011 - 14:36) kuzroman написал(а):
Цитата (linker @ 9.03.2011 - 11:28)
Внимание, господа, UTF-8.

Блин, может я не в тот раздел задал вопрос, нужно было в раздел для новичков задавать))
Линкер а поподробнее можете объяснить тупому kuzroman'ычу что не так то?

Спустя 26 минут, 42 секунды (9.03.2011 - 15:03) kuzroman написал(а):
Чертовы праздники, башка совсем после них не варит.

Спустя 19 минут, 4 секунды (9.03.2011 - 15:22) linker написал(а):
В Яндексе, строка вида
text=%D0%B5%D0%B6%D0%B8%D0%BA+%D0%B2+%D1%82%D1%83%D0%BC%D0%B0%D0%BD%D0%B5&clid=9582
говорит о том, что там UTF-8, а у тебя скорее всего windows-1251. Поэтому идут не стыковки.

Спустя 13 минут, 11 секунд (9.03.2011 - 15:35) kuzroman написал(а):
Ага, спасибо, ща исправим.

Спустя 18 минут, 6 секунд (9.03.2011 - 15:53) inpost написал(а):
$info['referer_word'] = iconv('cp1251', 'utf-8', urldecode($temp[1]));

Спустя 1 час, 18 минут, 58 секунд (9.03.2011 - 17:12) kuzroman написал(а):
Цитата (inpost @ 9.03.2011 - 12:53)
$info['referer_word'] = iconv('cp1251', 'utf-8', urldecode($temp[1]));

Спасибо за решение.
У меня действительно кодировка cp1251 стоит, а из яндекса приходит utf-8
Соответственно нужно было её заменить:
Так уже читабельно!

$H=getenv("HTTP_REFERER"); 
$bums = iconv('utf-8', 'cp1251', urldecode($H));
$f=fopen("1/visits.log",'a');
flock ($f,2);
fwrite($f," Пришёл с: $bums \n ");
fclose($f);


_____________
kuzroman@list.ru
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.