PHP unicode和字符串的相互转换

April 24, 2019 技术

网上一堆错的unicode编码例子,没有一个对的,全是抄来抄去,坑啊,修修补补终于改好了

这是可用的unicode编码例子:

/**
* $str 原始中文字符串
* $encoding 原始字符串的编码,默认utf-8
* $prefix 编码后的前缀,默认"\u"
* $postfix 编码后的后缀,默认""
*/
function unicodeEncode($str, $encoding = 'utf-8', $prefix = '\u', $postfix = '') {
    //将字符串拆分
    $str = iconv("UTF-8", "gb2312", $str);
    $cind = 0;
    $arr_cont = array();
    $unicodestr = '';
    for ($i = 0; $i < strlen($str); $i++) {
        if (strlen(substr($str, $cind, 1)) > 0) {
            if (ord(substr($str, $cind, 1)) < 0xA1) { //如果为英文则取1个字节
                array_push($arr_cont, substr($str, $cind, 1));
                $cind++;
            } else {
                array_push($arr_cont, substr($str, $cind, 2));
                $cind+=2;
            }
        }
    }
    foreach ($arr_cont as &$row) {
        $row = iconv("gb2312", "UTF-8", $row);
    }
    //转换Unicode码
    foreach ($arr_cont as $key => $value) {
        $unicodestr.= $prefix .str_pad( base_convert(bin2hex(iconv('utf-8', 'UCS-4', $value)), 16, 16) , 4, 0, STR_PAD_LEFT) .$postfix;
    }
    return $unicodestr;
}

unicode的解码就很简单粗暴了。

function unicodeDecode($unicode_str){
    $json = '{"str":"'.$unicode_str.'"}';
    $arr = json_decode($json,true);
    if(empty($arr)) return '';
    return $arr['str'];
}

添加新评论