账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    mb_detect_encoding()函数检测不准确。
    29
    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) "鍝堝搱"
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 西瓜有点咸 普通会员 1楼

      MBDetectEncoding()函数主要用于检测字节码中是否使用了字节码生成器(ByteCode Generator)的编码方式,而不是像普通的Unicode编码那样,使用UTF-8。如果MBDetectEncoding()函数检测到不准确,那么可能是因为字节码生成器使用了其他编码方式。

      例如,如果一个字节码生成器使用了GBK编码,那么MBDetectEncoding()函数可能会返回"false"。此外,如果字节码生成器使用了某种自定义的编码方式,那么MBDetectEncoding()函数可能会返回"false"。

      如果你想找到字节码生成器是否使用了UTF-8,你可以使用以下代码:

      python def detect_encoding(byte_code): try: byte_code.decode('utf-8') return 'true' except UnicodeDecodeError: return 'false'

      这段代码尝试将字节码解码为UTF-8,如果成功,那么返回"true",否则返回"false"。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部