我的输出中有一个隐藏的字符,我不知道它是什么

时间:2019-03-30 03:09:41

标签: php csv character-encoding

我有一个脚本,可以读取CSV文件并创建查询以插入到MySQL中:

if (($handle = fopen($_FILES['csvfile']['tmp_name'], "r")) !== FALSE) {
    $counter=0;
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 


$nullCol = "NULL";


        $sql_q="INSERT INTO $dbupload ($db_cols) VALUES ";

            $sql_q2="('".implode("','",$data)."'),"; 
            $sql_q2=rtrim($sql_q2,",");
            $sql_q2=str_replace('\'\'',$nullCol,$sql_q2);
            $sql_q2=str_replace(' ','',$sql_q2);
            $sql_q2=str_replace('','',$sql_q2); //There is a weird hidden character between ''

            $sql_q.=$sql_q2;
            $sql_q.=" ON DUPLICATE KEY UPDATE ";

            $col_ar=explode(",",$db_cols);

                foreach($col_ar as $col){
                $sql_q.="$col=VALUES($col),";
                }
            $sql_q=rtrim($sql_q,",");
            $insert_data=$connection->new_query($sql_q,true);

    $counter++;
  }     
    fclose($handle);

}

一切正常,除了在第一个值和最后一个值上总有一个字符出现在查询中,并且对于任何文本编辑器都是不可见的,只有phpmyadmin能够显示:

'•'

我注意到,因为我的第一个值是int且'•10'返回了不正确的int值”,但是我的查询显示'10',在常规文件UTF8上显示为'10' NOTHING !!!!但是,如果将其转换为ANSI,我最终会看到它是'10',所以奇怪的字符是''

如果您查看我的代码,我会添加一行带有注释的内容:

//There is a weird hidden character between ''

我能够在字符串替换函数中复制/粘贴怪异的字符,即使肉眼看不见,脚本也能够检测到并删除它。

我的理论是它来自CSV转换,但是如何不使用带有隐藏的复制/粘贴值的str_replace()来解决此问题。

谢谢

0 个答案:

没有答案