Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Кодировка
 
 автор: webpics   (26.05.2007 в 20:13)   письмо автору
 
 

Беру через сокеты содержимое файла.
Вот скрипт:
$path= "http://www.roszdravnadzor.ru/medcontrol/estimate/ind?year=2007";
$arr = parse_url($path);
$host = $arr[host];
$page = $arr[path];
$query = $arr[query];
if($query!=''){$page.='?'.$query;}
if($page==''){$page='/';}
$fp = @fsockopen($host, 80, &$errno, &$errstr, 30);
if(!$fp){ return implode('',@file($path)); }
$request = "GET $page HTTP/1.0\r\n";
$request .= "Host: $host\r\n";
$request .= "Accept: text/html, application/xml;q=0.9, */*;q=0.1\r\n";
$request .= "Accept-Charset: windows-1251, utf-8;q=0.6, *;q=0.1\r\n";
$request .= "Accept-Encoding: deflate, gzip, identity, *;q=0\r\n";
$request .= "Accept-Language: ru\r\n";
$request .= "Connection: close\r\n";
$request .= "Keep-Alive: 300\r\n";
$request .= "Expires: Thu, 01 Jan 1970 00:00:01 GMT\r\n";
$request .= "Cache-Control: no-store, no-cache, must-revalidate\r\n";
$request .= "Pragma: no-cache\r\n";
$request .= "Cookie: income=1\r\n";
$request .= "Referer: http://$host/\r\n";
$request .= "User-Agent: Mozilla/5.0 (compatible; MSIE 6.0; Windows 98)\r\n";
$request .= "\r\n";
fwrite ($fp,$request);
while ($line = fgets($fp, 1024)){
if (preg_match("~^\r{0,1}\n$~i",$line)){$fest='yes';}
elseif($fest=='yes'){$out .= $line;}
}
echo $out;

В ответ файл выводит что-то вроде ќl§ЫлБC°Ёе+ЂтM;ВЛ:ќo .ѓЧ~;zнЭОюAыpxGышш µлд "оtаЎ=ё юrЉXчv ( только длиннее). А так хотелось бы по русски...

$tt=iconv('utf-8', 'windows-1251', $text); echo $tt; - не помогает.

$text = convert_cyr_string($out, 'w','k'); -тоже не помогает.

Кто-нибудь знает как с этим бороться?

   
 
 автор: kasmanaft   (26.05.2007 в 20:22)   письмо автору
 
   для: webpics   (26.05.2007 в 20:13)
 

Уберите строку

$request .= "Accept-Encoding: deflate, gzip, identity, *;q=0\r\n";

   
 
 автор: webpics   (26.05.2007 в 20:47)   письмо автору
 
   для: kasmanaft   (26.05.2007 в 20:22)
 

что-то не помогает.
Везде это работает , а на сайте http://www.roszdravnadzor.ru/medcontrol/estimate/ind?year=2007 какой-то барабашка.

   
 
 автор: Trianon   (26.05.2007 в 22:11)   письмо автору
 
   для: webpics   (26.05.2007 в 20:13)
 

А заголовок как выглядит?

   
 
 автор: webpics   (26.05.2007 в 22:51)   письмо автору
 
   для: Trianon   (26.05.2007 в 22:11)
 

Date: Sat, 26 May 2007 18:51:12 GMT Server: Apache/1.3.33 (Debian GNU/Linux) mod_ssl/2.8.22 OpenSSL/0.9.7e mod_perl/1.29 PHP/4.3.10-18 Last-Modified: Sat, 26 May 2007 18:51:12 GMT Cache-Control: max-age=0 X-Powered-By: Zanas/6.09.22 Content-Length: 100612 Content-Type: text/html; charset=windows-1251 X-Cache: MISS from www.roszdravnadzor.ru Connection: close

   
 
 автор: kasmanaft   (27.05.2007 в 08:06)   письмо автору
 
   для: webpics   (26.05.2007 в 22:51)
 

