在CSV文件中读取外来字符

时间:2015-03-17 15:12:37

标签: php csv

我有一个脚本,它接受一个CSV文件并将每一行上传到数据库。但是,文件中的外来字符不仅显示错误,而且根本不显示。

例如,这是一个"输入"行,以及数据库中的内容:

"This café is amazing", "1000", "www.example.com"
"This caf", "1000", "www.example.com"

这是执行上传的脚本:

header("Content-Type: text/plain; charset=utf-8");

if (!isset($_POST['form_id'])) {
    header("Location: ./?error=form_id");
    exit();
}
$form_id = $_POST['form_id'];

$csv = $_FILES['csv_file'];

if ($csv['size'] > 0) {
    $handle = fopen($csv['tmp_name'], "r");
    require_once("db.php");
    $i = (!isset($_POST['csv_headers']) ? 1 : 0);
    while ($data = fgetcsv($handle, 1000, ',', '"')) {
        if ($i > 0) {
            $data[2] = str_replace(" + ", "+", $data[2]);
            if (strpos($data[3], "http") === false && $data[3] != "") {
                $data[3] = "http://" . $data[3];
            }
            mysql_query("INSERT INTO exhibitor_lists SET form_id = $form_id, company_name = '" . addslashes($data[0]) . "', country = '" . addslashes($data[1]) . "', stand_number = '" . addslashes($data[2]) . "', web_address = '" . addslashes($data[3]) . "', logo_file = '" . addslashes($data[4]) . "', added_date = NOW()");
        }
        $i++;
    }
} else {
    header("Location: ./?error=csv_file");
    exit();
}

mysql_close();
header("Location: ./?success=upload");
exit();

即使设置内容类型header(),我也会遇到问题。

1 个答案:

答案 0 :(得分:0)

在上传之前将CSV文件保存为UTF8。