我正在尝试自动将导入的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?
发布于 2013-04-30 20:20:15
指定自定义顺序(其中首先检测ASCII )是有效的。
mb_detect_encoding($val, 'ASCII,UTF-8,ISO-8859-15');为了完整起见,可用编码的列表位于http://www.php.net/manual/en/mbstring.supported-encodings.php
发布于 2013-04-30 19:43:41
您可以显式指定
$val = mb_convert_encoding($val, 'UTF-8', 'ASCII');编辑:
$val = mb_convert_encoding($val, 'UTF-8', 'auto');发布于 2017-03-28 16:42:34
如果您不想担心您将允许哪些编码,可以将它们全部添加
$encoding = mb_detect_encoding($val, implode(',', mb_list_encodings()));
https://stackoverflow.com/questions/16298639
复制相似问题