6

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

目前它看起来像这样:

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

但是,当mb_detect_encoding()提供 ASCII 字符串(Latin1 字段中 192-255 中的特殊字符)时,它会将其检测为 UTF-8,因此在以下尝试将所有内容转换为正确的 UTF-8 时,所有特殊字符都将被删除。

我尝试通过查找 Latin1 值来编写自己的方法,如果没有发生,我将继续mb_detect_encoding决定它是什么。但是当我意识到我不能确定其他编码不会对其他事物使用相同的字节值时,我中途停了下来。

那么,有没有办法正确检测 ASCIImb_convert_encoding作为源编码?

4

3 回答 3

17

指定一个自定义顺序,首先检测 ASCII 是有效的。

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

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

于 2013-04-30T12:20:15.370 回答
2

您可以明确指定

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

编辑:

$val = mb_convert_encoding($val, 'UTF-8', 'auto');
于 2013-04-30T11:43:41.023 回答
0

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

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

于 2017-03-28T08:42:34.100 回答