mb_detect_encoding()函数检测不准确。

发布于 2022-09-07 19:54:38 字数 610 浏览 14 评论 0

我想通过mb_detect_encoding()函数动态获取某个字符的编码集,再通过iconv进行编码转换,但是mb_detect_encoding()判断的编码类型不准,导致iconv()失效或乱码。

//片段
if (is_string($k)) {
    $encoding = getEncoding($k);
    $k = iconv($encoding, "utf-8", $k);
}
//获取编码集
function getEncoding($data)
{
   return mb_detect_encoding($data, array("ASCII","GB2312","GBK",'BIG5','UTF-8'));
}
//测试
$k = "哈哈";
$encoding = getEncoding($k);
var_dump($encoding,$k);
$k = iconv($encoding, "utf-8", $k);
var_dump(getEncoding($k),$k);exit;

//输出:string(5) "CP936" string(6) "哈哈" string(5) "CP936" string(9) "鍝堝搱"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梅窗月明清似水 2022-09-14 19:54:38

mb_detect_encoding — 检测字符的编码

string mb_detect_encoding ( string $str [, mixed $encoding_list = mb_detect_order() [, bool $strict = false ]] )

可见第二个参数是非必填的, 如果省略了 $encoding_list 将会使用 mb_detect_order() 自动获取字符集, 所以可对代码做如下调整:

return mb_detect_encoding($data);
return mb_detect_encoding($data, mb_detect_order());

修改后的code

<?php
/**
 * 获取编码集
 */
function getEncoding($string)
{
    return mb_detect_encoding($string, mb_detect_order());
}

//测试
$k = "哈哈";
$encoding = getEncoding($k);
var_dump($encoding, $k);

$k = iconv($encoding, "utf-8", $k);
var_dump(getEncoding($k), $k);

exit;

// 示例图

图片描述

鸩远一方 2022-09-14 19:54:38

@蒋建勇
clipboard.png
老哥,我不是要抬杠哈,比如我输入了一串英文,获取字符集结果为ASCII,然后通过iconv转成utf-8了,后面应该返回utf-8才对。为什么还是返回的ASCII呢?我是比较疑惑的这一点。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文