Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2008, 18:44   #1
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию Анси и Юникод в строках....

Доброго времени суток, уважаемые. Нуждаюсь в вашей помощи...
Проблема такая: пишу счётчик со статистикой, и застопорился в определении поисковых слов от Яндекса (определяю по рефереру)
например... задаёшь поиск в Яндексе "кофеварка" (не обращайте внимания, первое, что пришло в голову )... реферер получается примерно таким:
http://yandex.ru/yandsearch?text=%D0...80%D0%BA%D0%B0

далее по коду я отделяю ненужное, перекодирую, и выдаю на экран (в теории - заношу в базу)... выдаёт следующее:
кофеварки

перекодировать пытался через
PHP код:
convert_cyr_string("$query","w","k"); 
пытался с разными доступными параметрами - и всеравно выдаёт "крякозябры"...без перекодировки не лучше.
Выяснил, что это кодировка АНСИ... в блокноте перекодирую в UTF-8 (он же юникод) - становится читабольно...

вобщем подскажите, как ансю перекодировать в юникод либо в вин-1251
(если можно, то в асю 305224880, нахожусь в инвизе, но посты читаю)
3аранее благодарен.
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 03.10.2008, 19:15   #2
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Вопрос снимаю. Помогла вот такая фунция:
PHP код:
function utf8_win($s)
{
    
$s=str_replace("\xD0\xB0","а",$s);  $s=str_replace("\xD0\x90","А",$s);
    
$s=str_replace("\xD0\xB1","б",$s);  $s=str_replace("\xD0\x91","Б",$s);
    
$s=str_replace("\xD0\xB2","в",$s);  $s=str_replace("\xD0\x92","В",$s);
    
$s=str_replace("\xD0\xB3","г",$s);  $s=str_replace("\xD0\x93","Г",$s);
    
$s=str_replace("\xD0\xB4","д",$s);  $s=str_replace("\xD0\x94","Д",$s);
    
$s=str_replace("\xD0\xB5","е",$s);  $s=str_replace("\xD0\x95","Е",$s);
    
$s=str_replace("\xD1\x91","ё",$s);  $s=str_replace("\xD0\x81","Ё",$s);
    
$s=str_replace("\xD0\xB6","ж",$s);  $s=str_replace("\xD0\x96","Ж",$s);
    
$s=str_replace("\xD0\xB7","з",$s);  $s=str_replace("\xD0\x97","З",$s);
    
$s=str_replace("\xD0\xB8","и",$s);  $s=str_replace("\xD0\x98","И",$s);
    
$s=str_replace("\xD0\xB9","й",$s);  $s=str_replace("\xD0\x99","Й",$s);
    
$s=str_replace("\xD0\xBA","к",$s);  $s=str_replace("\xD0\x9A","К",$s);
    
$s=str_replace("\xD0\xBB","л",$s);  $s=str_replace("\xD0\x9B","Л",$s);
    
$s=str_replace("\xD0\xBC","м",$s);  $s=str_replace("\xD0\x9C","М",$s);
    
$s=str_replace("\xD0\xBD","н",$s);  $s=str_replace("\xD0\x9D","Н",$s);
    
$s=str_replace("\xD0\xBE","о",$s);  $s=str_replace("\xD0\x9E","О",$s);
    
$s=str_replace("\xD0\xBF","п",$s);  $s=str_replace("\xD0\x9F","П",$s);
    
$s=str_replace("\xD1\x80","р",$s);  $s=str_replace("\xD0\xA0","Р",$s);
    
$s=str_replace("\xD1\x81","с",$s);  $s=str_replace("\xD0\xA1","С",$s);
    
$s=str_replace("\xD1\x82","т",$s);  $s=str_replace("\xD0\xA2","Т",$s);
    
$s=str_replace("\xD1\x83","у",$s);  $s=str_replace("\xD0\xA3","У",$s);
    
$s=str_replace("\xD1\x84","ф",$s);  $s=str_replace("\xD0\xA4","Ф",$s);
    
$s=str_replace("\xD1\x85","х",$s);  $s=str_replace("\xD0\xA5","Х",$s);
    
$s=str_replace("\xD1\x86","ц",$s);  $s=str_replace("\xD0\xA6","Ц",$s);
    
$s=str_replace("\xD1\x87","ч",$s);  $s=str_replace("\xD0\xA7","Ч",$s);
    
$s=str_replace("\xD1\x88","ш",$s);  $s=str_replace("\xD0\xA8","Ш",$s);
    
$s=str_replace("\xD1\x89","щ",$s);  $s=str_replace("\xD0\xA9","Щ",$s);
    
$s=str_replace("\xD1\x8A","ъ",$s);  $s=str_replace("\xD0\xAA","Ъ",$s);
    
$s=str_replace("\xD1\x8B","ы",$s);  $s=str_replace("\xD0\xAB","Ы",$s);
    
$s=str_replace("\xD1\x8C","ь",$s);  $s=str_replace("\xD0\xAC","Ь",$s);
    
$s=str_replace("\xD1\x8D","э",$s);  $s=str_replace("\xD0\xAD","Э",$s);
    
$s=str_replace("\xD1\x8E","ю",$s);  $s=str_replace("\xD0\xAE","Ю",$s);
    
$s=str_replace("\xD1\x8F","я",$s);  $s=str_replace("\xD0\xAF","Я",$s);
    return 
$s;

"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 03.10.2008, 19:25   #3
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

Сложноватая функция, получается цикл в 66 итераций независимо от длины запроса, нужно сделать цикл зависимым от длины слова, т.е. в кофеварке должно быть 9 итераций.
Alar вне форума Ответить с цитированием
Старый 03.10.2008, 20:27   #4
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

И как ты это предлагаешь сделать, не пройдя все буквы? если сделать слишком сложную функцию, то овчинка выделки не стоит - скрипт будет компилиться дольше чем с этим... можно конечно брать слово по символам, сравнивать и только тогда заменять, но это слишком большой геморой... я считаю, что с поисковиков не очень часто заходят, а эта функция заходит только в случае реферера, скажем, яндекса, и только в случае наличия в реферере слова "yandsearch"... да и в любом случае сайт у меня очень "лёгкий" счет на миллисекунды даже рядом не идёт...
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 03.10.2008, 20:57   #5
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

Я писал обратную функцию на Delphi брал букву и заменял ее на подобный код.
Код:
For i:=1 to length(str) do
Цитата:
я считаю, что с поисковиков не очень часто заходят
Не правильно считаешь, для информационного ресурса большая часть заходов из поисковиков.

Пример и для сайта без текстов есть - посмотри, сколько людей ищут одноклассников

http://wordstat.yandex.ru/advq?rpt=p...F1%E5&regions=

Они не могут запомнить юрл сайта, понятия не имеют, что такое закладки и переходят на сайт одноклассников через поисковик.

P.S> подпись измените.
Alar вне форума Ответить с цитированием
Старый 03.10.2008, 21:22   #6
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Эм... немного не понял... зачем вызывать функцию несколько раз? я вызываю её только один раз при каждом определении слова:
Код:
$quer = utf8_win($query[1]);
,
где $query[1] - это вся проверяемая строка. получается что строка один раз попадает в функцию, там по очреди в ней заменяются все символы и функция возвращает её.... интерация, как вы выразились, одна... просто в самой функции реплэйс тормозной несколько раз вызывается...

PS> извиняюсь, а чем Вас не устраивает моя подпись? прямых нецензурных слов, оскорблений, рекламы и процих "запрещенностей" в ней не присутствует, причем подпись относится только к людям, настроенным ко мне враждебно, следовательно - это ответ на любые выпады в мою сторону, и, опять же, следовательно - акт самообороны.
во выдал....
а вобще, это первый случай за 6 лет, когда меня просили удалить ссылку и цензурный текст из подписи)

