Настройка кодировки UTF-8

Вопросы об установке, настройке и работе самого фреймворка

Настройка кодировки UTF-8

Сообщение emsti » 09 июн 2010, 10:02

Увы, поиск мне не дал полной картины.
Меня интересует полный комплекс действий для настройки кодировки UTF-8 для проектов на CI. То есть сам алгоритм. Начиная от установки фреймворка на сервер и заканчивая настройками в редакторе кода и браузерах.

И еще вопрос дилетанта (не бросайте помидорами): а что не так с windows-1251?
emsti
 
Сообщения: 27
Зарегистрирован: 02 июн 2010, 15:27

Re: Настройка кодировки UTF-8

Сообщение Master » 09 июн 2010, 10:19

часть php-функций работает только с utf-8, например json_encode. если у тебя массив со строками в кодировке отличной от utf, тебе придётся упаковывать его самому. xhr-операции тоже выполняются преимущественно над utf-8 строками

1. настрой редактор, чтобы он сохранял все файлы в utf-8
2. все поля в БД должны быть в utf-8
3. при подключении к БД сразу после mysql_select_db нужно делать запрос
SET NAMES 'utf8' COLLATE 'utf8_general_ci'
это чтобы получать из БД строки в utf8, а не latin_swedish каком-нибудь
4. перед отдачей контента в браузер нужно выдавать заголовок
header('Content-Type: text/html; charset=UTF-8');
либо
header('Content-Type: text/css; charset=UTF-8'); - в общем не обязательно
header('Content-Type: application/json; charset=UTF-8'); - для xhr ответов (в данном случае json)
5. после head (желательно сразу) должен находитьтся тег
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Master
 
Сообщения: 230
Зарегистрирован: 13 мар 2009, 13:22

Re: Настройка кодировки UTF-8

Сообщение Master » 09 июн 2010, 10:27

в целом утф много юзабельнее, потому что للعاب من أهم سبل وقاية الأسنان من التسوس و
Master
 
Сообщения: 230
Зарегистрирован: 13 мар 2009, 13:22

Re: Настройка кодировки UTF-8

Сообщение emsti » 09 июн 2010, 11:11

Обязательно ли в файле application/config/config.php указывать кодировку в строке
Код: Выделить всё
$config['charset'] = ""
?

Какая настройка кодировки должна быть указана в браузере? "Выбрать автоматически" или какая-то другая?
emsti
 
Сообщения: 27
Зарегистрирован: 02 июн 2010, 15:27

Re: Настройка кодировки UTF-8

Сообщение Tovit » 09 июн 2010, 11:32

В конфиге, указать стоит.

А вот браузер... почитайте что ни будь об html
Код: Выделить всё
...
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
...
Фантазия! Фантазия! Она поможет... не форум!
Аватара пользователя
Tovit
Модератор
 
Сообщения: 1230
Зарегистрирован: 15 фев 2009, 17:18

Re: Настройка кодировки UTF-8

Сообщение Master » 09 июн 2010, 18:21

> Обязательно ли в файле application/config/config.php указывать кодировку в строке

нет, если не используешь валидацию форм и встроенный xss-фильтр. но это в стандартных библиотеках, а ты возможно будешь использовать какие-то свои, где нужно будет задавать рабочую кодировку. хорошим тоном будет вставлять в заголовки и meta charset значение кодировки из конфигурации, т.е. как раз этот параметр.

обязательно нужно указывать кодировку в config/database.php

> Какая настройка кодировки должна быть указана в браузере? "Выбрать автоматически" или какая-то другая?

автоматически, естественно. для определения должны выполняться условия 4 и 5, причём 4 приоритетнее
Master
 
Сообщения: 230
Зарегистрирован: 13 мар 2009, 13:22

Re: Настройка кодировки UTF-8

Сообщение emsti » 09 июн 2010, 23:45

Master!
Я дико извиняюсь за свою несообразительность, но я не понял в каком месте делать запрос SET NAMES 'utf8' COLLATE 'utf8_general_ci', так как не смог найти в Руководстве словосочетание mysql_select_db.

И еще. header('Content-Type: text/html; charset=UTF-8'); вставлять в контроллере или во всех вью-файлах?

Хм... Немного поэкспериментировал со строкой установки кодировки хедера и она сработала только после расположения ее в контроллере сразу же после открывающего тега php. До этого браузер выводил бред, если я в нем не устанавливал кодировку явно.
emsti
 
Сообщения: 27
Зарегистрирован: 02 июн 2010, 15:27

Re: Настройка кодировки UTF-8

