最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
示例:PHP针对中英文混合字符串长度判断及截取
时间:2022-06-24 22:42:22 编辑:袖梨 来源:一聚教程网
/**
*
* 中英混合字符串长度判断
* @param unknown_type $str
* @param unknown_type $charset
*/
functionstrLength($str,$charset='utf-8') {
if($charset=='utf-8')
$str= iconv ('utf-8','gb2312',$str);
$num=strlen($str);
$cnNum= 0;
for($i= 0;$i<$num;$i++) {
if(ord (substr($str,$i+ 1, 1 ) ) > 127) {
$cnNum++;
$i++;
}
}
$enNum=$num- ($cnNum* 2);
$number= ($enNum/ 2) +$cnNum;
returnceil($number);
}
/**
*
* 中英混合的字符串截取
* @param unknown_type $sourcestr
* @param unknown_type $cutlength
*/
functioncut_str($sourcestr,$cutlength) {
$returnstr=''
$i= 0;
$n= 0;
$str_length=strlen($sourcestr);//字符串的字节数
while( ($n<$cutlength)and($i<=$str_length) ) {
$temp_str=substr($sourcestr,$i, 1 );
$ascnum= Ord ($temp_str);//得到字符串中第$i位字符的ascii码
if($ascnum>= 224)//如果ASCII位高与224,
{
$returnstr=$returnstr.substr($sourcestr,$i, 3 );//根据UTF-8编码规范,将3个连续的字符计为单个字符
$i=$i+ 3;//实际Byte计为3
$n++;//字串长度计1
}elseif($ascnum>= 192)//如果ASCII位高与192,
{
$returnstr=$returnstr.substr($sourcestr,$i, 2 );//根据UTF-8编码规范,将2个连续的字符计为单个字符
$i=$i+ 2;//实际Byte计为2
$n++;//字串长度计1
}elseif($ascnum>= 65 &&$ascnum<= 90)//如果是大写字母,
{
$returnstr=$returnstr.substr($sourcestr,$i, 1 );
$i=$i+ 1;//实际的Byte数仍计1个
$n++;//但考虑整体美观,大写字母计成一个高位字符
}else//其他情况下,包括小写字母和半角标点符号,
{
$returnstr=$returnstr.substr($sourcestr,$i, 1 );
$i=$i+ 1;//实际的Byte数计1个
$n=$n+ 0.5;//小写字母和半角标点等与半个高位字符宽...
}
}
if($str_length>$cutlength) {
$returnstr=$returnstr."...";//超过长度时在尾处加上省略号
}
return$returnstr;
}
代码如下 | 复制代码 |
相关文章
- 王者荣耀侦探能力大测试攻略 王者荣耀侦探能力大测试怎么过 11-22
- 无期迷途主线前瞻兑换码是什么 11-22
- 原神欧洛伦怎么培养 11-22
- 炉石传说网易云音乐联动怎么玩 11-22
- 永劫无间手游确幸转盘怎么样 11-22
- 无期迷途主线前瞻兑换码是什么 无期迷途主线前瞻直播兑换码介绍 11-22