Php 文件字符集编码 - fgetcsv?

Php files charset encoding - fgetcsv?

这是我尝试使用外部脚本将产品直接导入 Prestashops 数据库时遇到的错误

array(2) { [0]=> string(4) "Spol" [1]=> string(1) "?" }

Fatal error: Uncaught You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1

INSERT INTO
ed_feature_product (id_feature, id_product, id_feature_value)
VALUES (1, 313, )
thrown in ...../Db.php on line 765

所以我基本上必须检查 csv 文件中是否有产品的 ID 等于数据库中的产品。如果没有,我必须将其直接添加到数据库中。我做的一切都正确,当没有克罗地亚标志时,一切都像魅力一样。问题是当脚本遇到克罗地亚语符号 (č、ć、ž、š、đ、Č、Ć、Ž、Š、Đ) 时。就像不认识他们一样。

即引用的第一行是我 var_dumped 到屏幕的内容。在有问号的地方,它应该输出“Ž”符号。

它显然不被识别为 Ž,因为它会抛出错误,因为我正在使用它来 select 所有 id_feature_value 其中 value = Ž(在这个例子中)。由于我将 prestashops config.inc.php 文件包含到此脚本中,因此字符集设置为 utf-8,header 也是如此。

可能是没做好,请问哪里可以查看呢? 如果这是导致此问题的原因,我该如何解决

P.S. 我认为问题是我正在使用 fgetcsv 读取整个 csv 文件,但它无法识别它的编码,因此输出奇怪的符号而不是输出适当的克罗地亚标志。什么可以解决这个问题?

P.P.S 根据要求导入功能:

function CSVToArray() {
    $arr = [];
    if (($fp = fopen('csv/products.csv', 'r')) !== FALSE) {
        $i = 0;
        while (($data = fgetcsv($fp, 10000, ";")) !== FALSE) {
            $arr[$i]['reference'] = $data[0];
            $arr[$i]['naziv'] = utf8_decode($data[1]);
            $arr[$i]['price'] = $data[2];

            if (empty($data[3])) {
                $arr[$i]['quantity'] = 0;
            } else {
                $arr[$i]['quantity'] = $data[3];
            }

            $arr[$i]['kat_naziv'] = array_map('trim', explode(',', utf8_decode($data[4])));
            $arr[$i]['slika'] = $data[5];
            $arr[$i]['spol'] = utf8_decode($data[6]);
            $i++;
        }
        fclose($fp);
    }
    return $arr;
}

我真的在不需要它的地方使用 utf8_decode() 把它搞砸了,这让我很头疼。