yii & utf-8 & BOM - выдача битой капчи

Встретил очередную проблему, которая завела меня в тупик.

Вступление

После очереного апдейта сайта на yii сторонними программистами - возник вопрос формата: "почему на всех формах перстала отображаться капча?".
Поначалу это вызвало у меня улыбку - наверняка забыли описать экшн "captcha" в функции "filters()" контроллеров, либо для этого экшена нет маршрута.

Прошелся по контроллерам, просмотрел маршруты - все было в порядке.
Ну думаю - наверняка стоит как-либо event-перехватчик -- прошелся по файлом и конфигу - все снова в порядке.

Ну если везде все впорядке - наверняка затерты файлы ядра yii. Сказано - сделано, удалил папку с фреймворком, вместо него залил ту же версию заново. Капча всеравно генерировала битую картинку. :)

Теперь я решил заняться проблемой серьезно - запустил wireshark, настроил фильтры по хосту/порту и получил TCP пакет изображения.

Каково же было мое удивление когда я увидел в png картинке три первых байта - это были EF BB BF - также известные как bom метка файла в кодировке utf-8.

Решение

Для удаления BOM из php файлов можно воспользоваться небольшим скриптом:

for i in `find -name '*.php' -type f`
do
sed -i -e '1s/^xefxbbxbf//' $i
done

Вывод

Прежде чем начать работать с файлами, настройте редактор/ide/etc.

Комментарии