В мире веб-разработки php является одним из самых распространенных скриптовых языков. Его гибкость и простота использования делают его идеальным выбором для многих разработчиков. Однако, если вы не будете осторожны при работе с текстовыми файлами в вашем php-приложении, вы можете столкнуться с проблемой символов BOM.
Иногда стандартные инструменты для редактирования файлов присваивают им кодировку UTF-8 с BOM меткой. Он отображается в самом начале в формате U+FEFF.
В этой статье мы рассмотрим, что такое BOM-символы, почему возникает ошибка и как её устранить.
Маркер последовательности байтов – это специальная последовательность символов, используемая для идентификации порядка байтов в файле. Обычно она записывается как символ Юникода u+feff и появляется в начале файла или потока для обозначения порядка байтов.
Символы BOM (Byte Order Mark) — это специальные последовательности из двух или нескольких байтов. Они указывают порядок, в котором байты должны быть считаны из файла. Они могут использоваться для различения различных типов кодировок, таких как utf-8, utf-16 и utf-32. Включая эту информацию в заголовок файла, программы могут быстро определить, как интерпретировать его содержимое, не догадываясь о типе кодировки. Это делает обмен данными более простым и эффективным, поскольку программам не нужно пробовать несколько кодировок, пока одна из них не будет работать правильно.
Эта ошибка может возникнуть, когда приложение пытается отправить http-ответ с заголовками, которые уже были отправлены другим приложением или скриптом. Обычно это происходит, когда в одном из ваших скриптов присутствует символ BOM перед отправкой любого другого вывода, например, html или текстового содержимого. Поскольку http-заголовки должны идти первыми перед любым другим выводом, если перед ними присутствует любой другой вывод, вы получите это сообщение об ошибке.
В результате возникают проблемы при попытке корректной обработки данных. Это может привести к неожиданным результатам или ошибкам в вашем приложении. Кроме того, нарушается оформление сайта. Например, появляются нечитаемые символы, «уезжают» в сторону блоки.
К счастью, есть способы избежать этой проблемы.
Чтобы исправить эту проблему, нужно удалить все символы BOM из ваших скриптов перед отправкой любого вывода, такого как html-содержимое или текстовое содержимое. Сделать это можно двумя способами.
Способ №1 – в редакторе.
Способ №2 – командой.
find -type f|while read file;do [ "`head -c3 -- "$file"`" == $'\xef\xbb\xbf' ] && echo "found BOM in: $file";done
Можете выбрать конкретную директорию для выполнения проверки, для этого сначала зайдите в соответствующий каталог.
find . -type f -exec sed 's/^\xEF\xBB\xBF//' -i.bak {} \; -exec rm {}.bak \;
Готово. После этого сохраните изменения и попробуйте запустить скрипт снова; теперь он должен работать правильно, не выдавая никаких ошибок о том, что информация модифицирующего заголовка была неправильно установлена заранее из-за присутствия символов BOM.
Приняв эти меры, вы можете гарантировать, что любые проблемы, связанные с символами BOM, не окажут негативного влияния на ваши php-приложения и обеспечат их бесперебойную работу без каких-либо неожиданных результатов или ошибок, связанных с несовместимостью кодировок.