CSV上传-使用SplFileObject进行分析-删除BOM

问题描述 投票:0回答:1

我有一个上传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,但在我看来这不是最佳实践。

php csv byte-order-mark
1个回答
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 }

为我工作!
© www.soinside.com 2019 - 2024. All rights reserved.