Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.187.103] |
|
Сообщ.
#1
,
|
|
|
делаю поисковую форму: формирую строку адреса для поискового сервера и fopen(адрес).
Затем полученные данные записываю на диск. НО!!! Полученный код не содержит символов кирилицы! Объясню на примере: Пусть например я сформировал такую строку адреса: Цитата http://search.yahoo.com/search?va=drive&vs=www.el-drive.com.ua&vl=lang_ru Если зайти на такую ссылку, то получу результирующую форму, сформированную сервером Яху. Обратите внимание результат поиска содержит кучу русскоязычного текста. Но когда я эту результат работы fopen сохраняю на себе диск - то символы кирилицы: ПЧ и все другие - теряются... Почему??? Может я неправильно заставил работать fopen??? Вот часть кода: $strSearch ='http://search.yahoo.com/search?va=drive&vs=www.el-drive.com.ua&vl=lang_ru'; $screen = file($strSearch); $fp = fopen('mySearch.htm',"w"); for ($j=1; $j<sizeof($screen); $j++) { fwrite ( $fp, $screen[$j] ); } // for $i fclose( $fp ); Хэлп, плиз. Можно было бы сказать, что я не ввожу некоторых языковых параметров для Yahoo, но ведь заход по обычному URL-у выполняет поиск и содержит все символы кирилицы... Пример работы скрипта можно увидеть по адресу: http://www.el-drive.com.ua/myG.php?q=drive Добавлено в : Кое чего разобрался... Кажись от Yahoo идёт ответ в юникоде... Т.е. русские символы моим скриптом некорректно обрабатываются... а как преобразовать юникодовские символы в win1251? |
Сообщ.
#2
,
|
|
|
Или ещё попробуй
fopen($url, 'wb'); $sock=fsockopen(.....); .............................................. puts($sock, "Accept-Charset: windows-1251\n"); .............................................. |
Сообщ.
#3
,
|
|
|
Tishaishii, ты не смотри, что у меня "Профи" и 5 квадратиков. Я в Visual С вроде разбираюсь неплохо, потому, плиз объясни, что это у тебя за шутка такая?
|
Сообщ.
#4
,
|
|
|
Есть функция convert_cyr_string(). Попробуй так:
$strSearch ='http://search.yahoo.com/search?va=drive&vs=www.el-drive.com.ua&vl=lang_ru'; $screen = file_get_contents($strSearch); $screen = convert_cyr_string($screen, 'UTF-8', 'WINDOWS-1251'); $fp = fopen('mySearch.htm', 'w'); fwrite($fp, $screen); fclose($fp); ЗЫ: "штука" читает файл через сокет, сообщив серверу, чтоб выдавал в WINDOWS-1251. |
Сообщ.
#5
,
|
|
|
Пытлася юзать convert_cyr_string(). Получил ворнинг:
Warning: convert_cyr_string() [function.convert-cyr-string]: Unknown source charset: U in w:\home\el-drive.localhost\www\myg.php on line 16 ща пробую первый вариант Цитата ЗЫ: "штука" читает файл через сокет, сообщив серверу, чтоб выдавал в WINDOWS-1251 То я говорил о том приколе, который перед твоим редактированием был... |
Сообщ.
#6
,
|
|
|
Это очень хорошо.
Аннотация функции fsockopen: int fsockopen ( string hostname, int port [, int errno [, string errstr [, float timeout]]]) http://www.php.net Открывает сокет с заданными параметрами (hostname, port, ...), возвращает файловый идентификатор типа int. $host='search.rambler.ru'; $document='/srch?words=fsockopen&where=1'; $charset='windows-1251'; if(!($sock=fsockopen($host, 80)))#Открываю соединение с search.rambler.ru:80 { echo 'Ошибка'; exit(); } fputs($sock, "GET $document HTTP/1.0\n");#Стандартный HTTP-запрос типа "GET" fputs($sock, "Host: $host\n");#К какому хосту передать запрос fputs($sock, "Accept-Charset: $charset\n");#Предпочтительная кодировка fputs($sock, "\n");#Заканчиваю говорить я, слушаю что скажет он. while(!feof($sock))echo fgets($sock, 0x400);#Получаю 1 кб. документа fclose($sock);#Закрываю соединение А в первом случае я предлогал добавить в fopen к флагу 'w' флаг 'b'. w - запись b - бинарный файл |
Сообщ.
#7
,
|
|
|
convert_cyr_string() не знает UTF-8, т.к. он знает только русские кодировки.
Плюсик Тишайшему поставь сам |
Сообщ.
#8
,
|
|
|
А что так?
Прошло времяВот это да.... |
Сообщ.
#9
,
|
|
|
Благодаря Тишайшему и Романычу получилось: результат таков:
$strSearch ='http://search.yahoo.com/search?va=drive&vs=www.el-drive.com.ua'; $sock=fsockopen("66.218.71.233",80); fputs($sock, "GET /search?_adv_prop=web&x=op&ei=UTF-8&prev_vm=p&va=drive&va_vt=any&vp=&vp_vt=any&vo=&vo_vt=any&ve=&ve_vt=any&vd=all&vst=on&vs=www.el-drive.com.ua&vf=all&vm=i&vc=&fl=0&n=20 HTTP/1.1\r\n"); fputs($sock, "Host: search.yahoo.com\r\n"); fputs($sock, "Accept-Charset: utf-8\r\n\r\n"); $screen = ''; while (!feof($sock)) { $screen .= fgets($sock, 128); } fclose($sock); $parts = split("\r\n\r\n", $screen, 2); $screen = $parts[1]; В результета работы скрипта $screen содержит полученный от Яху ответ разбитый на строки. Романыч, кинь сюда пост, я тебе за него плюсик сделаю. |
Сообщ.
#10
,
|
|
|
А вот и я Весь фокус был в Accept-Charstet. Пока не поставил его в utf-8, то всё работало криво, а с ним всё уладилось.
|
Сообщ.
#11
,
|
|
|
Прошло время. Вот это дааа...
|
Сообщ.
#12
,
|
|
|
Tishaishii, это ты или твои боты удивляются???
|
Сообщ.
#13
,
|
|
|
M Господа, давайте прекращать оффтопик |