![]() |
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), но это ведь не решение проблемы! Подскажите, пожалуйста, где я ошибся в настройках. Наверняка ведь какая-то мелочь. Но когда таких мелочей слишком много (а их всегда много, когда начинаешь что-то изучать с нуля) - трудно все сразу "грокнуть"... |
Я одного понять не могу, - какие проблемы задать одинаковые default charset и meta-charset?
|
Сморим доку к апачу:
Цитата:
Мой совет, если ты имееш доступ к конфигам сервера, или есть возможность использовать .htaccess файлы - вообще не используй META тэги, а кодировку задавай непосредственно в настройках VirtualHost или в .htaccess директивы AddCharset или AddType я использую в .htaccess строчку AddType "text/html; charset=windows-1251" .htm .html .shtml а в cgi печатаю Content-type с нужным чарсетом... |
Цитата:
А если на чужом? Это мне нужно выяснить, как там настроен Апач, и ваять свой сайт в этой кодировке. А если придется переезжать на другой сервак, а там другая кодировка по умолчанию - придется весь сайт перекодировать? Неправильно это, по-моему. И, тем более, у меня есть наглядный пример страничек, которые правильно отображают свой чарсет, независимо от того, какой чарсет задан в настройках Апача по умолчанию. Вот я и хочу разобраться, как это сделано. |
Цитата:
Default Charset добавляется к любому ответу, в HTTP-заголовках которого нет никаких параметров о его content type. Я правильно перевел цитату? Если правильно - тогда подскажите, пожалуйста, как еще, кроме мета-тегов, можно задавать кодировку документа. Цитата:
Ну, а если нет доступа ни к .htaccess, ни, тем более, к httpd.conf - как поступать в таком случае? Неужели единственный способ - делать сайт именно в той кодировке, которая задана по умолчанию? |
Цитата:
|
Да. Кодировка указанная в AddDefaultCharset вставляется в Content-type любого ответа в котором не указанна кодировка.
По стандарту HTTP 1.1 кодировка выбирается, в случае с апачам, в следующет порядке: - если нет то берется кодировка установленная с помощью .htaccess - если нет то из настройки VirtualHost в httpd.conf - если нет то из DefaultCharset сервера... - если нет - то нет... пускай бровзер сам разбирается... А вот кодировка указанная в META тэге - полностью на совести бровзеров. По моему, часть бровзеров META тэг используют только если кодировка не указанна сервером, а другая часть, в основном это старые бровзеры, используют _в любом случае_. В результате полный бардак... По сему, на кодировку в META тэге надежды возлагать не нужно, там более, что этот метод признан "устаревшим" и скорее всего будет искоретяться... А хостится нужно там, где есть .htaccess. Благо таких серваков море. А если нет, то на русских шарный серверах в основном кодировка windows-1251, значит на нее и ореентироваться... |
Разобрался я с кодировками. Все оказалось до смешного просто.
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.