?

Log in

Файлы в utf8 и headers. - Codeigniter [entries|archive|friends|userinfo]
Русское сообщество пользователей CodeIgniter

[ website | проект CodeIgniter ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Links
[Links:| репозитарий проектов wiki ]

Файлы в utf8 и headers. [Aug. 9th, 2009|10:26 am]
Русское сообщество пользователей CodeIgniter

ru_codeigniter

[mkochkin]
Привет всем.

Существует небольшая проблемка при использовании файлов в кодировке utf8. То есть если у вас вдруг некая модель «some_model» хранится в utf8, то следующий код

$this->load->model('some_model');
//...
redirect('/some_uri');

вызовет примерно следующую ошибку

A PHP Error was encountered

Severity: Warning
Message: Cannot modify header information - headers already sent by (output started at ...\www\system\application\models\some_model.php:1)
Filename: helpers/url_helper.php
Line Number: 541


А все потому, что redirect выполняется с помощью headers, а это значит, что до его вызова не должно быть никакого вывода (print, echo или еще чего), а это значит, что в ваших файлах не должно быть ни единого символа до <? и после ?> (по этой причине, кстати, существует практика незакрывания тега <?), а utf8 значит, что их у вас перед <? целых три: EF BB BF, а это значит, что при загрузке таких файлов методом load никаких вам headers.

Проблема решается использованием utf8 без BOM (как раз те самые 3 байта). В Notepad++, например, это делается очень просто.

Мораль: если вы используете utf8, то сохраняйте ваши php-файлы в utf8 без BOM.

Надеюсь, кому-это это сэкономит немного времени и нервов.
LinkReply

Comments:
From: wave_blessed
2009-08-09 08:44 am (UTC)
Обычно те, кому это могло бы сэкономить время и нервы, не знают, что такое BOM. Поэтому им нужно объяснять подробней.
(Reply) (Thread)
[User Picture]From: drumrock
2009-08-09 11:53 am (UTC)
Ага, добавьте ссылку в пост :-)

http://en.wikipedia.org/wiki/Byte-order_mark
(Reply) (Parent) (Thread)
[User Picture]From: mkochkin
2009-08-09 02:32 pm (UTC)
Да им и нужно-то всего лишь найти нужный пункт в меню редактора, которым они пользуются =)
(Reply) (Parent) (Thread)