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()
把它搞砸了,这让我很头疼。
这是我尝试使用外部脚本将产品直接导入 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 INTOthrown in ...../Db.php on line 765ed_feature_product
(id_feature
,id_product
,id_feature_value
) VALUES (1, 313, )
所以我基本上必须检查 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()
把它搞砸了,这让我很头疼。