Xpoint
   [напомнить пароль]

Переход на UTF-8

Метки: [без меток]
2007-10-10 16:23:38 [обр] Валера(6/24)[досье]

Сайт работает на PHP+MySQL, движок работает по схеме MVC. Хочу перевести проект на UTF-8, собрался делать следующее:

  1. Все скрипты сохранить в UTF-8
  2. Все таблицы и столбцы в MySQL сделать UTF-8
  3. В шаблонах страниц задать

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Вопрос: этого достаточно или может еще что-то потребоваться? И можно задать кодировку для всех полей таблиц одним запросом, чтобы не задавать ее вручную для каждого?

спустя 12 минут [обр] Валера(6/24)[досье]
Все сделал как описал, только для столбцов не изменил кодировку, их там очень много, (там стоит cp2151). Работает только если в начале работы выполнить запрос set names utf8.
спустя 7 часов [обр] Алексей В. Иванов(509/2861)[досье]
сообщение промодерировано
Не забудьте про функции для работы со строками. Все substr и т.п. нужно заменить на их мультибайтовые аналоги. Самый простой путь — определить mbstring.func_overload.
спустя 3 часа 30 минут [обр] Роман Чемисов(41/327)[досье]
Валера[досье]
Вы ещё забыли настроить веб-сервер, чтобы он отдавал правильный Content-type:
спустя 4 часа 49 минут [обр] Валера(6/24)[досье]
Алексей В. Иванов[досье], если я правильно понял, это типа расширения для PHP? А потом нужно будет просто в строковых функциях использовать префикс "mb_"?
спустя 1 минуту [обр] Валера(6/24)[досье]
Роман Чемисов[досье], про это не подумал, да, на локальном компьютере думаю без проблем, а как быть на хостинге, вряд ли там дают копаться в настройках сервера?
спустя 2 часа 48 минут [обр] Алексей В. Иванов(509/2861)[досье]
если я правильно понял, это типа расширения для PHP?

Функции для работы с многобайтовыми строками находятся действительно в отдельном, подключаемом модуле. "mb_" использовать необязательно, если вы включите func_overload, но разобраться детальнее в этом вопросе будет очень полезно.

вряд ли там дают копаться в настройках сервера?

Все дают изменить Content-Type/charset. Но вам это нужно сделать в своих скриптах (header('Content-Type: text/html; charset=utf-8');)

спустя 1 час 8 минут [обр] Валера(6/24)[досье]
Алексей В. Иванов[досье], учту, спасибо за комментарии.
спустя 1 час 19 минут [обр] Thirteensmay(17/157)[досье]
еще не забудьте про явные перекодировки если они у Вас есть, если например пользуетесь AJAX то оно так скорее всего, и надо будет их выкинуть, иначе поправить ;)
спустя 17 минут [обр] MiRacLe(47/77)[досье]
Но вам это нужно сделать в своих скриптах (header('Content-Type: text/html; charset=utf-8');)
Вам нужно выставить default_charsetв "utf-8" в настройках любым доступным способом (php.ini, httpd.conf, .htaccess, ini_set как крайний случай).
спустя 1 минуту [обр] Валера(6/24)[досье]
Thirteensmay[досье], да, это тоже верно
спустя 39 минут [обр] Валера(6/24)[досье]
MiRacLe[досье], то есть чтобы каждый раз не прописывать в скриптах header('Content-Type: text/html; charset=utf-8'); предлагается один раз приписать эту настройку в .htaccess?
спустя 2 часа 4 минуты [обр] Давид Мзареулян(536/1003)[досье]

Поддержка UTF-8 в PHP 5

От своего опыта добавлю — безгеморройнее НЕ включать mbstring.func_overload, а писать в явном виде mb_…. Потому что почти все сторонние библиотеки (PEAR-овские в том числе) от оверлоада ломаются.

спустя 3 часа 59 минут [обр] Валера(6/24)[досье]
Спасибо, Давид.
спустя 14 часов [обр] Алексей В. Иванов(509/2861)[досье]
С другой стороны, без func_overload могут и не заработать корректно. У меня была проблема с smarty. Все строки были юникодные, а он работал, как с обычными, в результате модификатор "truncate" обрезал строки на полсимвола, не говоря уж о том, что русские тексты после такой операции были вдвое короче английских)
спустя 2 дня 22 часа [обр] Валера(6/24)[досье]
А если говорить про базу MySQL, то можно ли сделать так: не конвертировать все данные в UTF-8, а оставлять как там храниться, например в windows-1251, а при выводе использовать iconv? Или это будет лишняя нагрузка и проще сразу перевести данные в базе в нужную кодировку?
спустя 2 часа 16 минут [обр] Алексей В. Иванов(509/2861)[досье]
Это теряет смысл использования utf-8. Зачем вам юникод, когда его нельзя сохранить?
спустя 59 минут [обр] Валера(6/24)[досье]
Алексей В. Иванов[досье], действительно, что-то я не то сморозил.
спустя 4 года 5 месяцев [обр] алыев элнур[досье]
сообщение промодерировано
ребят, тут у меня такая вот фигня
[удалено]
спустя 6 часов [обр] Евгений Седов aka KPbIC(7/176)[досье]
! алыев элнур[досье] Создайте для своего вопроса отдельную тему.
Powered by POEM™ Engine Copyright © 2002-2005