Проблема с кодировкой (ANSI vs. UTF-8)

NS
На сайте с 02.06.2008
Offline
11
2327

Есть у меня каталожек на двух разных сайтах и хостингах.

С недавнего времени в одном из них (Majordomo) данные в кириллице стали отображаться на санскрите, вот так:

Золотые рецепты РЅР°С?РёС… читателей

Хотя в другом каталоге (RBK) все нормально.

В процесе формирования и отображения каталога в обоих случаях участвую идентичные файлы:

файл.sql — содержит выгрузку SQL; (ANSI)

загрузчик.php — закидывает SQL-файл на сервер и записывает из него данные в условную таблицу условной БД; (ANSI)

каталог.php — файл каталога, выводящий данные из условной БД; (ANSI)

При этом база в кодировке utf8_general_ci, т.е. PHP-файлы в ANSI кодировке и выводят данные из базы с кодировкой UTF-8 на обоих серверах.

Шаг первый: слил сайты с хоста на свой localhost.

На локале залил SQL-данные через bigdump-скрипт, записал в локальную БД.

Результат тот же, т.е. проблема не в хостинге.

Шаг второй: сравнил таблицы в БД.

Между собой таблицы, из которых заполняется каталог, отличаются количеством столбцов — в перевом (рабочем) каталоге 6 столбцов, во втором (глючном) — 3 столбца. Вот так они выглядят в phpMyAdmin:

Рабочая таблица:

Глючная таблица:

Кривой вывод касается столбца 'name' — здесь находятся кириллические значения.

Данные в таблицу импортируются из SQL-файла, в кодировке ANSI.

SQL для первой таблицы:

DROP TABLE IF EXISTS `stroy_m`;

CREATE TABLE `stroy_m` (
`id` varchar(10) collate utf8_unicode_ci default NULL,
`parent_id` varchar(10) collate utf8_unicode_ci default NULL,
`name` varchar(100) collate utf8_unicode_ci default NULL,
`groupe` varchar(10) collate utf8_unicode_ci default NULL,
`price` varchar(10) collate utf8_unicode_ci default NULL,
`ye` varchar(10) collate utf8_unicode_ci default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
REPLACE INTO `stroy_m` VALUES ('p08588','','- Керамика','Истина','','');
REPLACE INTO `stroy_m` VALUES ('14433','p08588','Керамическая плитка " Нефрит"','Истина','','');
REPLACE INTO `stroy_m` VALUES ('p08687','14433','Керамическая плитка г.Киров','Истина','','');
И так далее...

SQL для второй таблицы:

DROP TABLE IF EXISTS `pc_base`;

CREATE TABLE `pc_base` (
`id` varchar(10) collate utf8_unicode_ci default NULL,
`name` varchar(100) collate utf8_unicode_ci default NULL,
`kol` varchar(10) collate utf8_unicode_ci default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
REPLACE INTO `pc_base` VALUES ('04260','Золотые рецепты наших читателей','0');
REPLACE INTO `pc_base` VALUES ('04262','Оракул спец. Зеркало','0');
REPLACE INTO `pc_base` VALUES ('04263','Лиза Style','0');
И так далее...

После обработки выходит такая вот мура:

Конечная таблица на исправном сайте:

Конечная таблица на глючном сайте:

Думаю, дело в конфликте кодировок и загрузчике.php.

Шаг третий: сравнил код загрузчиков.

Код, отвечающий за загрузку, и там, и там — идентичен, кроме дизайна и параметров подключения к базе (хост/база/юзер/пас)

Ломаю голову пол дня и не могу понять в чем причина ошибки кодировки. Раньше все работало на ура и с первым и со вторым сайтом. Вроде бы никаких фундаментальных изменений не делал...

Как избавиться от косяка с кодировкой?

yougene
На сайте с 03.06.2009
Offline
6
#1
Nik Shinkareff:

Результат тот же, т.е. проблема не в хостинге.

значит сами файлы баз в разных кодировках. может это поможет?

waiting gor the day that never comes

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий