我有一个包含如下列的 CSV 表:id;sku;Название;Категория. 该表以 UTF-8 格式保存。
接下来,我正在尝试创建一个数组(列名 => 某个值),这是代码:
$f = fopen(public_path('/path/file.csv'), 'r');
$columns = fgetcsv($f, null, ';');
$test = [];
foreach($columns as $key => &$column)
{
$test[$column] = 0;
}
var_dump($test);
我得到这个结果:
array(4) {
["id"] => int(0)
["sku"] => int(0)
["Название"] => int(0)
["Категория"] => int(0)
}
似乎一切都解决了,但是如果我按键转向第一个元素$test['id'] (我注意第一个元素),那么我会得到一个错误Undefined index: id。接下来,我决定将数组转换为 JSON 并看到这张图:
{
"\ufeffid": 0,
"sku": 0,
"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435": 0,
"\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f": 0
}
如果将它json_encode与 option 一起使用JSON_UNESCAPED_UNICODE,那么一切都会正常显示:
{
"id": 0,
"sku": 0,
"Название": 0,
"Категория": 0
}
很明显,这很可能是编码问题,但我仍然不明白如何解决这种情况。为什么这个问题只发生在第一个元素上,而其余的键是正常写入的?我非常感谢您的提示、答案和示例。
在这里找到了答案,要解决此问题,您需要删除 BOM 标头。像这样重写我的代码: