� 字符导入 CSV 文件

� characters importing CSV file

更新:在检查 Ajax 是否发送了具有正确字符的 CSV 数据后,我向你确认它确实如此,它在 PHP 那边出错了:


我正在导入一个包含西班牙字符(á、ñ、ó 等...)的 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');

None 这使得字符正确导入,因此既没有被正确插入数据库,也就是 UTF8_general_ci 编码并且只是省略了从 � 到它结束的任何值的其余部分

问题很可能与编码有关,你是在正确的轨道上,错了一步; 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);

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