gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:47:25 26 4
gpt4 key购买 nike

我编写了一个脚本,允许用户使用 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 导致了问题。我不想用字符集之类的东西来打扰我的用户。

我知道加载数据本地 infile 支持的 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.net 的 mb_detect_encoding 的链接

This is just a work-around and a heuristic way. Make sure you handle all the exceptions that might incure (which might be tedious, i guess)

phpclasses.org 上编写了一个可能适合您要求的类(尚未测试代码)

关于php - 如何找出用户上传文件的字符集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24450913/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com