Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何找出用户上传文档的字符集?_Php_Mysql_Utf 8_Character Encoding_User Input - Fatal编程技术网

Php 如何找出用户上传文档的字符集?

Php 如何找出用户上传文档的字符集?,php,mysql,utf-8,character-encoding,user-input,Php,Mysql,Utf 8,Character Encoding,User Input,我编写了一个脚本,允许用户使用CSV文件一次上载/导入大量用户。我正在使用MySQL的load data local Infle来实现这一点: $query = "LOAD DATA LOCAL INFILE $file INTO TABLE my_table FIELDS TERMINATED BY $delimiter LINES TERMINATED BY '\\n' (email, name, organization); 但是一个用户试图导入一个包含名称Günther的文档。这

我编写了一个脚本,允许用户使用CSV文件一次上载/导入大量用户。我正在使用MySQL的load data local Infle来实现这一点:

$query = "LOAD DATA LOCAL INFILE $file INTO TABLE my_table 
FIELDS TERMINATED BY $delimiter 
LINES TERMINATED BY '\\n' 
(email, name, organization);
但是一个用户试图导入一个包含名称
Günther
的文档。这被保存到数据库中作为“G”(其余部分的切割)。该文档原来是拉丁语的
1
导致了这些问题。我不想用字符集之类的东西来打扰我的用户

我知道加载数据本地填充支持的
字符集
选项。但是,即使我在查询中放入
字符集latin1
时没有出现错误,我还是希望所有内容都是UTF-8。如果我发现其他用户使用的文件不是UTF-8或latin1格式,会发生什么


那么,我如何找出用户上传文档的字符集以及如何将其转换为UTF-8?

在运行$query之前,您可以使用mb\u detect\u编码找到字符编码。这将帮助您在加载文件之前检测最可能的编码

假设文件名位于$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的

这只是一种变通方法和启发式方法。一定要处理好 所有可能发生的例外情况(我认为这可能很乏味) (猜测)


有一个编写的类可能满足您的需求(尚未测试代码)

这在理论上是不可能的;)幸运的是,有一些启发式方法可以帮助您以很高的概率猜测正确的编码。请参见示例:您至少应该提到,这只是一种启发式方法,即可能会出现严重错误。是的@Deduplicator,您是对的。应该马上进行编辑。谢谢@谢谢你的回答。非常感谢。但我不禁想,我不可能是第一个偶然发现这一点的人。正如您和“重复数据消除器”所指出的,它的内容远不止此脚本。“难道没有一个开源类工作得很好吗?”Davidjansen用一个链接修改了答案。这可能对你有帮助。