【问题标题】:Php files charset encoding - fgetcsv?PHP 文件字符集编码 - fgetcsv?
【发布时间】:2016-10-11 08:32:51
【问题描述】:

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

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

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

插入
ed_feature_product (id_feature, id_product, id_feature_value)
VALUES (1, 313, )
抛出 ...../Db.php 在第 765 行

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

即引用的第一行是我 var_dump 到屏幕上的东西。如果有问号符号,它应该输出“Ž”符号。

它显然不被识别为 Ž 因为它会引发错误,因为我使用该 sing 来选择所有 id_feature_value 其中 value = Ž (在本例中) .由于我将 prestashops config.inc.php 文件包含在此脚本中,因此该脚本字符集设置为 utf-8,标题也是如此。

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

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,也许这就是问题所在。
  • 1) 我看到你有 utf8_decode() 和非拉丁字符。你根本无法做到这一点。 2) 如果数据会导致 SQL 语法错误,那么你的代码很容易受到 SQL 注入的攻击。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 2011-12-14
    • 2014-12-21
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多