首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mb_detect_encoding将ASCII码检测为UTF8?

mb_detect_encoding将ASCII码检测为UTF8?
EN

Stack Overflow用户
提问于 2013-04-30 19:20:03
回答 3查看 19.4K关注 0票数 6

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

目前它看起来是这样的:

代码语言:javascript
复制
$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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-30 20:20:15

指定自定义顺序(其中首先检测ASCII )是有效的。

代码语言:javascript
复制
mb_detect_encoding($val, 'ASCII,UTF-8,ISO-8859-15');

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

票数 17
EN

Stack Overflow用户

发布于 2013-04-30 19:43:41

您可以显式指定

代码语言:javascript
复制
$val = mb_convert_encoding($val, 'UTF-8', 'ASCII');

编辑:

代码语言:javascript
复制
$val = mb_convert_encoding($val, 'UTF-8', 'auto');
票数 2
EN

Stack Overflow用户

发布于 2017-03-28 16:42:34

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16298639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档