fgets UTF-8 TXT-файл возвращает мусорные буквы и true, если файл пуст - PullRequest
0 голосов
/ 26 февраля 2019

Я предполагаю, что это связано с форматом TXT-файла UTF-8.TXT-файл полностью пуст, и когда я попробовал fgets($file_handle), я получил эти мусорные буквы:

These weird letters

Как это исправить?Я хочу проверить, пуст ли файл, используя:

if ( !$file_data = fgets($file_handle) )
    // This code runs if file is empty

РЕДАКТИРОВАТЬ

Это новый файл с использованием кодировки UTF-8:

New File

1 Ответ

0 голосов
/ 26 февраля 2019

Это относится к спецификации ( 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;
}

Имейте в виду, чтоэто характерно для файлов, созданных описанным вами способом, и это только пример кода - вы должны обязательно проверить это и, возможно, изменить его, чтобы он лучше обрабатывал большие файлы / файлы, которые полностью пусты и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...