Мерцающий глюк кодировки Apache2

 
+
-
edit
 

Balancer

администратор
★★★★☆
Чую, без помощи общественности не разобраться.

Есть Apache 2.0.48 на Linux RH 7.3

Дефолтовая кодировка - WINDOWS-1251, стоит давно и стояла безглючно.

С недавних пор часть одного из сайтов с помощью .htaccess переведена в UTF-8.

С тех самых пор все остальные "виндовые" (1251) части того сайта и другие виртуальные хосты, уже целиком под 1251, стали в ответе сервера c вероятностью ~14..21% выдавать Content-Type: text/html; charset=utf-8 (при том, что сами страницы, естественно, в windows-1251 и поэтому всё лезет кракозябрами и иероглифами), а оставшиеся 79..85% - как и положено Content-Type: text/html; charset=windows-1251

Не важно, на PHP страницы, на Perl или это голый HTML.

На той части, что в UTF-8 - всё без нареканий, всегда UTF-8.

Легко убедиться в воспроизводимости глюка задав раз 10, скажем,

wget -S --spider "http://gorod-spal.ru"

Кто-нибудь в курсе, что это за баг и как с ним бороться? (Переводить всё на UTF-8 не предлагать, т.к. не все пользователи осилят работу с ним на FTP - есть и весьма малоподготволенные).
 
+
-
edit
 

Balancer

администратор
★★★★☆
Апдейт Апача на только что вышедший 2.0.49 не помог.

Вот же, блин... :-/

Чую, придётся покупать второй IP и вешать на него отдельный экземпляр Апача...
 
+
-
edit
 

davinchi

втянувшийся

админ. бан

Лично я использую в apache2.0.49 модуль mod_charset_lite (http://httpd.apache.org/docs-2.0/mod/mod_charset_lite.html), а в виртуале <VirtualHost > указываю нужную мне кодировку (AddDefaultCharset utf-8)</VirtualHost>. Пока это работает, так как мне и нужно, хотя по дефолту на apache2 AddDefaultCharset WINDOWS-1257, каждому виртуалу могу задавать нужную дефолтную кодировку.
Мы рождены, чтоб сказку сделать былью  
Это сообщение редактировалось 30.03.2004 в 13:10
+
-
edit
 

Balancer

администратор
★★★★☆
Это оказался баг, судя по всему, связки PHP+Apache. Хотя делал ошибку сам Апач (на голых HTML-страницах вирт. сайтов с явно указанной кодировкой), но генерилась она через PHP.

Точно не понял, но, кажется, фишка в том, что если в .htaccess прописано явно
php_value default_charset "utf-8"
то в момент обращения к соответствующим файлам, PHP прописывает временно кодировку глобально, на весь сервер. Если параллельно идёт запрос и другого файла, он будет отдан тоже с пометкой, что кодировка - utf-8.

В общем, вылечил я это дело уборкой соответствующего параметра из .htaccess и включением перевода PHP-скрипта в utf-8 в явном виде в каждом php-файле, слава Богу их не много.

code php
  1. <?
  2. header('Content-Type: text/html; charset=utf-8');
  3. header('Content-Language: ru');
  4.  
  5. ini_set('default_charset','utf-8');
  6. ini_set('mbstring.func_overload','7');
  7. setlocale(LC_ALL, "ru_RU.utf8");
  8. ?>
 
31.03.2004 20:38, Татарин: +1: Раскопал. :)


в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru