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文件读写操作之文件写入代码
Jan 13 PHP
PHP中的session永不过期的解决思路及实现方法分享
Apr 20 PHP
解析php常用image图像函数集
Jun 24 PHP
PHP内置的Math函数效率测试
Dec 01 PHP
php使用substr()和strpos()联合查找字符串中某一特定字符的方法
May 12 PHP
分享ThinkPHP3.2中关联查询解决思路
Sep 20 PHP
实现PHP搜索加分页
Oct 12 PHP
php高清晰度无损图片压缩功能的实现代码
Dec 09 PHP
PHP删除数组中特定元素的两种方法
Feb 28 PHP
浅谈php使用curl模拟多线程发送请求
Mar 08 PHP
php多进程中的阻塞与非阻塞操作实例分析
Mar 04 PHP
PHP中->和=>的意思
Mar 31 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
[EPIC] Larva vs Flash ZvT @ Crossing Field [2017-10-09]
2020/03/17 星际争霸
Windows2003 下 MySQL 数据库每天自动备份
2006/12/21 PHP
PHP中ADODB类详解
2008/03/25 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
2016/12/23 PHP
Yii框架中使用PHPExcel的方法分析
2019/07/25 PHP
javascript基本语法分析说明
2008/06/15 Javascript
Jquery Ajax学习实例6 向WebService发出请求,返回DataSet(XML) 异步调用
2010/03/18 Javascript
jquery选择器的选择使用及性能介绍
2013/01/16 Javascript
javascript date格式化示例
2013/09/25 Javascript
JS根据浏览器窗口大小实时动态改变网页文字大小的方法
2016/02/25 Javascript
如何用JavaScript实现动态修改CSS样式表
2016/05/20 Javascript
bootstrap实现图片自动轮播
2016/12/21 Javascript
JavaScript与JQUERY获取元素的宽、高和位置
2017/02/26 Javascript
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
2017/04/01 Javascript
Bootstrap datepicker日期选择器插件使用详解
2017/07/26 Javascript
用Vue.extend构建消息提示组件的方法实例
2017/08/08 Javascript
浅谈Angular2 模块懒加载的方法
2017/10/04 Javascript
微信小程序实现MUI数字输入框效果
2018/01/31 Javascript
vue watch普通监听和深度监听实例详解(数组和对象)
2018/08/16 Javascript
利用React Router4实现的服务端直出渲染(SSR)
2019/01/07 Javascript
JavaScript实现浏览器网页自动滚动并点击的示例代码
2020/12/05 Javascript
Webpack3+React16代码分割的实现
2021/03/03 Javascript
rhythmbox中文名乱码问题解决方法
2008/09/06 Python
Python格式化压缩后的JS文件的方法
2015/03/05 Python
列举Python中吸引人的一些特性
2015/04/09 Python
详解K-means算法在Python中的实现
2017/12/05 Python
python使用folium库绘制地图点击框
2018/09/21 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
2019/05/13 Python
基于Tensorflow:CPU性能分析
2020/02/10 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
2020/02/20 Python
解决echarts中饼图标签重叠的问题
2020/05/16 Python
英语硕士生求职简历的自我评价
2013/10/15 职场文书
2015年119消防宣传日活动总结
2015/03/24 职场文书
社区环境卫生倡议书
2015/04/29 职场文书
趣味运动会新闻稿
2015/07/17 职场文书
Nginx同一个域名配置多个项目的实现方法
2021/03/31 Servers