Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Кодировка: с 1251 на utf8
Форумы портала PHP.SU » PHP » Программирование на PHP » Кодировка: с 1251 на utf8

Страниц (2): [1] 2 »
 

1. Roler - 22 Августа, 2009 - 08:21:00 - перейти к сообщению
Тема избита чуть более чем донельзя, и пишу я только потому, что так и не нашёл решения.
Решил перевести движок на локали с cp1251 на utf8.
Сменил кодировку всех файлов. Сделал дамп базы, сменил кодировку, default charset поставил utf8, залил. В БД кодировка явно utf8, потому что при просмотре из браузера (cp1251) отображаются кракозябры, а если сменить кодировку в браузере на utf8, то кракозябры превращаются в нормальные символы(но без ш и И, плюс сама админка неверно отображается). На сайте тоже И и Ш нет.

В скрипте прописано
CODE (text):
скопировать код в буфер обмена
  1. header('Content-Type: text/html; charset=utf-8');


В мета-тегах кодировка выставлена.

Пробовал писать

CODE (text):
скопировать код в буфер обмена
  1. mysql_query ("SET NAMES `utf-8`");
  2. mysql_query ("set character_set_client='utf-8'");
  3. mysql_query ("set character_set_results='utf-8'");
  4. mysql_query ("set collation_connection='utf8_general_ci'");

Не помогло.

Вопрос, как сделать, чтобы отображались И и ш, и убрать кракозябры в phpMyAdmin?

Версии:
phpMyAdmin 2.6.1
Версия PHP 5.2.4
Версия Apache 2.2.4
Версия MySQL 5.0.45
2. Ch_chov - 22 Августа, 2009 - 10:49:55 - перейти к сообщению
Может быть ты неверно перекодировал файлы?
Посмотри отдельно, как отображается текст из БД и текст из файлов.


Цитата:
при просмотре из браузера (cp1251)

А какая кодировка стоит в браузере по умолчанию?
Поставь автоопределение.

Посмотри заголовки, которые возвращает сервер.
Если Content-Type: text/html; charset=windows-1251 то попробуй
AddDefaultCharset utf-8 в .htaccess
или header('Content-type: text/html; charset=utf-8'); в самом начале скрипта.
3. Roler - 22 Августа, 2009 - 11:01:40 - перейти к сообщению
Ch_chov
Забыл написать, скриптом в начале отправляю
CODE (text):
скопировать код в буфер обмена
  1. header('Content-Type: text/html; charset=utf-8');


Цитата:
А какая кодировка стоит в браузере по умолчанию?
Поставь автоопределение.

Так он сам определяет, что cp1251 в PMA.
4. Ch_chov - 22 Августа, 2009 - 11:13:45 - перейти к сообщению
Цитата:
Так он сам определяет, что cp1251 в PMA.

Ну а какая кодировка на самом деле?
Посмотри заголовки.
(Добавление)
Какой браузер?
5. Roler - 22 Августа, 2009 - 11:25:08 - перейти к сообщению
Ch_chov
Firefox 3.0

Сама PMA на cp1251, а БД в utf8, браузер выводит всё в своей.
6. Ch_chov - 22 Августа, 2009 - 11:34:11 - перейти к сообщению
Проблема только в кодировки БД?
7. Roler - 22 Августа, 2009 - 12:08:14 - перейти к сообщению
Ch_chov
Ещё и буквы И и ш неправильно отображаются.
8. Ch_chov - 22 Августа, 2009 - 12:43:18 - перейти к сообщению
hostinghelp.biz/content/решение- проблем-с-нарушением-отображения -букв-ш-и-и-в-резултате-неудачно й-перекодировки-mysq
9. Roler - 22 Августа, 2009 - 14:24:02 - перейти к сообщению
Ch_chov
То есть, вся проблема из-за дампа что-ли?
Я перл в глаза не видел, и не представляю как это сделать, ну ладно, разберёмся Улыбка
Но что с PMA то делать?
Вон те же друпал, джумла - в utf8, а через PMA отображается нормально.
10. Ch_chov - 23 Августа, 2009 - 10:01:21 - перейти к сообщению
Да я думаю не надо перл. Просто нужно правильно сконвертировать базу в utf-8 и все будет работать. В том числе pma.
11. Roler - 23 Августа, 2009 - 10:33:14 - перейти к сообщению
Ch_chov
Я теперь сам не пойму, как её сконвертить, попробовал ещё раз залить, льётся в cp1251 хоть убей. Везде выставил utf8. Хоть через браузер, хоть файлом.
Как же всё-таки залить базу в utf правильно?
12. Ch_chov - 23 Августа, 2009 - 10:44:27 - перейти к сообщению
Сделай дамп базы в cp1251.
Перекодируй его в utf-8 в любом редакторе.
Смени в нём у каждой таблицы DEFAULT CHARSET=cp1251 на DEFAULT CHARSET=utf8
Залей дамп с помощью PMA (не забудь указать кодировку файла при загрузке)
13. Roler - 23 Августа, 2009 - 10:51:21 - перейти к сообщению
Ch_chov
Так и делаю. Default charset сменил, при загрузке поставил кодировку, перекодировал файл...
14. Roler - 23 Августа, 2009 - 13:17:56 - перейти к сообщению
Вроде решил как-то. Перезалил дамп, поигрался с запросами, ничего не понимаю.

Теперь проблемка возникла, в PHP нет мультибайтового аналога wordwrap, я бы написал своё, но, что-то не могу придумать, как превратить строку в массив символов. Все функции разделение требуют символ-сепаратор, а мне бы просто посимвольно.
Есть у кого-нибудь идеи?
15. Ch_chov - 23 Августа, 2009 - 14:22:12 - перейти к сообщению
Цитата:
в PHP нет мультибайтового аналога wordwrap

wordwrap вроде коректно работает с юникодом

 

Powered by ExBB FM 1.0 RC1