Вопрос по PHP

NL
На сайте с 29.01.2003
Offline
212
948

Может этот вопрос и не в том форуме задаю, но все же хочу попытать счастья.

Ситуация такая: ищем к примеру на MSN`е валенки, допустим, со страницы с результатами поиска к нам есть переход и тогда вот это вот:

http://search.msn.com/results.aspRS=CHECKED&FORM=MSNH&v=1
&q=%D0%B2%D0%B0%D0%BB%D0%B5%D0%BD%D0%BA%D0%B8

получаем у себя в качестве реферрера. Как из этой строки на PHP вытащить наши нормальные валенки?

Все функции из раздела CIV. URL Functions уже перепробовал - не получается ...

Lupus
На сайте с 02.11.2002
Offline
241
#1

Вообще-то есть функция utf8_decode(), но она не всегда помогает.

Как-то встретил я одного монстра: http://airbase.ru/computers/php/utf8_win/

Если немного переделать и нет ничего лучшего, то работать будет.

There are two types of people in this world: 1. Those who can extrapolate from incomplete data.
NL
На сайте с 29.01.2003
Offline
212
#2

utf8_decode не помогла, а этот вот монстр:


function utf8_win($s)
{
$s=str_replace("%D0%B0","а",$s); $s=str_replace("%D0%90","А",$s);
$s=str_replace("%D0%B1","б",$s); $s=str_replace("%D0%91","Б",$s);
$s=str_replace("%D0%B2","в",$s); $s=str_replace("%D0%92","В",$s);
$s=str_replace("%D0%B3","г",$s); $s=str_replace("%D0%93","Г",$s);
$s=str_replace("%D0%B4","д",$s); $s=str_replace("%D0%94","Д",$s);
$s=str_replace("%D0%B5","е",$s); $s=str_replace("%D0%95","Е",$s);
$s=str_replace("%D1%91","ё",$s); $s=str_replace("%D0%81","Ё",$s);
$s=str_replace("%D0%B6","ж",$s); $s=str_replace("%D0%96","Ж",$s);
$s=str_replace("%D0%B7","з",$s); $s=str_replace("%D0%97","З",$s);
$s=str_replace("%D0%B8","и",$s); $s=str_replace("%D0%98","И",$s);
$s=str_replace("%D0%B9","й",$s); $s=str_replace("%D0%99","Й",$s);
$s=str_replace("%D0%BA","к",$s); $s=str_replace("%D0%9A","К",$s);
$s=str_replace("%D0%BB","л",$s); $s=str_replace("%D0%9B","Л",$s);
$s=str_replace("%D0%BC","м",$s); $s=str_replace("%D0%9C","М",$s);
$s=str_replace("%D0%BD","н",$s); $s=str_replace("%D0%9D","Н",$s);
$s=str_replace("%D0%BE","о",$s); $s=str_replace("%D0%9E","О",$s);
$s=str_replace("%D0%BF","п",$s); $s=str_replace("%D0%9F","П",$s);
$s=str_replace("%D1%80","р",$s); $s=str_replace("%D0%A0","Р",$s);
$s=str_replace("%D1%81","с",$s); $s=str_replace("%D0%A1","С",$s);
$s=str_replace("%D1%82","т",$s); $s=str_replace("%D0%A2","Т",$s);
$s=str_replace("%D1%83","у",$s); $s=str_replace("%D0%A3","У",$s);
$s=str_replace("%D1%84","ф",$s); $s=str_replace("%D0%A4","Ф",$s);
$s=str_replace("%D1%85","х",$s); $s=str_replace("%D0%A5","Х",$s);
$s=str_replace("%D1%86","ц",$s); $s=str_replace("%D0%A6","Ц",$s);
$s=str_replace("%D1%87","ч",$s); $s=str_replace("%D0%A7","Ч",$s);
$s=str_replace("%D1%88","ш",$s); $s=str_replace("%D0%A8","Ш",$s);
$s=str_replace("%D1%89","щ",$s); $s=str_replace("%D0%A9","Щ",$s);
$s=str_replace("%D1%8A","ъ",$s); $s=str_replace("%D0%AA","Ъ",$s);
$s=str_replace("%D1%8B","ы",$s); $s=str_replace("%D0%AB","Ы",$s);
$s=str_replace("%D1%8C","ь",$s); $s=str_replace("%D0%AC","Ь",$s);
$s=str_replace("%D1%8D","э",$s); $s=str_replace("%D0%AD","Э",$s);
$s=str_replace("%D1%8E","ю",$s); $s=str_replace("%D0%AE","Ю",$s);
$s=str_replace("%D1%8F","я",$s); $s=str_replace("%D0%AF","Я",$s);
return $s;
}

действительно работает ... а может есть вариант попроще?

Lupus
На сайте с 02.11.2002
Offline
241
#3

Так малость покороче, но все равно далеко от изящества.

Честно говоря, мне сейчас лень рисовать компактную и

изящную функцию.

Думается надо правильно выставить локаль на php, тогда и штатная

функция заработает.

function utf8_win($s)

{

$tbl_utf= array

("%D0%B0","%D0%B1","%D0%B2","%D0%B3","%D0%B4","%D0%B5",

"%D1%91","%D0%B6","%D0%B7","%D0%B8","%D0%B9","%D0%BA",

"%D0%BB","%D0%BC","%D0%BD","%D0%BE","%D0%BF","%D1%80",

"%D1%81","%D1%82","%D1%83","%D1%84","%D1%85","%D1%86",

"%D1%87","%D1%88","%D1%89","%D1%8A","%D1%8B","%D1%8C",

"%D1%8D","%D1%8E","%D1%8F","%D0%90","%D0%91","%D0%92",

"%D0%93","%D0%94","%D0%95","%D0%81","%D0%96","%D0%97",

"%D0%98","%D0%99","%D0%9A","%D0%9B","%D0%9C","%D0%9D",

"%D0%9E","%D0%A0","%D0%A1","%D0%A2","%D0%A3","%D0%A4",

"%D0%A5","%D0%A6","%D0%A7","%D0%A8","%D0%A9","%D0%AA",

"%D0%AB","%D0%AC","%D0%AD","%D0%AE","%D0%AF");

$tbl_win= array(

"а","б","в","г","д","е","ё","ж","з","и","й","к","л","м",

"н","о","п","р","с","т","у","ф","х","ц","ч","ш","щ","ъ",

"ы","ь","э","ю","я","А","Б","В","Г","Д","Е","Ё","Ж","З",

"И","Й","К","Л","М","Н","О","П","Р","С","Т","У","Ф","Х",

"Ц","Ч","Ш","Щ","Ъ","Ы","Ь","Э","Ю","Я");

for ($i=0;$i<count($tbl_utf); $i++)

$s=str_replace($tbl_utf[$i],$tbl_win[$i],$s);

return $s;

}

NL
На сайте с 29.01.2003
Offline
212
#4

Cool!

Она стала меньше в 2 раза!

P.S. Пока выставить локаль на php не представляется возможным...

P.P.S. А еще перед циклом можно вставить

$s=strtoupper($s);

NL
На сайте с 29.01.2003
Offline
212
#5

А вот еще вопрос - что это за кодировка такая, в которой буквы русского афавита кодируются как-то так: %u044C, %u044F?

LM
На сайте с 30.11.2001
Offline
71
LiM
#6

Обычная Unicode это...

В этом форуме я уже кидал скрипт на перле, который такую кодировку переиначивает в "обычные" русские буковки.

Тестировалось на Google, откуда, похоже, и Ваш пример... ;)

С уважением, Андрей Хроленок. Загляни в FAQ по оптимизации и продвижению сайтов (http://www.seoman.ru/FAQ/) Анализатор страниц сайтов (http://www.seoman.ru/analizer/)
NL
На сайте с 29.01.2003
Offline
212
#7

А есть ли на PHP что-нибудь, что конвертит такую строку с Unicode в Win?

LM
На сайте с 30.11.2001
Offline
71
LiM
#8

А с перла перевести на PHP сложно? Там 10 строк кода... Да и языки оба C-подобные.

NL
На сайте с 29.01.2003
Offline
212
#9

Не вопрос! Осталось только скрипт найти - у меня не получилось. Может бросите или сюда или в личку?

C
На сайте с 19.09.2001
Offline
120
#10

NULL, здесь:

С уважением, Владимир Чернышов. (не)?путевые заметки (http://chernyshov.kiev.ua/)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий