mb_detect_encoding将ASCII检测为UTF-8?

时间:2013-04-30 11:20:03

标签: php string utf-8 ascii multibyte

我正在尝试自动将导入的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

3 个答案:

答案 0 :(得分:14)

指定首先检测ASCII的自定义顺序。

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

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

答案 1 :(得分:2)

您可以明确指定

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

编辑:

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

答案 2 :(得分:0)

如果您不想担心允许的编码,可以全部添加

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