最新下载
热门教程
- 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;
}
代码如下 | 复制代码 |
相关文章
- 《弓箭传说2》新手玩法介绍 01-16
- 《地下城与勇士:起源》断桥烟雨多买多送活动内容一览 01-16
- 《差不多高手》醉拳龙技能特点分享 01-16
- 《鬼谷八荒》毕方尾羽解除限制道具推荐 01-16
- 《地下城与勇士:起源》阿拉德首次迎新春活动内容一览 01-16
- 《差不多高手》情圣技能特点分享 01-16