imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 17.05.2004, 09:54     # 1
IVB
Junior Member
 
Регистрация: 16.04.2003
Адрес: Severodonetsk, Ukraine
Сообщения: 54

IVB Путь к славе только начался
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), но это ведь не решение проблемы!

Подскажите, пожалуйста, где я ошибся в настройках. Наверняка ведь какая-то мелочь. Но когда таких мелочей слишком много (а их всегда много, когда начинаешь что-то изучать с нуля) - трудно все сразу "грокнуть"...
IVB вне форума  
Старый 17.05.2004, 15:53     # 2
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
Я одного понять не могу, - какие проблемы задать одинаковые default charset и meta-charset?
RaZEr вне форума  
Старый 18.05.2004, 22:38     # 3
xse15
Junior Member
 
Регистрация: 16.03.2003
Адрес: 192.168.177.15
Сообщения: 78

xse15 Путь к славе только начался
Сморим доку к апачу:
Цитата:
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 с нужным чарсетом...
xse15 вне форума  
Старый 19.05.2004, 08:54     # 4
IVB
Junior Member
 
Регистрация: 16.04.2003
Адрес: Severodonetsk, Ukraine
Сообщения: 54

IVB Путь к славе только начался
Цитата:
Сообщение от RaZEr
Я одного понять не могу, - какие проблемы задать одинаковые default charset и meta-charset?
Да никаких - на своем сервере.

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

И, тем более, у меня есть наглядный пример страничек, которые правильно отображают свой чарсет, независимо от того, какой чарсет задан в настройках Апача по умолчанию. Вот я и хочу разобраться, как это сделано.
IVB вне форума  
Старый 19.05.2004, 09:09     # 5
IVB
Junior Member
 
Регистрация: 16.04.2003
Адрес: Severodonetsk, Ukraine
Сообщения: 54

IVB Путь к славе только начался
Цитата:
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 - как поступать в таком случае? Неужели единственный способ - делать сайт именно в той кодировке, которая задана по умолчанию?
IVB вне форума  
Старый 19.05.2004, 13:35     # 6
Hubbitus
мод
IMHO Кодер-200(6,7,8)
 
Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734

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

Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru
Pahan-Hubbitus.
Hubbitus вне форума  
Старый 19.05.2004, 16:26     # 7
xse15
Junior Member
 
Регистрация: 16.03.2003
Адрес: 192.168.177.15
Сообщения: 78

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

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

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

По сему, на кодировку в META тэге надежды возлагать не нужно, там более, что этот метод признан "устаревшим" и скорее всего будет искоретяться...
А хостится нужно там, где есть .htaccess. Благо таких серваков море. А если нет, то на русских шарный серверах в основном кодировка windows-1251, значит на нее и ореентироваться...
xse15 вне форума  
Старый 22.05.2004, 11:45     # 8
IVB
Junior Member
 
Регистрация: 16.04.2003
Адрес: Severodonetsk, Ukraine
Сообщения: 54

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

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

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

Вывод:

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

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

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


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


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




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