[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: utf-8 и буквы ш и И
hellspirit
Танцы с бубном надоели.
Попытаюсь описать проблему как можно понятней.
Значит была база данных и туда пользователями потихоньку заносились данные. И писалось все в cp1251. Сам движок и его страницы были в ansi.
И все это хорошо работало до того момента когда потребовалось внедрить jquery - и подгружать и сохранять некоторые формы асинхронно. JQuery, как выяснилось, не дружит ни с чем кроме как c utf-8. И пошел процесс перекодировки страничек. Все, хорошо - странички в utf-8. В метах прописан utf-8 и браузер это прекрасно понимает. НО! MySql тоже надо сконвертить! Как? Очень просто - дамп средствами phpMyAdmin, изменение кодировки дампа на utf-8 средствами NotePad++ и обратный процесс загрузки дампа. Вот и данные стали по русски и в utf-8... за исключением некоторых букв - И,Э,ш...

Погуглив проблему понял, что средство одно: провести замену кода битых символов так как у mysql кодировка этих символов отличается.
Классический пример решения из интернета:

UPDATE `tbl` SET `pole` = REPLACE(
`pole`,
CONCAT( CHAR(209), CHAR(63) ),
CONCAT( CHAR(209), CHAR(136) )
);


UPDATE `tbl` SET `pole` = REPLACE(
`pole`,
CONCAT( CHAR(208), CHAR(63) ),
CONCAT( CHAR(208), CHAR(152) )
);



Это действительно решает проблему, но дело в том что у меня и новые записи уже после конвертации пишутся касячно. Помогайте! Голова взорвалась, мозг ушел от меня :( :blink: :(



Спустя 13 минут, 16 секунд (13.03.2012 - 18:05) inpost написал(а):
Опиши, как ты кодировку прописал UTF-8?

Спустя 10 минут, 5 секунд (13.03.2012 - 18:15) hellspirit написал(а):
inpost, где именно?
в хеде:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
у страниц в редакторе просто в настройках изменил и пересохранил
в .htaccess
AddDefaultCharset utf-8
в бд, в Operations - Collation: utf8_deneral_ci
при дампе поменял у всех таблиц DEFAULT CHARSET=cp1251 на DEFAULT CHARSET=utf8



Спустя 8 минут, 25 секунд (13.03.2012 - 18:23) inpost написал(а):
Я в личку скинул мини-faq, там больше сделать надо! smile.gif

Спустя 6 минут, 50 секунд (13.03.2012 - 18:30) ADiel написал(а):
А может сюда?

Спустя 25 минут, 38 секунд (13.03.2012 - 18:56) hellspirit написал(а):
inpost, благодарю за ссылку, но с mysql проблемка.
Цитата
Правило №3: Кодировка для подключения к к БД MySQL. Устанавливается после подключения к БД и выбора бд (mysql_connect, mysql_select_db). Если у нас модуль mysql:

mysql_set_charset('utf8');

или улучшенный модуль mysqli:

$mysqli->set_charset("utf8");


Вот мое подключение к базе:

function db_connect(){
$result = new mysqli("localhost","username","userpas","db_name");
return $result;
}
//и уже из класса обращение
$connect = $this->db_connect();
$query = "select * from table";
$result = $connect->query($query);
$connect->close()

Код упрощен, ну я думаю суть понятна:) как правильно применить это правило?

Спустя 10 минут, 8 секунд (13.03.2012 - 19:06) inpost написал(а):
Убери функцию, она не нужна для коннекта в твоём случае.
К тому же если непонятно про set_charset, то тут можно на php.net почитать, как правильно прописывать в конкретном случае.

А если уж такой крутой класс, то set_charset пропиши сразу после коннекта, внутри db_connect.

Спустя 4 минуты, 1 секунда (13.03.2012 - 19:10) hellspirit написал(а):
Цитата
Убери функцию, она не нужна для коннекта в твоём случае.

Функция и класс в разных файлах, как же не нужна?

Цитата
то set_charset пропиши сразу после коннекта, внутри db_connect.

с этим и прошу помочь...


Спустя 20 минут, 9 секунд (13.03.2012 - 19:30) inpost написал(а):
Подожди, ты класс написал, в нём метод сделал коннекта, а в методе коннекта строчку добавить не можешь готовую?
Я этот момент не могу понять...

Спустя 9 минут, 15 секунд (13.03.2012 - 19:39) hellspirit написал(а):
inpost, туплю немного,мозг к вечеру закипает. Добавил, вроде верно

function db_connect(){
$result = new mysqli("localhost","username","userpas","db_name");
$result->set_charset("utf8");
return $result;
}

Результат весь вывод в символах юникода
аля: Выпускной.

Спустя 1 минута, 56 секунд (13.03.2012 - 19:41) inpost написал(а):
Остальные пункты все выполнил?
ПХП кодировку в header() передаёшь?
Кодировку ячеек выставил utf_unicode_ci ?

Спустя 4 минуты, 16 секунд (13.03.2012 - 19:46) tar написал(а):
http://phpfaq.ru/charset

Может SET names "utf8" поможет

Спустя 1 минута, 56 секунд (13.03.2012 - 19:48) hellspirit написал(а):
Да, все выполнил, да передаю перед методом который собирает страницу

function output(){
error_reporting(E_ALL);
header('Content-Type: text/html; charset=utf-8');
//собираем страницу
include ("templates/all_header.tpl");
$this->content();
include ("templates/right_menu.tpl");
include ("templates/footer.tpl");
}


И есть улучшения, теперь новые записи в БД отображаются по русски - нормально а все старое в кракозябрах.

Спустя 22 минуты, 3 секунды (13.03.2012 - 20:10) hellspirit написал(а):
Все. Проблема решена. Если не делать дамп, то все ок. Еще раз благодарю за помощь.

Спустя 3 минуты, 6 секунд (13.03.2012 - 20:13) inpost написал(а):
tar
Это всё не надо, если пхп5.3

hellspirit
Ну и отлично, раз решено.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.