导入CSV文件的字符

时间:2015-05-13 19:13:55

标签: php character-encoding

更新:在检查Ajax是否正在使用正确的字符发送CSV数据之后,我确认它确实存在,它在PHP端出现了错误:

img

我正在导入一个包含西班牙语字符(á,ñ,ó等等)的CSV文件。导入后,像“Germán”这样的词会转换为“Germ n”。

这是代码:

$csv=$_FILES['csv1']['tmp_name'];
          $csv= mb_convert_encoding($csv, "UTF-8");
            $handle = fopen($csv, "r"); 
            while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) { 
                   ............

我的一些没有可能结果的尝试是:

$csv=$_FILES['csv1']['tmp_name'];
$csv= mb_convert_encoding($csv, "UTF-8");

$precsv=$_FILES['csv1']['tmp_name'];
$csv=utf8_encode($precsv);

以及在此PHP文件之上设置:

header('Content-Type: text/html; charset=UTF-8');

这些都没有使字符正确导入,因此没有正确插入数据库,即UTF8_general_ci编码,只是省略了从 到其结尾的任何值的其余部分

1 个答案:

答案 0 :(得分:0)

这个问题可能与编码有关,而且你在正确的轨道上,有一个mistep; mb_convert_encoding的第一个参数应该是要转换的实际字符串。不是你喜欢的文件名。

所以这个:

$csv=$_FILES['csv1']['tmp_name'];
$csv= mb_convert_encoding($csv, "UTF-8");

应该是:

$csvContents=file_get_contents($_FILES['csv1']['tmp_name']);
$csvConverted = mb_convert_encoding($csvContents, "UTF-8");
file_put_contents('SomeotherFile.csv', $csvConverted);

显然,这需要针对您的情况进行一些特定的调整,但只是确保您对实际文件内容进行转换应该是朝着正确方向迈出的一大步。