Php mb_detect_编码将ASCII检测为UTF-8?

Php mb_detect_编码将ASCII检测为UTF-8?,php,string,utf-8,ascii,multibyte,Php,String,Utf 8,Ascii,Multibyte,我正在尝试将导入的IPTC元数据从图像自动转换为UTF-8,以便存储在基于PHPmb\uuz函数的数据库中。 现在看起来是这样的: $val = mb_convert_encoding($val, 'UTF-8', mb_detect_encoding($val)); 但是,当mb\u detect\u encoding()提供了一个ASCII字符串(192-255的拉丁1字段中的特殊字符)时,它会将其检测为UTF-8,因此在下面尝试将所有内容转换为正确的UTF-8时,所有特殊字符都会被删除

我正在尝试将导入的IPTC元数据从图像自动转换为UTF-8,以便存储在基于PHP
mb\uuz
函数的数据库中。

现在看起来是这样的:

$val = mb_convert_encoding($val, 'UTF-8', mb_detect_encoding($val));
但是,当
mb\u detect\u encoding()
提供了一个ASCII字符串(192-255的拉丁1字段中的特殊字符)时,它会将其检测为UTF-8,因此在下面尝试将所有内容转换为正确的UTF-8时,所有特殊字符都会被删除

我试图通过寻找拉丁1值来编写自己的方法,如果没有,我会让
mb\u detect\u编码
决定它是什么。但我中途停了下来,因为我意识到我不能确定其他编码是否在其他事情上使用相同的字节值


那么,有没有一种方法可以正确地检测ASCII以馈送到
mb\u convert\u编码
作为源编码?

您可以明确指定

$val = mb_convert_encoding($val, 'UTF-8', 'ASCII');
编辑:


可以显式指定

$val = mb_convert_encoding($val, 'UTF-8', 'ASCII');
编辑:


在首先检测到ASCII的情况下,指定自定义顺序是可行的

mb_detect_encoding($val, 'ASCII,UTF-8,ISO-8859-15');

为完整起见,可用编码列表位于指定自定义顺序(首先检测到ASCII)的位置

mb_detect_encoding($val, 'ASCII,UTF-8,ISO-8859-15');

为完整起见,可用编码列表位于

如果您不想担心您将允许哪些编码,可以将它们全部添加

$encoding=mb_detect_encoding($val,内爆(',',mb_list_encodings());

如果您不想担心将允许哪些编码,您可以全部添加它们

$encoding=mb_detect_encoding($val,内爆(',',mb_list_encodings());

是的,如果我能确定我要导入的内容,而我无法确定,这将起作用。因此,所有的检测…是的,如果我能确定我导入的是什么,而我无法确定,这将起作用。因此,给定字符串的所有检测都只能确定它是否属于特定编码。mb_detect_encoding函数将检查字符串并尝试“猜测”其编码是什么。那么它是什么呢?ASCII还是拉丁语-1?不可能两者都有。还有,是编码变量,还是您知道编码?你能从一些元数据中得到编码吗?“检测”编码(阅读:最好猜测它们)从来不是一个好主意;需要指定编码。给定的字符串只有在不属于特定编码的情况下才能确定。mb_detect_encoding函数将检查字符串并尝试“猜测”其编码是什么。那么它是什么呢?ASCII还是拉丁语-1?不可能两者都有。还有,是编码变量,还是您知道编码?你能从一些元数据中得到编码吗?“检测”编码(阅读:最好猜测它们)从来不是一个好主意;需要指定编码。我可以,但
mb\u list\u encodings()
不允许我控制编码的列出顺序。我可以,但
mb\u list\u encodings()
不允许我控制编码的列出顺序。只想添加ASCII始终有效的UTF-8(但不是相反)。请记住,ASCII不是拉丁文1(ISO-8859-1)!只想补充一点,ASCII总是有效的UTF-8(但不是相反)。请记住,ASCII不是拉丁文1(ISO-8859-1)!