Php文件字符集编码-fgetcsv



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

数组(2){[0]=>字符串(4)"Spol"[1]=>字符串(1)"?"}

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

INSERT INTOed_feature_product(id_featureid_productid_feature_value)VALUES(1133,)抛出…./Db.php,在线765

所以我基本上必须检查csv文件中是否有id等于数据库中id的产品。如果没有,我必须直接将它添加到数据库中。我做的每件事都很好,当没有克罗地亚人的标志时,一切都像一种魅力。问题是,当脚本遇到克罗地亚符号(č,ć,ž,š,Ç,Č,Ć,Ž,Š)时。它好像认不出他们。

I.e引用的第一行就是我在屏幕上所做的。如果有问号符号,它应该输出"ž"符号。

它显然没有被识别为ž,因为它会抛出错误,因为我使用该sing来选择所有id_feature_value,其中值=ž(在本例中)。由于我将prestashops-config.inc.php文件包含在这个脚本中,字符集被设置为utf-8,作为头。

也许它做得不好,所以我在哪里可以检查它?如果是什么导致了这个问题,我该如何解决它

p。S.我认为问题是我使用fgetcsv读取整个csv文件,但它无法识别它正在编码,因此输出奇怪的符号,而不是输出proper-croatian符号。这个问题的解决方案是什么?

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()的地方,我真的把这个搞砸了,这让我头疼不已。

最新更新