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