我有一个表单来上传CSV
文件:
<form method="post" action="#" enctype="multipart/form-data" accept-charset="utf-8">
<p><input type="file" name="file" /></p>
<p><input type="submit" /></p>
</form>
在我的PHP脚本中,我执行以下操作:
$temp = $_FILES["file"]["tmp_name"];
$fobject = new SplFileObject($temp);
$fobject->setFlags(SplFileObject::READ_CSV);
$fobject->setCsvControl(',', '"');
$data = [];
foreach($fobject as $line) {
$data[] = $line;
print_r($line);
}
现在文件中有BOM
显示为

在第一个CSV
行中。我该如何删除?
我用Google搜索并尝试了一些解决方案(How to remove multiple UTF-8 BOM sequences before "<!DOCTYPE>"?),但没有效果。
我可以使用str_replace
,但这似乎不是我的最佳做法。
答案 0 :(得分:0)
原始帖子摘自这里:chrisguitarguy/no_bom.php
<?php
$file = new \SplFileObject('some_file_with_bom.csv');
// http://en.wikipedia.org/wiki/Byte_order_mark#UTF-8
$bom = pack('CCC', 0xEF, 0xBB, 0xBF);
$first = true;
foreach ($file as $line) {
if ($first && substr($line, 0, 3) === $bom) {
$line = substr($line, 3);
}
$first = false;
// your lines don't have a BOM, do your stuff
}
为我工作!