1

Тема: Мистика с кодировкой

Приветствую.

Понимаю, темы о кодировке избиты. Но с этой проблемой уже долго мучаюсь.

Дано:

  • БД "base" (кодировка: utf8_general_ci)

  • Таблица "pages" (сравнение: utf8_general_ci)

  • Поле "pages"."cont" (TEXT, utf8_general_ci)

  • Файл "index.php" в utf-8 (без bom)

index.php работает посредством mysqli с БД; посылает запрос вида:

UPDATE pages SET `name` = "article", `cont` = "Русский lang" WHERE name="article" 

(name – PRIMARY KEY, VARCHAR(256))

Позже эта строка забирается из БД и выводится echo. И что я вижу? – Вопросительные знаки вместо «Русский».

Понимаю, что где-то соединение барахлит. Ставлю SET NAMES "utf8" и SET CHARACTER SET "utf8" – то же самое. Пробую эту же запись отредактировать в PMA – все нормально: русские символы сохранились нормально.

Проверил, что же передает форма на сервер POST`ом в моем файле index.php... Все нормально:

mb_detect_encoding($_POST['cont']) == 'UTF-8';

Стока перед передачей отображается в выводе нормально:
echo $_POST['cont'];
– выводит «Русский lang»...

но стоит этому запросу попасть на сервер MySQL от моего index.php – русские символы ломаются. Если тот же запрос отсылает PMA – все отрабатывает на ура.

Прошу помочь решить загадку.

2

Re: Мистика с кодировкой

После функции соединения с MySQL обязательно выполните запрос: SET NAMES utf8. В корне сайта положите .htaccess со строкой:

PHP_VALUE default_charset utf-8

Не подключайте скрипт под root, заведите отдельного пользователя без привилегий из раздела администрирования.

3

Re: Мистика с кодировкой

Спасибо за ответ.

Я решил немного раньше и немного иначе:

mysqli_set_charset($link, 'utf8');

Добавил строку и еще что-то сделал (не помню, ставил метки о uft-8 везде, где только можно; брутфорсил варианты smile

Но я думаю, именно mysqli_set_charset не хватало, хотя днем раньше все работало и без нее при том, что в другие параметры я не вторгался.

Теперь все ок.

Видимо, где-то строке в utf-8 казалось, что она в win-1251 – отсюда и «знаки вопроса».