Unicode编码转换之PHP方法

<?php
/*
 *  功能: 字符Unicode编码转换
 *  参数一: 要转码的字符串
 *  参数二: 是否转码ASCII字符 默认不转码
 *  
 */
function unicode_encode($string, $isAll = false){
    $string = iconv('UTF-8', 'UCS-2', $string); // 将字符编码转换为 UCS-2
    $strLen = strlen($string) - 1;   // 获取字符长度
    $retStr = '';
    for ($i = 0; $i < $strLen; $i = $i + 2){
        $codeA = ord($string[$i]);  // 取出第一位 字节
        $codeB = $string[$i+1]; // 取出第二位字符
        // 如果第一位字节大于0则表示是扩展字符(汉字) 否则为 ASCII字符
        if($codeA > 0){
            $retStr.= '&#' . ($codeA * 256 + ord($codeB)) . ';';
        }else{
            // 判断ASCII字符是否转码
            $retStr.= $isAll ? '&#' . ord($codeB) . ';' : $codeB;
        }
    }
    return $retStr;
}

/*
 *  功能: Unicode编码转换字符
 *  参数一: 要转码的字符串
 *  参数二: 是否转码ASCII字符 默认不转码
 *  
 */
function unicode_decode($string){
    $pregStr = '/&#([0-9]+);/';
    // 进行匹配并在出错时返回
    if(preg_match_all($pregStr, $string, $codeList, PREG_OFFSET_CAPTURE) === false) return false;
    $retStr = '';
    $repOffset = 0;
    foreach ($codeList['1'] as $key => $value){
        // 大于255 则说明是2位字节 (汉字)
        $code = intval($value['0']);    // 转换为整数
        // 如果大于255 则说明有两个字节
        $codeB = $code % 256;   // 取第二个字节的内容
        if($code > 255){
            $codeA = ($code - $codeB) / 256;    // 计算出第一个字节
            $newStr = chr($codeA) . chr($codeB);    // 拼接成一个字符
            $newStr = iconv('UCS-2', 'UTF-8', $newStr); // 将字符编码转换为 UCS-2
        }else{
            $newStr = chr($codeB);    // 拼接成一个字符
        }
        // 替换掉原来的内容
        $repLen = strlen($codeList['0'][$key]['0']);
        $repStart = $codeList['0'][$key]['1'];
        $string = substr_replace($string, $newStr, $repStart - $repOffset, $repLen);
        $repOffset+= $repLen - strlen($newStr);
    }
    return $string;
}

$str = '锄禾日当午,HanDi禾下土;举头望明月,12345...';

// 进行编码
$enStr =  unicode_encode($str, true);
echo $enStr . "\n";
// 进行解码
$deStr = unicode_decode($enStr);
echo $deStr . "\n";

?>

温馨提示:
1.本站大部分内容均收集于网络!若内容若侵犯到您的权益,请发送邮件至:duhaomu@163.com,我们将第一时间处理!
2.资源所需价格并非资源售卖价格,是收集、整理、编辑详情以及本站运营的适当补贴,并且本站不提供任何免费技术支持。
3.所有资源仅限于参考和学习,版权归原作者所有,更多请阅读网站声明

给TA赞赏
共{{data.count}}人
人已赞赏
未整理

室内手绘入门教程视频课程

2021-3-25 0:00:00

未整理

私域流量如何引流?私域流量实战营,7 天收获属于您的私域流量池

2021-3-27 0:00:00

0 条回复 A文章作者 M管理员
----《》
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索