如何找出用户上传文件的字符集



我编写了一个脚本,允许用户使用csv文件一次上传/导入大量用户。我使用MySQL的加载数据本地文件使其工作:

$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造成的问题。我不想用字符集之类的东西打扰我的用户。

我知道加载数据本地文件支持的character set选项。但是,即使我没有得到错误,当我把CHARACTER SET latin1在我的查询,我希望一切都是UTF-8。如果另一个用户使用的文件既不是UTF-8格式,也不是latin1格式,会发生什么?

那么我如何发现用户上传的文档是哪个字符集,以及如何将其转换为UTF-8?

您可以在运行$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的mb_detect_encoding

的链接

这只是一种变通和启发式的方法。确保你能处理好所有可能导致()的异常,这可能很乏味猜

)

在phpclasses.org

上有一个类可能满足您的需求(还没有测试代码)

相关内容

  • 没有找到相关文章

最新更新