Многие программы добавляют байты 0xEF
, 0xBB
, 0xBF
в начале любого документа, сохраняемого как UTF-8
. Это метка порядка байтов Юникода (англ. Byte Order Mark, BOM), также её часто называют сигнатурой (соответственно, UTF-8 и UTF-8 with Signature).
По наличию сигнатуры программы могут автоматически определить, является ли файл закодированным в UTF-8, однако файлы с такой сигнатурой могут некорректно обрабатываться старыми программами, xml-анализаторами и РНР.
Как удалить BOM
/** * Удалить BOM из строки * @param string $str - исходная строка * @return string $str - строка без BOM */ function removeBOM($str="") { if(substr($str, 0, 3) == pack('CCC', 0xef, 0xbb, 0xbf)) { $str = substr($str, 3); } return $str; }
Как использовать
// Строка, например, полученная при помощи file_get_contents() $str = 'Строка с BOM'; // Строка без BOM $str = removeBOM($str); echo $str;
Ссылки
Источник: https://www.kobzarev.com/programming/remove-byte-order-mark/