Как удалить BOM из файлов
Маркер последовательности байтов, он же BOM - специальный символ Юникода, который вставляется в начало текстового файла для обозначения того, что в этом файле используется Юникод. Согласно спецификации, использование этого символа не является обязательным, однако оно широко распространено, что иногда приводит к проблемам при обработке данных.Так, к примеру, однажды я столкнулся с ситуацией, когда от сторонней системы передавался файл в формате JSON, а я у себя должен был извлечь поступившие данные при помощи стандартной функции PHP json_decode. Файл передается и принимается успешно, на первый взгляд имеет абсолютно корректную структуру, правильно открывается в браузере и блокноте, но функция декодирования все равно возвращает ошибку, что данные некорректные. Сейчас я не смогу сказать, сколько времени потратил на выяснение причины ошибки, пока, наконец, не решил открыть файл при помощи HEX-редактора. Оказалось, что всему виной был маркер BOM, из-за которого функция json_decode не могла корректно раскодировать файл.
Для решения проблемы я быстренько нарисовал вот такую функцию в несколько строчек:
Code (PHP) : Убрать нумерацию
- // Функция удаления BOM из потока данных
- function remove_BOM($data) {
- // Маркер UTF-8
- if (substr($data,0,3)=="\xEF\xBB\xBF") {
- return substr($data,3);
- }
- // Маркер UTF-16
- elseif (substr($data,0,2)=="\xFF\xFE") {
- return substr($data,2);
- }
- else {
- return $data;
- }
- }
Просмотров: 3007 | Комментариев: 1
Метки: PHP, полезные функции
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(29.03.2018 в 18:49):
На очередном файле вылез маркер UTF-16, добавил в функцию очистки.
Добавить комментарий
Заполните форму для добавления комментария