Это относится к спецификации ( Byte Order Mark ), добавленной Notepad для определения кодировки:
компиляторов и интерпретаторов Microsoft, а также многих программных продуктов в MicrosoftWindows, такие как Блокнот, обрабатывает спецификацию как требуемое магическое число, а не использует эвристику.Эти инструменты добавляют спецификацию при сохранении текста как UTF-8 и не могут интерпретировать UTF-8, если эта спецификация не присутствует или файл содержит только ASCII.Документы Google также добавляют спецификацию при преобразовании документа в текстовый файл для загрузки.
Из этой статьи также видно, что:
Представление UTF-8BOM - это (шестнадцатеричная) последовательность байтов 0xEF,0xBB,0xBF
Поэтому мы должны быть в состоянии написать функцию PHP для учета этого:
function is_utf8_file_empty($filename)
{
$file = @fopen($filename, "r");
$bom = fread($file, filesize($filename));
if ($bom == b"\xEF\xBB\xBF") {
return true;
}
return false;
}
Имейте в виду, чтоэто характерно для файлов, созданных описанным вами способом, и это только пример кода - вы должны обязательно проверить это и, возможно, изменить его, чтобы он лучше обрабатывал большие файлы / файлы, которые полностью пусты и т. д.