PHP UTF8中文字符截断函数代码


Posted in PHP onSeptember 11, 2012

php中英文混合字符截断不乱码函数(utf8)

//utf8格式下的中文字符截断
//$sourcestr 是要处理的字符串
//$cutlength 为截取的长度(即字数)
//$addstr 超过长度时在尾处加上的字符
function cut_str($sourcestr, $cutlength, $addstr='...'){
 $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 . $addstr;//超过长度时在尾处加上的字符
 }
 return $returnstr;
}
<?php 
/* UTF-8中文字符截断程序 */ 
$str = "123这是测试字符串"; 
$str1 = "()()"; 
echo subUTF8str($str,0,3)."<br>"; 
echo subUTF8str($str,0,4)."<br>"; 
echo subUTF8str($str1,0,4)."<br>"; 
echo subUTF8str($str1,0,10)."<br>"; 
function subUTF8str($str,$start=0,$length=80){ 
$cur_len = 0; //人理解的字符串长度 
$all_len = strlen($str); //机器理解字符串长度 
if($length > $all_len) 
{ 
return $str; 
} 
for($i = 0;$i < $all_len;) 
{ 
if($cur_len == $start) 
{ 
break; 
} 
if (ord($str[$i]) > 127) 
{ 
$i += 3; 
}else{ 
$i += 1; 
} 
$cur_len ++; 
} 
$start_pos = $i; 
$temp_pos = $cur_len; 
for(;$cur_len - $temp_pos < $length;) 
{ 
if($i >= $all_len) 
break; 
if (ord($str[$i]) > 127) 
{ 
$i += 3; 
}else{ 
$i += 1; 
} 
$cur_len ++; 
} 
$end_pos = $i; 
return substr($str,$start_pos,$end_pos); 
} 
?>

其实,PHP原生就有多charset下字符截取方案,额,所以就是这个样子...??.
Multibyte String Functions函数族中,

string mb_substr ( string $str , int $start [, int $length [, string $encoding ]] ) 用来字符串截取
int mb_strlen ( string $str [, string $encoding ] ) 返回字符串长度
....
详细请查看PHP手册

PHP 相关文章推荐
php强制下载类型的实现代码
Apr 21 PHP
PHP 第二节 数据类型之字符串类型
Apr 28 PHP
用PHP来计算某个目录大小的方法
Apr 01 PHP
ThinkPHP关于session的操作方法汇总
Jul 18 PHP
非常实用的PHP常用函数汇总
Dec 17 PHP
php实现递归与无限分类的方法
Feb 16 PHP
PHP+MySQL实现无极限分类栏目的方法
Dec 23 PHP
谈谈php对接芝麻信用踩的坑
Dec 01 PHP
基于PHP实现的多元线性回归模拟曲线算法
Jan 30 PHP
PHP中soap用法示例【SoapServer服务端与SoapClient客户端编写】
Dec 25 PHP
PHP进阶学习之反射基本概念与用法分析
Jun 18 PHP
Laravel中如何轻松容易的输出完整的SQL语句
Jul 26 PHP
php中将汉字转换成拼音的函数代码
Sep 08 #PHP
PHP json格式和js json格式 js跨域调用实现代码
Sep 08 #PHP
header跳转和include包含问题详解
Sep 08 #PHP
php比较多维数组中值的大小排序实现代码
Sep 08 #PHP
JSON在PHP中的应用介绍
Sep 08 #PHP
php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
Sep 07 #PHP
巧用php中的array_filter()函数去掉多维空值的代码分享
Sep 07 #PHP
You might like
帖几个PHP的无限分类实现想法~
2007/01/02 PHP
php缓冲 output_buffering的使用详解
2013/06/13 PHP
在yii中新增一个用户验证的方法详解
2013/06/20 PHP
关于查看MSSQL 数据库 用户每个表 占用的空间大小
2013/06/21 PHP
Laravel 创建可以传递参数 Console服务的例子
2019/10/14 PHP
Dom与浏览器兼容性说明
2010/10/25 Javascript
Javascript公共脚本库系列(一): 弹出层脚本
2011/02/24 Javascript
JavaScript字符串String和Array操作的有趣方法
2012/12/18 Javascript
js获取对象为null的解决方法
2013/11/21 Javascript
jquery实现ajax提交form表单的方法总结
2014/03/03 Javascript
AngularJS 让人爱不释手的八种功能
2016/03/23 Javascript
javascript实现任务栏消息提示的简单实例
2016/05/31 Javascript
javascript中闭包概念与用法深入理解
2016/12/15 Javascript
JS闭包可被利用的常见场景小结
2017/04/09 Javascript
在vue-cli搭建的项目中增加后台mock接口的方法
2018/04/26 Javascript
vuex 解决报错this.$store.commit is not a function的方法
2018/12/17 Javascript
如何用RxJS实现Redux Form
2018/12/29 Javascript
javascrit中undefined和null的区别详解
2019/04/07 Javascript
vue如何获取自定义元素属性参数值的方法
2019/05/14 Javascript
js尾调用优化的实现
2019/05/23 Javascript
微信小程序 腾讯地图显示偏差问题解决
2019/07/27 Javascript
如何在vue中使用jointjs过程解析
2020/05/29 Javascript
web.py在模板中输出美元符号的方法
2014/08/26 Python
利用python GDAL库读写geotiff格式的遥感影像方法
2018/11/29 Python
使用python动态生成波形曲线的实现
2019/12/04 Python
css3 pointer-events 介绍详解
2017/09/18 HTML / CSS
HTML5 标准将把互联网视频扔回到黑暗时代
2010/02/10 HTML / CSS
钉钉企业内部H5微应用开发详解
2020/05/12 HTML / CSS
"引用"与多态的关系
2013/02/01 面试题
自考生毕业自我鉴定
2013/10/10 职场文书
社会调查研究计划书
2014/05/01 职场文书
怎样写离婚协议书
2014/09/10 职场文书
党的群众路线教育实践活动个人对照检查材料(公安)
2014/11/05 职场文书
中学感恩教育活动总结
2015/05/05 职场文书
被告答辩状范文
2015/05/22 职场文书
导游词之青城山景区
2019/09/27 职场文书