Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Почему в http-заголовках ответа нет кодировки html-файла? / 4 сообщений из 4, страница 1 из 1
20.10.2014, 13:01
    #38781724
Почему в http-заголовках ответа нет кодировки html-файла?
Добрый день.
Задача такова: из PHP-скрипта отправить web-серверу запрос на загрузку определённого html-файла, а затем из заголовков присланного ответа выделить кодировку этого файла.

Код думается примерно такой:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
$url = "http://Path/file.html";

//Ф-я parse_url() разбивает URL на составляющие scheme, host, port, path, и возвращает массив из них. Ф-я extract() формирует из массива переменные с такими именами.
extract(parse_url($url));

if($scheme!='http')
{
   echo "В адресе страницы не указан протокол HTTP";
   exit;
}
if(!isset($port)) //Порт не указан
   $port = '80'; //Использовать порт 80 - традиционный для сервера www.
//Проверка, устанавливается ли соединение с сервером. Если да, то будем использовать установленное соединение $fp и дальше.
if(!($fp=@fsockopen($host, 80, &$errno, &$errstr)))
{
   echo "Ошибка открытия адреса $url $errstr (ERRNO=$errno)<br>";
   exit;
}

$req = "GET $url HTTP/1.0\n"."User-Agent: PHP/5\n"."Host: $host:$port\n"."Accept: */*\n\n";

fwrite($fp, $req);

//Выводим все заголовки ответа...
while(!feof($fp))
{
   $str = fgets($fp, 4096);
   echo $str, "<br>";
   if(!trim($str)) break; //Наткнулись на "\n\n", отделяющий блок заголовков ответа от содержимого html-файла
}

//...и пока ограничиваемся этим, т.к. тут и начинается проблема.



А проблема в том, что присланный блок заголовков ответа выглядит примерно так:
Код: html
1.
2.
3.
4.
5.
6.
7.
HTTP/1.1 200 OK 
Date: Mon, 20 Oct 2014 08:14:45 GMT 
Server: Apache/2.2.23 (Unix) 
Accept-Ranges: bytes 
Content-Length: 626 
Connection: close 
Content-Type: text/html 



И в нём нет ни слова о кодировке файла. А должна она, как я понимаю, быть в заголовке Content-Type, как в примере вот отсюда - http://job-interview.ru/articles/post/86
Вот этот пример:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Отправили запрос:

GET / HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.8) Gecko/2009032600 SUSE/3.0.8-1.1.1 Firefox/3.0.8
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

Получили ответ:

HTTP/1.x 200 OK
Date: Tue, 21 Jul 2009 17:09:54 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT
Etag: "b80f4-1b6-80bfd280"
Accept-Ranges: bytes
Content-Length: 438
Connection: close
Content-Type: text/html; charset=UTF-8 
...
Рейтинг: 0 / 0
20.10.2014, 13:26
    #38781759
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему в http-заголовках ответа нет кодировки html-файла?
Летучий ЗмейИ в нём нет ни слова о кодировке файла. А должна она, как я понимаю, быть в заголовке Content-TypeЭто необязательный заголовок.
Кодировка еще может быть указана внутри HTML-ответа или не указана вовсе.
...
Рейтинг: 0 / 0
20.10.2014, 13:28
    #38781762
Почему в http-заголовках ответа нет кодировки html-файла?
А известно, при каких условиях она указывается хоть где-нибудь в ответе?
...
Рейтинг: 0 / 0
20.10.2014, 13:31
    #38781772
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему в http-заголовках ответа нет кодировки html-файла?
Летучий ЗмейА известно, при каких условиях она указывается хоть где-нибудь в ответе?На усмотрение веб-сервера.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Почему в http-заголовках ответа нет кодировки html-файла? / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]