Сообщение Tovit » 10 июн 2010, 07:39

emsti писал(а):Master!
Я дико извиняюсь за свою несообразительность, но я не понял в каком месте делать запрос SET NAMES 'utf8' COLLATE 'utf8_general_ci', так как не смог найти в Руководстве словосочетание mysql_select_db.

Это делает фреймверк после указания кодировки в конфиге БД.

emsti писал(а):И еще. header('Content-Type: text/html; charset=UTF-8'); вставлять в контроллере или во всех вью-файлах?

Хм... Немного поэкспериментировал со строкой установки кодировки хедера и она сработала только после расположения ее в контроллере сразу же после открывающего тега php. До этого браузер выводил бред, если я в нем не устанавливал кодировку явно.

Это вообще не обязательный вызов, если Ваш редактор настроен сохранять все файлы в UTF8 без BOM.
Еще можно добавить в начало файла .htaccess
Код: Выделить всё
AddDefaultCharset UTF-8
Фантазия! Фантазия! Она поможет... не форум!
Аватара пользователя
Tovit
Модератор
 
Сообщения: 1230
Зарегистрирован: 15 фев 2009, 17:18

Re: Настройка кодировки UTF-8

Сообщение Master » 10 июн 2010, 08:01

emsti
http://ru2.php.net/mysql_select_db
это общий принцип работы с бд, а не схема наладки фреймворка. вообще говоря, работать можно и без выбора базы
mysql_connect()
mysql_query('set names ... collation')

mysql_query('select from `database`.`table` join `other_database`.`table` ...'); // указываем явно базу и таблицу

первые две команды в CI делает драйвер БД, тебе нужно лишь указать кодировку в настройках database.php. Но если ты когда-либо будешь работать с базой самостоятельно - придётся задавать кодировку вручную.

> header('Content-Type: text/html; charset=UTF-8'); вставлять в контроллере или во всех вью-файлах

без разницы, главное чтобы он был. но с учётом того, что контроллер один, а вьюшек много, а также что заголовки должны отдаваться до текста, есть смысл поместить в контроллер.
Master
 
Сообщения: 230
Зарегистрирован: 13 мар 2009, 13:22

Re: Настройка кодировки UTF-8

Сообщение emsti » 10 июн 2010, 10:44

Спасибо, Master и Tovit!
Да, я теперь разобрался с БД.
С кодировкой header тоже разобрался, догадавшись наконец, что это php-команда и во вьюшки она вставляется лишь в обрамлении соответствующих тегов.

У меня еще вопрос.
Я делаю админку, куда вывожу список страниц с кратким описанием, очищая их от тегов с помощью команды
Код: Выделить всё
substr(strip_tags($_['body']),0, 100).'...' 
Но в самом конце перед троеточием появляется загадочный квадратик, говорящий, как мне кажется, что что-то не так с кодировкой.
Как от него избавиться?
emsti
 
Сообщения: 27
Зарегистрирован: 02 июн 2010, 15:27

Re: Настройка кодировки UTF-8

Сообщение radioheaded » 10 июн 2010, 12:58

Это не с кодировкой что-то не так, а...

Раз вы работаете с utf8, то не поленитесь почитать про нее, что это и как кодируются и хранятся символы.

Функция substr, которую вы используете, предназначена для работы с однобайтными кодировками (ANSI, например), она обрезает не 100 символов в вашем случае, а 100 байт. Кириллический символ в utf8 занимает 2 байта, поэтому есть вероятность, что вы обрежете как бы полсимвола. Для правильной работы со строками в utf8 используйте расширение mbstring и соответствующие функции.
radioheaded
 

Re: Настройка кодировки UTF-8

Сообщение emsti » 10 июн 2010, 17:15

Хм... Ну я пробую вставить строку
Код: Выделить всё
<?php echo mb_substr(strip_tags($_['body']),0100,'UTF-8').'...'?>
с явным указанием кодировки, но мне выдается ошибка об обращении к неопределенной функции...
emsti
 
Сообщения: 27
Зарегистрирован: 02 июн 2010, 15:27

Re: Настройка кодировки UTF-8

Сообщение radioheaded » 10 июн 2010, 21:59

Еще раз — расширение mbstring
radioheaded
 

Re: Настройка кодировки UTF-8

Сообщение Master » 11 июн 2010, 01:56

emsti, mbstring - внешний модуль, проверь в phpinfo, подключен ли он
Master
 
Сообщения: 230
Зарегистрирован: 13 мар 2009, 13:22


Вернуться в Общие вопросы по фреймворку

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron