php文件charset编码 - fgetcsv?

时间:2016-06-10 11:29:31

标签: php csv utf-8 character-encoding prestashop

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

  

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

     

致命错误:未捕获您的SQL语法出错;   检查与您的MySQL服务器版本对应的手册   正确的语法在第1行左边的')'附近使用

INSERT INTO
ed_feature_product (id_feature, id_product, id_feature_value)
VALUES (1, 313, )
  ..... / Db.php在第765行

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

即引号的第一行是var_dumped到屏幕的东西。如果有问号标志,它应该输出“Ž”标志。

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

也许它没有正确完成,所以我可以在哪里查看? 如果它是造成这个问题的原因,我该如何解决呢

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

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;
}

1 个答案:

答案 0 :(得分:1)

我真的使用utf8_decode()在不需要的地方弄乱了这个,这引起了我的头疼。

相关问题