PPS> извиняюсь ещё раз, но если найдутся обьективные причины - то уберу (не примите за дерзость и оскорбление), так как эта ссылка прямо не относится ни к одному из пользователей форума.
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 03.10.2008, 21:42   #7
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

$s=str_replace("\xD1\x86","ц",$s); - вот таких вот 66 штук на вызов одной функции.
function utf8_win($s)

Будем считать, что запросы длинные и другая форма записи не даст нам выигрыша.


P.S>А если бы ваша подпись выводила на порно сайт с этим самым нарисованным?

Подпись используется для рекламы своих сайтов, реффсылки скоро будет запрещены в правилах.
Alar вне форума Ответить с цитированием
Старый 03.10.2008, 22:20   #8
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Цитата:
Сообщение от Alar Посмотреть сообщение
Будем считать, что запросы длинные и другая форма записи не даст нам выигрыша.
ну я про это и говорил... овчинка выделки не стоит...

Цитата:
P.S>А если бы ваша подпись выводила на порно сайт с этим самым нарисованным?
А зачем мне чужой порно-сайт рекламировать? К тому же,

Цитата:
Подпись используется для рекламы своих сайтов
, значит, по Вашим словам, ссылка на данный ресурс (с изображением того самого) моего изготовления будет законна

Я уже упомянал, что текст подписи не призывает пользователей, которые относятся ко мне лояльно переходить по данной ссылке. Кстати говоря, данная дисскуссия ведёт к увеличению переходов по данной ссылке. Давайте закроем данное обсуждение.

Цитата:
реффсылки скоро будет запрещены в правилах.
если честно после своей речи я перечитал правила форума... очень короткие и понятные правила, в которых ни одного слова не упомянается о подписях

PS: для запрещения ссылок в подписях надо изменить всего одну настройку в админке форума...

PPS: не могли бы Вы ответить на вопрос в следующей теме: http://programmersforum.ru/showthread.php?t=27129 , либо написать в ICQ 305224880 для обсуждения этого вопроса? Не думаю, что это займёт много времени
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}

Последний раз редактировалось Johnson; 03.10.2008 в 22:27.
Johnson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[TVirtualStringTree] юникод в имени узлом iLya84a Компоненты Delphi 3 08.08.2008 11:33
Проблемы с кодировками Анси и Юникод HunterMan Win Api 4 31.05.2008 00:41
Юникод для Delphi netuser Общие вопросы Delphi 1 20.12.2007 02:43
юникод в ANSI techner Общие вопросы Delphi 6 12.12.2007 20:40
Автонумерация при скрытых строках. DiVinyl Microsoft Office Excel 1 17.03.2007 18:02