东林博客

PHP 判断字符串是否为UTF8并自动转换

最近写了一个智能硬件终端系统,使用的是PHP+Swoole。消息持久化使用的是阿里云的TableStore。监控系统偶尔会报:

【TSP】【生产环境】【API: PutRow, HttpStatus: 400, OTSErrorCode: OTSParameterInvalid, OTSErrorMsg: Value of column 'message' must be UTF8 encoding., RequestId: 00058f7b-b58a-26cd-d799-c80b01052d7b】

向TableStore插入的硬件上行报文中存在非UTF8,也就是TableStore必须保存UTF8编码的实体。需要先判断消息文本是否为UTF8,如果不是,则自动转为UTF8。支持自动检测ASCII,GBK,GB2312,BIG5

    public static function strToUtf8($str){
        $encode = mb_detect_encoding($str, array("ASCII",'UTF-8',"GB2312","GBK",'BIG5'));
        if($encode == 'UTF-8'){
            return $str;
        }else{
            return mb_convert_encoding($str, 'UTF-8', $encode);
        }
    }


{{tip}}