MikhailK
Новичок
Плавающая ошибка с кодировкой (сайт на PHP/SMARTY/MySQL)
Сайт на PHP/SMARTY/MySQL. Шаблоны SMARTY выполнены в windows-1251. При отдаче сайта хеадер с чарсетом windows-1251 из PHP отсылается:
header('Content-Type: text/html; charset=windows-1251;');
В HTML-коде метатег с windows-1251 прописан:
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
Через шаблоны показываются данные из базы. База в cp1251_general_ci и таблица в cp1251_general_ci. После установки соединения отрабатывается сет нэймс:
mysql_query("SET NAMES 'cp1251'");
Когда проверяешь сайт снаружи, то видно что сервер отдает его в windows-1251. Нигде в коде данные из базы не модифицируются, фактически выводятся напрямую. Ошибка проявляется нерегулярно и выражается в том, что периодически данные из базы вылазят в UTF-8. Русские слова, которые прошиты в шаблоне, остаются русскими. Баг видели вроде как в FireFox 3.5 (сам, к сожалению, воспроизвести ошибку не могу, но источнику можно верить). Причем даже на одном и том же компьютере/браузере ошибка то есть, то нет. Баг видели на нескольких компьютерах, т.е., это не проблема конкретного кривого клиента.
Версии ПО на сервере (для справки, изменить и что-либо переставить нельзя)
PHP 5.2.3
MySQL 5.1.19
FreeBSD
PS. Аварийный выход у меня есть - в методе, который таскает данные из БД, поставить проверку получаемых данных и перекодировать их на лету, но это уж очень как-то по военному. Хотелось бы найти причину.
PPS. Сайт целиком на UTF-8 перевести не получится.
PPPS. Тему "Если у вас MySQL 4.x/5.x и ЛЮБЫЕ ПРОБЛЕМЫ С РУССКИМ - ЧИТАТЬ ЭТО!", естественно прочел, но своего случая не нашел.
Сайт на PHP/SMARTY/MySQL. Шаблоны SMARTY выполнены в windows-1251. При отдаче сайта хеадер с чарсетом windows-1251 из PHP отсылается:
header('Content-Type: text/html; charset=windows-1251;');
В HTML-коде метатег с windows-1251 прописан:
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
Через шаблоны показываются данные из базы. База в cp1251_general_ci и таблица в cp1251_general_ci. После установки соединения отрабатывается сет нэймс:
mysql_query("SET NAMES 'cp1251'");
Когда проверяешь сайт снаружи, то видно что сервер отдает его в windows-1251. Нигде в коде данные из базы не модифицируются, фактически выводятся напрямую. Ошибка проявляется нерегулярно и выражается в том, что периодически данные из базы вылазят в UTF-8. Русские слова, которые прошиты в шаблоне, остаются русскими. Баг видели вроде как в FireFox 3.5 (сам, к сожалению, воспроизвести ошибку не могу, но источнику можно верить). Причем даже на одном и том же компьютере/браузере ошибка то есть, то нет. Баг видели на нескольких компьютерах, т.е., это не проблема конкретного кривого клиента.
Версии ПО на сервере (для справки, изменить и что-либо переставить нельзя)
PHP 5.2.3
MySQL 5.1.19
FreeBSD
PS. Аварийный выход у меня есть - в методе, который таскает данные из БД, поставить проверку получаемых данных и перекодировать их на лету, но это уж очень как-то по военному. Хотелось бы найти причину.
PPS. Сайт целиком на UTF-8 перевести не получится.
PPPS. Тему "Если у вас MySQL 4.x/5.x и ЛЮБЫЕ ПРОБЛЕМЫ С РУССКИМ - ЧИТАТЬ ЭТО!", естественно прочел, но своего случая не нашел.