效果:
中国 =>ZG
- 中文转化为英文首字母 中国:ZG ;中2国:ZG;z国:ZG
- 1:省略了数字(不转化)
用法:
$result =Character::getEnByCnByString(‘i是中国人’,3);//这边的3为截取的长度
echo $result;
结果:
代码
<?php
/*** @author liaosp.top* @Time: 2018/12/4 -16:39* @Version 1.0* @Describe: 中文转化为英文首字母 中国:ZG ;中2国:ZG;z国:ZG* 1:省略了数字* 2:* ...*/
class Character{/*** @param $string* @param int $length 转化的长度** @return bool|string*/public static function getEnByCnByString($string, $length=10){if(empty($string)){return false;}preg_match_all("/./u", $string, $arr);$exp =$arr[0];if(empty($exp)){return false;}$sum =1;$res ='';foreach ($exp as $key=>$value){$cha = self::getFirstCharter($value);$res.=$cha;if(!empty($cha)){$sum++;}if($sum >$length){return $res;}}return $res;}/*** 转化中文为字母的工具* @param $str* @return null|string*/public static function getFirstCharter($str){if(is_numeric($str)){return '';}if (empty($str)) {return '';}$fchar = ord($str{0});if ($fchar >= ord('A') && $fchar <= ord('z'))return strtoupper($str{0});$s1 = iconv('UTF-8', 'gb2312', $str);$s2 = iconv('gb2312', 'UTF-8', $s1);$s = $s2 == $str ? $s1 : $str;$asc = ord($s{0}) * 256 + ord($s{1}) - 65536;if ($asc >= -20319 && $asc <= -20284)return 'A';if ($asc >= -20283 && $asc <= -19776)return 'B';if ($asc >= -19775 && $asc <= -19219)return 'C';if ($asc >= -19218 && $asc <= -18711)return 'D';if ($asc >= -18710 && $asc <= -18527)return 'E';if ($asc >= -18526 && $asc <= -18240)return 'F';if ($asc >= -18239 && $asc <= -17923)return 'G';if ($asc >= -17922 && $asc <= -17418)return 'H';if ($asc >= -17417 && $asc <= -16475)return 'J';if ($asc >= -16474 && $asc <= -16213)return 'K';if ($asc >= -16212 && $asc <= -15641)return 'L';if ($asc >= -15640 && $asc <= -15166)return 'M';if ($asc >= -15165 && $asc <= -14923)return 'N';if ($asc >= -14922 && $asc <= -14915)return 'O';if ($asc >= -14914 && $asc <= -14631)return 'P';if ($asc >= -14630 && $asc <= -14150)return 'Q';if ($asc >= -14149 && $asc <= -14091)return 'R';if ($asc >= -14090 && $asc <= -13319)return 'S';if ($asc >= -13318 && $asc <= -12839)return 'T';if ($asc >= -12838 && $asc <= -12557)return 'W';if ($asc >= -12556 && $asc <= -11848)return 'X';if ($asc >= -11847 && $asc <= -11056)return 'Y';if ($asc >= -11055 && $asc <= -10247)return 'Z';return null;}
}
//用法
$result =Character::getEnByCnByString('I是中国人',3);
echo $result;
github:https://github.com/liaoshengping/phpNote
参考: php分割中文字符串为数组的简单例子