我有一个脚本,可以读取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()来解决此问题。
谢谢