我编写了一个脚本,允许用户使用CSV文件一次上传/导入大量用户。我正在使用MySQL的加载数据本地infile来实现这个目的:
$query = "LOAD DATA LOCAL INFILE $file INTO TABLE my_table
FIELDS TERMINATED BY $delimiter
LINES TERMINATED BY '\\n'
(email, name, organization);
但是,用户尝试导入包含名称Günther
的文档。这被保存到数据库中作为“G”(其余的切割)。该文件原来是latin1
导致问题。我不想用字符集和东西来打扰我的用户。
我知道load data local infile支持的character set
选项。但是,即使我在查询中放入CHARACTER SET latin1
时没有出错,我希望所有内容都是UTF-8。如果我的其他用户使用的文件既不是UTF-8也不是latin1会怎样?
那么如何找出用户上传文档的字符集是什么以及如何将其转换为UTF-8?
答案 0 :(得分:1)
在运行$ query之前,您可以使用mb_detect_encoding找到字符编码。这将有助于您在加载文件之前检测最可能的编码。
假设文件名在 $ str
中这是一个可能有用的基本示例。
<?php
/* Detect character encoding with current detect_order */
echo mb_detect_encoding($str);
/* "auto" is expanded according to mbstring.language */
echo mb_detect_encoding($str, "auto");
/* Specify encoding_list character encoding by comma separated list */
echo mb_detect_encoding($str, "JIS, eucjp-win, sjis-win");
/* Use array to specify encoding_list */
$ary[] = "ASCII";
$ary[] = "JIS";
$ary[] = "EUC-JP";
echo mb_detect_encoding($str, $ary);
?>
这是指向php.net&#39; s mb_detect_encoding
的链接上编写了一个可能符合您要求( Haven未对代码进行测试)的课程这只是一种解决方法和启发式方法。确保你处理 所有可能产生的例外情况(可能很乏味,我 猜)