Проблема с версткой шаблона и кодировкой

Начал верстать шаблон для LiveStreet и столкнулся с проблемой отображения русского языка, например в title ссылок, символами ������. Уже описанные на сайте решения проблем с кодировкой не помогают. Не понятным для меня является и то, что местами русский выводится нормально, а местами такими кракозяблами. Исходные данные проблемы и тех.информация для желающих помочь под катом.

ОС: Win XP SP3
Редактор: Dreamweaver CS3, добавление BOM отключено.
LiveStreet: 0.3.1, без дополнительных модулей.
Сборка сервера: VertrigoServ 2.21
Компоненты:
Apache 2.0.63
PHP 5.2.6
MySQL 5.0.51b
Smarty 2.6.19
PhpMyAdmin 2.11.7
ZendOptimizer 3.3.3
Все настройки по умолчанию, mbstring установлен.
MySQL-кодировка: UTF-8 Unicode (utf8)
Сопоставление соединения с MySQL: utf8_general_ci
Тип базы данных: InnoDB
Сравнение: utf8_general_ci

Проверял так же на последнем Denwer, с предварительной установкой mbstring и настройкой my.ini на работу с UTF-8, проблема та же.

Т.к. впервые имею дело со Smarty для основы я взял шаблон developer. В моем шаблоне другая структура вывода блоков, и просто редактированием файла стилей не обойтись. Проблема вылезла сразу, стоило из header_top.tpl вынести форму логина и профиль юзера в header_nav.tpl, файл header.tpl не редактировался, стили только начал писать. Код измененного header_top.tpl, из которого и вылазят кракозяблы (вопросики):

<div class="header container">
	<a class="leftcol logo" href="{$DIR_WEB_ROOT}" title="На главную страницу"></a>
	
	
	<ul class="nav-main centralcol">
		<li {if $sMenuHeadItemSelect=='blog'}class="active"{/if}><a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_BLOG}/">{$aLang.blogs} Русский текст</a></li>
		<li {if $sMenuHeadItemSelect=='people'}class="active"{/if}><a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_PEOPLE}/">{$aLang.people}</a></li>
		<li {if $sAction=='page' and $sEvent=='about'}class="active"{/if}><a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_PAGE}/about/">{$aLang.page_about}</a></li>
	</ul>
    <div class="search rightcol">
		<form action="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_SEARCH}/topics/" method="post">
			<input class="text" type="text" onblur="if (!value) value=defaultValue" onclick="if (value==defaultValue) value=''" value="{$aLang.search}" name="q" />
			<input class="button" type="submit" value="{$aLang.search}" />
		</form>
	</div>
</div>


Кракозяблы вылазят в не зависимости от того, куда в этом файле добавить русский текст, в данном примере в тайтле ссылки на главнюю и в, добавленном для примера, тексте к ссылке на «Блоги» верхнего меню. При этом, если редактировать, к примеру, footer.tpl — русский текст в нем отображается нормально. Если просто добавить русский текст в header_top.tpl в установленном шаблоне developer, больше ничего не меняя то же все ОК.

Уже «убил» 2 дня, но до сих пор не понимаю каким образом появляется ср-1251, вместо указанной везде UTF-8. Единственное из известно мне, что не смог сделать так это прописать дополнительные директивы в .htaccess написанные в этом комментарии, т.к. после их добавлений вылетает 500-ая ошибка. Остается надежда только на вашу помощь.

P.S. Публикую в личном блоге, если проблема будет решена перенесу в «Решения проблем», если, конечно, останется такая возможность после этого топика ;)

18 комментариев

avatar
В настройках Apach`a какая кодировка дефолтная? (httpd.conf)
avatar
Не нашел в конфиге строчки: AddDefaultCharset
Я правильно ищю?

Не ожидал такого быстрого ответа, спасибо.
avatar
Добавьте
AddDefaultCharset utf-8
и рестартаните сервер.
avatar
Добавил, не помогло.
avatar
Проверял так же на последнем Denwer, с предварительной установкой mbstring и настройкой my.ini на работу с UTF-8, проблема та же.
Редактор: Dreamweaver CS3, добавление BOM отключено.

Попробуйте другой редактор.
  • Mmka
  • +1
avatar
Отредактировал в AkelPad 4, не помогло.
Сомневаюсь, что дело в редакторе. Не один сайт в нем редактировался и все было ОК, да и footer.tpl я в нем же и редактировал и русский нормально отображался.
avatar
Сомневаюсь, что дело в редакторе. Не один сайт в нем редактировался и все было ОК, да и footer.tpl я в нем же и редактировал и русский нормально отображался.
Кэш включен? Что за браузер?
avatar
При обновлении страницы кеш сбрасываю. Наблюдается проблема в ИЕ 7-8, Опера 9.64, ФФ 3.5.1. В других пока не проверял, т.к. не критично.
avatar
А кэширование включено?

Попробуйте для начала сделать все просто: запускаете денвер, устанавливаете чистый лс 0.3.1, скачиваете notepad++, редактируете файл и сохраняете в utf-8 без сигнатуры, и собссно смотрите. Так все точно должно работать. Прям мистика какая-то.
avatar
Кеширование в движке отключено.

За 2 дня пару раз даже Denwer переустанавливал в добавок к вышеперечисленному. Правда вместо notepad++ пользуюсь Dreamweaver, но и в нем по мимо отключенного ВОМ еще и «Форму приведения к Unicode» изменял.

Да и в место Denwer, я обычно запускаю все в Vertrigo, продукте не русском и по умолчанию там никакими ср-1251 и прочим недоразумением не пахнет.
avatar
> templates/language/russian.php
avatar
Лаконично, я бы сказал.

Файл присутствует, если изменять в нем, то с русским все ОК.
Вы предлагаете все текстовки добавлять в него?
Может это и позволит избежать проблемы, но ведь решит ее.
avatar
Да, это избавит от всех проблем.
И да, это не будет нарушать архитектурную логику LiveStreet (ort как бе намекает).
avatar
Тогда нубский вопрос: Не скажется ли на общей производительности то, что этот файл будет в разы больше существующего и то, что обращений к нему (вызовов $aLang.) то же будет сильно больше?
avatar
Нет.
avatar
Тогда, если этот глюк у меня больше нигде не вылезет это действительно решение. Спасибо.

P.S. С переносом в тематический блог пока подожду, вдруг источник глюка будет найден.
avatar
Чтение файлов и вывод переменных не критично для работоспособности приложения. По крайней мере по сравнению с ожиданием ответов базы данных.
avatar
Спасибо за развернутый ответ. Оказывается я сильно заблуждался в этом вопросе, к счастью, он для меня никогда не был профильным :)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.