Рейтинг@Mail.ru
 
AntiBOM

Первое, с чем зачастую сталкиваются те, кто сделал правильный вывод и решился перейти на кодировку utf-8, это отказ работы хидеров.


1
2

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\site.ru\www\index.php:1)
 in Z:\home\site.ru\www\index.php on line 8


Они почему то подло и гаденько начинают верещать, что перед ними был осуществлен вывод в поток, хотя тщательный анализ под микроскопом показывает - нет там вывода. И пробелов нет. Ничего нет.

Если внимательно изучить ошибку, то становится ясно - ругается он на первую строчку индекса
(output started at Z:\home\site.ru\www\index.php:1)

С уверенностью 99,99% можно констатировать - это BOM (byte order mark)
Это такая маркировка файлов с кодировками UTF.
Чесно говоря я не встречал ситуации, где эта маркировка была бы полезной, если используется UTF-8. Для UTF-16LE и UTF-16BE возможно, но для восьмерки один вред. Как говорится - хотели как лучше, получилось как всегда.

Так вот, это ни что иное, как три байта (в нашем случае EF BB BF), с которых начинается файл. А сервер воспринимает их как вывод и начинает материться.

Как с этим бороться.
Во первых - перенастроить свой редактор. Нужно выбрать формат UTF-8 without BOM, что обозначает utf-8 без BOM

Ну а во втроых нужно удалить эти три байта из файлов, которые вцепились в них мертвой хваткой. Просто пересохранить в новом формате не всегда выходит.

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