mb_detect_encoding检测ASCII为UTF-8?(mb_detect_encodin

2019-09-01 11:14发布

我试图从自动转换图像导入IPTC元数据为UTF-8以便存储在基于PHP的数据库mb_功能。

目前,它看起来像这样:

$val = mb_convert_encoding($val, 'UTF-8', mb_detect_encoding($val));

然而,当mb_detect_encoding()被提供一个ASCII字符串(在从192-255的Latin1的场特殊字符)它检测为UTF-8,因此在以下的尝试一切转换为正确的UTF-8的所有特殊字符被删除。

我试图寻找Latin1的值写我自己的方法,如果没有发生,我会去上让mb_detect_encoding决定它是什么。 但我中途停止时,我意识到,我不能肯定其他的编码不使用相同的字节值其他的事情。

那么,有没有一种方法能正确检测ASCII喂到mb_convert_encoding作为源编码?

Answer 1:

指定一个自定义的顺序,先被检测到ASCII,工作。

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

为了完整起见,可用编码的列表在http://www.php.net/manual/en/mbstring.supported-encodings.php



Answer 2:

你可以明确指定

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

编辑:

$val = mb_convert_encoding($val, 'UTF-8', 'auto');


Answer 3:

如果你不想担心什么编码您允许,你可以把他们

$encoding = mb_detect_encoding($val, implode(',', mb_list_encodings()));



文章来源: mb_detect_encoding detects ASCII as UTF-8?