Задавайте вопросы, мы ответим
Вы не зашли.
Уже 3тий день воюю с кодировками в базе, замучался окончательно.
Сначала был проблема только с выводом букв ш и и теперь выявились еще косяки.
Теперь по порядку:
Сам скрипт осуществляет вывод страниц в кодировке UTF-8:
Код:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
При инсталяции скрипт загружает дамп БД с такими параметрами:
Код:
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";;
ALTER DATABASE DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;;
под каждой таблицей в дампе:
Код:
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=%%__CONTESTS_INC__%% ;;
Все, отлично скрипт установили, теперь направляемся в БД через phpmyadmin, там спрашиваем:
Код:
SHOW VARIABLES LIKE 'character_set%';
Получаем ответ:
Код:
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server cp1251
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/
В переводе я понимаю так:
character_set_client — указывает, в какой кодировке будут поступать данные от клиента;
character_set_connection — указывает, в какую кодировку следует преобразовать данные полученые от клиента перед выполнением запроса;
collation_connection — указывает, каким образом сравнивать между собой строки в запросах;
character_set_results — указывает серверу не необходимость перекодировать результаты запроса в определенную кодировку перед выдачей их клиенту.
Пока вроде все замечательно - скрипт должен записывать данные в БД в UTF-8, забирать данные так же в UTF-8, и выводить на свои страницы которые так же в UTF-8 !!
Теперь начинается самое интересное.
Идем в админку скрипта, меняем например заголовок страницы с Main на "Главная", сохраняем, идем в БД , а там:
Код:
Главная
Как так ?? Откуда взялась кодировка cp1251 или что это вообще??
Дальше еще интереснее. Меняем в ручную в базе заголовк на "Главная", сохраняем, теперь в базе все ок! Идем на главную страницу скрипта а там:
Код:
�������
я вообще ничего не понимаю.
Регистрируемся, получаем письмо на почту (смотрим кодировку шаблона письма в скрипте - UTF-8)! В письме есть инклуд меню сайта, соответтвенно при формировании письма скрипт берет данные из базы. Меню скрипта так же содержится в базе и так же изменяется из админки, меняем пунк меню из админки с "Home" на "Главная", в базе получаем все теже Сервис , но в письме этот пункт меню уже выглядит так:
Код:
ÐлавнаÑ
- что за фигня Откуда взялась еще кодировка какая то.. Что касается по скрипту, то классы подключения к БД не нашел, искал по файлам скрипта по запросам: "SET NAMES", так же искал слова "cp1251" "windows-1251" (думал он где нибуд перегоняте как-то) - ничего не нашел. По запросу mysql_connect намека на кодировки нет.
И это все еще дополняет кривые буквы Ш и и. ВОт так.
Прошу помочь дабы не сойти с ума : )
Так же любопытно что в скрипте было указано изначально в коде:
Код:
if( $title && $mainframe->cfg->use_multi_lang ) $title = preg_replace('/[^\040-\377]*/uis', '', $title);
С такой настройкой русские заголовки не выводились вообще, в другой теме подсказали что для utf нужно прописать так:
Код:
('/[^\040-\377]*/ui', '', $title);
Так тоже не выводились!
Стали выводиться когда прописал вариант для cp1251:
Код:
preg_replace('/[^\040-\377]*/i', '', $title);
Тоже для меня не понятно ! Откуда и где завуалирована кодировка cp1251.
Неактивен
В скрипте сразу после подключения нужно выполнить mysql_query("SET NAMES UTF8");
cp1251 может быть кодировкой соединения по умолчанию и тогда, хотя таблица и utf, mysql ждет от клиента запросы в cp1251. Такая настройка у многих хостеров.
Неактивен
А как выполнить mysql_query("SET NAMES UTF8"); в скрипте ?
Или это выполнить через phpmyadmin ??
Неактивен
Надо эту команду выполнить в скрипте после вызова функции mysql_connect();
Неактивен