如何使用PHP检测CP437

 大永8899_226 发布于 2023-02-09 20:42

我试图检测给定字符串的编码,以便稍后使用iconv将其转换为utf-8。我想将源编码集限制为utf8,iso8859-1,windows-1251,CP437

//...
$acceptedEncodings = array('utf-8',
    'iso-8859-1',
    'windows-1251'
);

$srcEncoding = mb_detect_encoding($content, $acceptedEncodings, true);

if($srcEncoding)
{
    $content = iconv($srcEncoding, 'UTF-8', $content);
}
//...

问题是mb_detect_encoding似乎不接受CP437作为支持的编码,当我给它一个CP437编码的字符串时,它被分类为iso-8859-1,这导致iconv忽略诸如ü之类的字符。

我的问题是:有没有一种方法可以更早地检测到CP437编码?使用iconv从CP437转换为UTF-8的效果很好,但我只是找不到检测CP437的正确方法。

非常感谢你。

1 个回答
  • 正如之前无数次讨论的那样:从根本上讲,不可能将任何单字节编码与任何其他单字节编码区分开。您得到的是一堆字节。在编码A中,字节x42可以映射到字符X,而在编码B中,相同的字节可以映射到字符Y。但是关于字节blob的任何信息都没有告诉您,因为您只有字节。他们可以指任何东西。它们在所有编码中均有效。可以识别更复杂的多字节编码(例如UTF-8),因为它们需要遵循更复杂的内部规则。因此,这可能确实可以说这是合法的UTF-8 。但是,不可能100%肯定地说这绝对是UTF-8,而不是ISO-8859

    您需要具有有关接收到的内容的元数据,该数据可以告诉您内容的编码方式。事后对其进行识别是不现实的。您需要进行实际的内容分析,以找出对文本进行哪种编码最有意义。

    2023-02-09 20:47 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有