@Arbios

Поможете разобраться с кодировкой на сайте?

Добрый вечер! Есть небольшой сайт с базой данных, в базе хранится всего 4 таблицы, да и сам сайт очень легкий и простой.
Сайт был полностью на английском языке, я начал его потихоньку русифицировать, и вот дошел до того, что мне нужно было переименовать существующие разделы с англ. названий на русский. Поначалу если там написано слово "Pizza" я переименовывал в "Пицца" и на выходе получал "?????". Потом я обратился к своему хостеру, там сказали что проблема была в базе и он всё исправил, мол причина не в хостинге. И вот я начал дописывать и другие категории, написал:
"Пицца" - работает
"Фаст фуд" - работает
"Суши и роллы" - [quote]Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (cp1251_general_ci,COERCIBLE) for operation '='' in /home/users2/g/username/domains/example.ru/subsite/controllers/ControllerCategory.php:131 Stack trace: #0 /home/users2/g/username/domains/example.ru/subsite/controllers/ControllerCategory.php(131): PDOStatement->execute(Array) #1 /home/users2/g/username/domains/example.ru/subsite/category_update.php(14): ControllerCategory->getCategoriesByCategory('???????????????...') #2 {main} thrown in /home/users2/g/username/domains/example.ru/subsite/controllers/ControllerCategory.php on line 131[/quote]
Путем долгих мучений выяснил что ошибка вылетает только когда пишешь букву "ш" в нижнем регистре и букву "И" в верхнем.

Ошибка указывает на конфликт кодировок как я понял, но нету там ничего кроме UTF-8, хоть убей.

В свою очередь менял писал всякие set names utf-8, меня всю кодировку базы на utf8_general_ci (также utf8_unicode_ci), в коде php заменял всё на "1251" потому что UTF-8 там и так стоит, в общем перепробовал все способы хоть как то связанные с кодировкой.

Потом решил я установить это дело на денвер, захожу в 127.0.0.1 и вижу полстраницы в �����, ну ладно с кем не бывает, захожу в ПМА, там все нормально, меняю кодировку хрома с UTF-8 на 1251 и о чудо ����� исчезли и всё хорошо, что не скажешь о PhpMyAdmin. Это так для справки.

Пробовал заходить на сайт и с MacMini, то же самое, буква "И" и "ш" вне закона. Боятся что я напишу слово "гашиш"?
Даже незнаю что и делать, может санкции? [i][size=50]сарказм[/size][/i]
  • Вопрос задан
  • 2736 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Arbios Автор вопроса
В денвере в http.conf закомментировал строчку AddDefaultCharset и в денвере по крайней мере всё заработало, но на сервере по прежнему все плохо
Ответ написан
Комментировать
FanatPHP
@FanatPHP
Чебуратор тега РНР
в коде php заменял всё на "1251"

Это самая большая глупость, которую ты только мог сделать.
Особенно при "постепенном" переводе, когда в таблице могут быть данные как на русском, так и на английском.

  1. убеждаешься, что все таблицы имеют чарсет utf8. Посмотреть можно через SHOW CREATE TABLE
  2. в РНР, в настройках работы с БД оставляешь только utf8
  3. после этого работа с БД будет нормальной и простых вопросов не будет (кроме тех данных, которые ты уже загубил). Остается победить вопросы в ромбиках, что совсем просто - из своих скриптов отправляешь заголовок Content-type с кодировкой utf-8


Подробнее: phpfaq.ru/charset
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы