IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   Apache: AddDefaultCharset (http://www.imho.ws/showthread.php?t=58931)

IVB 17.05.2004 09:54

Apache: AddDefaultCharset
 
Apache/2.0.49 (Win32)

Если в httpd.conf я устанавливаю AddDefaultCharset (неважно, какую именно кодировку я задаю - например, ISO-8859-1) - как сказано в комментариях к этому параметру, это первый шаг к интернационализации сайта - начинаются проблемы с Мозиллой.

Все странички, которые я создаю, естественно, содержат meta с указанием соответствующего charset. Когда я в Мозилле (1.6) запрашиваю информацию о странице (Ctrl+I) - все мета-теги видны, в том числе и тот, который с charset. Но там же, в информации о странице, Мозилла мне говорит, что у страницы кодировка - ISO-8859-1 (т.е. та, которая задана в конфиге Апача как default). И пока я ручками не переключу кодировку отображения - русские буквы отображаются неправильно. IE (5.0) этому не подвержен.

Но те страницы, которые установились с Апачем (стартовая страница, и страницы с документацией) отображаются правильно! Т.е. я чего-то проглядел в настройках самогО Апача. Перерыл весь конфиг - ничего (с моей точки зрения) имеющего к этой проблеме отношения, не нашел.

Сейчас я пока закомментировал AddDefaultCharset (и Мозилла стала понимать тот charset, который задан в meta), но это ведь не решение проблемы!

Подскажите, пожалуйста, где я ошибся в настройках. Наверняка ведь какая-то мелочь. Но когда таких мелочей слишком много (а их всегда много, когда начинаешь что-то изучать с нуля) - трудно все сразу "грокнуть"...

RaZEr 17.05.2004 15:53

Я одного понять не могу, - какие проблемы задать одинаковые default charset и meta-charset?

xse15 18.05.2004 22:38

Сморим доку к апачу:
Цитата:

AddDefaultCharset Directive.
This directive specifies the name of the character set that will be added to any response that does not have any parameter on the content type in the HTTP headers. This will override any character set specified in the body of the document via a META tag. A setting of AddDefaultCharset Off disables this functionality. AddDefaultCharset On enables Apache's internal default charset of iso-8859-1 as required by the directive. You can also specify an alternate charset to be used.
Тоесть установка оной директивы отменяет действие META тегов в документе... старые бровзеры, особенно IE, мягко ложат на стандарты и по этому используют META тэг... более правильные используют кодировки указанные сервером...
Мой совет, если ты имееш доступ к конфигам сервера, или есть возможность использовать .htaccess файлы - вообще не используй META тэги, а кодировку задавай непосредственно в настройках VirtualHost или в .htaccess директивы AddCharset или AddType
я использую в .htaccess строчку
AddType "text/html; charset=windows-1251" .htm .html .shtml
а в cgi печатаю Content-type с нужным чарсетом...

IVB 19.05.2004 08:54

Цитата:

Сообщение от RaZEr
Я одного понять не могу, - какие проблемы задать одинаковые default charset и meta-charset?

Да никаких - на своем сервере.

А если на чужом? Это мне нужно выяснить, как там настроен Апач, и ваять свой сайт в этой кодировке. А если придется переезжать на другой сервак, а там другая кодировка по умолчанию - придется весь сайт перекодировать? Неправильно это, по-моему.

И, тем более, у меня есть наглядный пример страничек, которые правильно отображают свой чарсет, независимо от того, какой чарсет задан в настройках Апача по умолчанию. Вот я и хочу разобраться, как это сделано.

IVB 19.05.2004 09:09

Цитата:

xse15:
added to any response that does not have any parameter on the content type in the HTTP headers
О! Вот оно.
Default Charset добавляется к любому ответу, в HTTP-заголовках которого нет никаких параметров о его content type.
Я правильно перевел цитату?
Если правильно - тогда подскажите, пожалуйста, как еще, кроме мета-тегов, можно задавать кодировку документа.
Цитата:

xse15:
Мой совет, если ты имееш доступ к конфигам сервера, или есть возможность использовать .htaccess файлы - вообще не используй META тэги, а кодировку задавай непосредственно в настройках VirtualHost или в .htaccess директивы AddCharset или AddType
Я надеюсь, что я буду иметь доступ хотябы к .htaccess. Пока что разработка сайта в самом начале - как и изучение HTML и PHP. Поэтому вопрос "где будет размещаться сайт" возникнет не скоро :)
Ну, а если нет доступа ни к .htaccess, ни, тем более, к httpd.conf - как поступать в таком случае? Неужели единственный способ - делать сайт именно в той кодировке, которая задана по умолчанию?

Hubbitus 19.05.2004 13:35

Цитата:

IVB:
Ну, а если нет доступа ни к .htaccess, ни, тем более, к httpd.conf - как поступать в таком случае? Неужели единственный способ - делать сайт именно в той кодировке, которая задана по умолчанию?
Можно из скриптов заголовки слать о типе документа и его кодировке.

xse15 19.05.2004 16:26

Да. Кодировка указанная в AddDefaultCharset вставляется в Content-type любого ответа в котором не указанна кодировка.

По стандарту HTTP 1.1 кодировка выбирается, в случае с апачам, в следующет порядке:
- если нет то берется кодировка установленная с помощью .htaccess
- если нет то из настройки VirtualHost в httpd.conf
- если нет то из DefaultCharset сервера...
- если нет - то нет... пускай бровзер сам разбирается...

А вот кодировка указанная в META тэге - полностью на совести бровзеров. По моему, часть бровзеров META тэг используют только если кодировка не указанна сервером, а другая часть, в основном это старые бровзеры, используют _в любом случае_. В результате полный бардак...

По сему, на кодировку в META тэге надежды возлагать не нужно, там более, что этот метод признан "устаревшим" и скорее всего будет искоретяться...
А хостится нужно там, где есть .htaccess. Благо таких серваков море. А если нет, то на русских шарный серверах в основном кодировка windows-1251, значит на нее и ореентироваться...

IVB 22.05.2004 11:45

Разобрался я с кодировками. Все оказалось до смешного просто.

AddDefaultCharset задает кодировку по умолчанию, которая сообщается сервером браузеру. Мозилла (1.6) это понимает, и считает, что документ именно в этой кодировке, невзирая на meta-теги. А IE (5.0) на это плюет, и пользуется исключительно информацией из meta-тега.

Кроме AddDefaultCharset, есть еще директива AddCharset, которая устанавливает соответствие между расширением имени файла и кодировкой. Т.е. в этой директиве мы можем задать, что все файлы с расширением, например, .ru8, имеют кодировку КОИ8-Р, а с расширением .ru12 - windows-1251. И тогда Апач, передавая браузеру страницы с соответствующими расширениями, будет сообщать, какую кодировку имеют эти страницы (точно так же, как он сообщал о кодировке по умолчанию). И браузеры ведут себя соответственно - Мозилла показывает нужную кодировку (даже если она не задана мета-тегом), а ИЕ плюет на это и пользуется только мета-тегом.

Вывод:

AddCharset ставит в соответствие кодировку файлов их расширениям, и это соответствие отменяет действие ключа charset= в мета-теге (только для новых браузеров).

AddDefaultCharset задает кодировку тех файлов, расширение которых не совпадает ни с одним из расширений, заданных в директивах AddCharset. Это также отменяет действие ключа charset= в мета-теге (тоже только для новых браузеров).

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


Часовой пояс GMT +4, время: 21:02.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.