我认为这是由于UTF-8 txt文件格式引起的。 txt文件完全是空的,当我尝试fgets($file_handle)
时,我得到了这些垃圾字母:
该如何解决?我想使用以下方法检查文件是否为空:
if ( !$file_data = fgets($file_handle) )
// This code runs if file is empty
编辑
这是一个使用UTF-8编码的新文件:
答案 0 :(得分:2)
这与记事本添加的BOM(Byte Order Mark)有关,以检测编码:
Microsoft编译器和解释器以及Microsoft Windows上的许多软件(例如记事本)将BOM视为必需的幻数,而不是使用启发式。这些工具在将文本另存为UTF-8时添加BOM,并且除非存在BOM或文件中仅包含ASCII,否则它们无法解释UTF-8。将文档转换为纯文本文件以供下载时,Google Docs还添加了BOM。
从本文中您还可以看到:
BOM的UTF-8表示形式是(十六进制)字节序列
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;
}
请注意,这特定于以您描述的方式创建的文件,并且这只是示例代码-您绝对应该对其进行测试并可以对其进行修改,以使其能够更好地处理大文件/完全为空的文件等< / p>