Это наверное после того, как Вы убрали строку.. Если убрали, то кодировку менять уже не надо, текст приходит в windows-1251.
А если строку не убрали, текст придет запакованный gzip. Который нужно распаковать (кодировка тут тоже не причем)

   
 
 автор: Trianon   (27.05.2007 в 14:22)   письмо автору
 
   для: kasmanaft   (27.05.2007 в 08:06)
 

Заголовок всяко передается несжатым.

   
 
 автор: webpics   (27.05.2007 в 19:27)   письмо автору
 
   для: Trianon   (27.05.2007 в 14:22)
 

кстати, http://www.roszdravnadzor.ru/medcontrol/estimate/ind?year=2007 и http://www.roszdravnadzor.ru/medcontrol/estimate/ind/fignya.asp?year=2007 как и http://www.roszdravnadzor.ru/medcontrol/estimate/ind/gadost.php?year=2007 работают одинаково. Может это всё-таки барабашка на сервере медиков?

   
 
 автор: webpics   (27.05.2007 в 21:04)   письмо автору
 
   для: Trianon   (27.05.2007 в 14:22)
 

или не барабашка?

   
 
 автор: webpics   (27.05.2007 в 19:22)   письмо автору
 
   для: kasmanaft   (27.05.2007 в 08:06)
 

Убрал строку, так текст вообще не пришёл.
Пишет "Невозможно отобразить страницу".
Вот ссылка со строкой http://webpics.phoenixrising-web.com/farm/y2.php
и без строки http://webpics.phoenixrising-web.com/farm/y.php
Можете посмотреть лично.

   
 
 автор: kasmanaft   (27.05.2007 в 21:15)   письмо автору
 
   для: webpics   (27.05.2007 в 19:22)
 

Ну не знаю.. копирую Ваш код (между словами "Вот скрипт: ~~~ В ответ файл....."), убираю ту строчку, о которой писал - все нормально открывается - работает.
Вместе с этой строчкой текст приходит сжатый, о чем говорит "Content-Encoding: gzip".
Работает на других сайтах потому что там нет поддержки gzip, сжать ничего они не могут. А так бы и там не работало (могу привести неск. ссылок, где работать тоже не будет).

> /estimate/ind?year=2007
> /estimate/ind/fignya.asp?year=2007
> /estimate/ind/gadost.php?year=2007
Это, наверное, заслуга mod_rewrite. Барабашки тут тоже нет :)

   
 
 автор: webpics   (27.05.2007 в 21:59)   письмо автору
 
   для: kasmanaft   (27.05.2007 в 21:15)
 

хорошо, спасибо!
это кажется мой сервер выпендривается!
когда я убрал из этого кода и злополучную строку и цикл,
поместив вместо цикла
$out = fgets($fp, 1024);
echo $out;
то мой сервер всё сразу нашёл и даже выдал первую строку ответа от медиков HTTP/1.1 200 OK

но если он не любит длинные и несжатые данные, то может есть способ разархивировать эти сжатые данные?
Заранее благодарю.

   
 
 автор: kasmanaft   (27.05.2007 в 22:42)   письмо автору
 
   для: webpics   (27.05.2007 в 21:59)
 

> может есть способ разархивировать эти сжатые данные?
Должон быть по определению :)
Этим должна заниматься функция gzinflate, но ей что-то не нравится. Вот, но немного не то получилось, что должно было:

$out = gzinflate(substr($out, 10, -8));

   
 
 автор: webpics   (28.05.2007 в 19:11)   письмо автору
 
   для: kasmanaft   (27.05.2007 в 22:42)
 

Благодарю тебя "KASMANAFT" =)) Ты лучший!!!
Наконец- то и у меня всё заработало (с твоей помощью!)
Спасибо!

   
 
 автор: kasmanaft   (28.05.2007 в 20:05)   письмо автору
 
   для: webpics   (28.05.2007 в 19:11)
 

А я перед тем, как пост отправить, проверил как оно работать будет - так там немного смазаный результат получился... под конец.
Хотел уже на землю опускать, мол "рано радовацца", перепроверил - уже все работает. Барабашка блин, а я не верил :))

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования