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控制用户的浏览器--ob*函数的使用说明
Mar 16 PHP
phpMyAdmin下载、安装和使用入门教程
May 31 PHP
php中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
Jan 16 PHP
关于PHP二进制流 逐bit的低位在前算法(详解)
Jun 13 PHP
php取整函数ceil,floo,round的用法及介绍
Aug 31 PHP
教你如何使用php session
Oct 28 PHP
生成随机字符串和验证码的类的PHP实例
Dec 24 PHP
PHP程序员基本要求和必备技能
May 09 PHP
php实现文件下载代码分享
Aug 19 PHP
php中get_meta_tags()、CURL与user-agent用法分析
Dec 16 PHP
PHP可变函数学习小结
Nov 29 PHP
nginx下安装php7+php5
Jul 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
PHP学习之字符串比较和查找
2011/04/17 PHP
php中使用gd库实现下载网页中所有图片
2015/05/12 PHP
PHP7安装Redis扩展教程【Linux与Windows平台】
2016/09/30 PHP
HTTP状态代码以及定义(解释)
2007/02/02 Javascript
js(jQuery)获取时间的方法及常用时间类搜集
2013/10/23 Javascript
JS实现闪动的title消息提醒效果
2014/06/20 Javascript
jQuery .tmpl() 用法示例介绍
2014/08/21 Javascript
运行Node.js的IIS扩展iisnode安装配置笔记
2015/03/02 Javascript
实例解析JS布尔对象的toString()方法和valueOf()方法
2015/10/25 Javascript
js实现密码强度检测【附示例】
2016/03/30 Javascript
全面介绍javascript实用技巧及单竖杠
2016/07/18 Javascript
vue实现城市列表选择功能
2018/07/16 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
通过JQuery,JQueryUI和Jsplumb实现拖拽模块
2019/06/18 jQuery
使用Vue 自定义文件选择器组件的实例代码
2020/03/04 Javascript
echarts实现获取datazoom的起始值(包括x轴和y轴)
2020/07/20 Javascript
vue 在methods中调用mounted的实现操作
2020/08/07 Javascript
Python代码的打包与发布详解
2014/07/30 Python
Python 数据处理库 pandas 入门教程基本操作
2018/04/19 Python
python 把列表转化为字符串的方法
2018/10/23 Python
pytorch 常用线性函数详解
2020/01/15 Python
Python unittest单元测试openpyxl实现过程解析
2020/05/27 Python
浅谈keras使用中val_acc和acc值不同步的思考
2020/06/18 Python
CSS3 mask 遮罩的具体使用方法
2017/11/03 HTML / CSS
酷瑞网络科技面试题
2012/03/30 面试题
测试驱动开发的主要步骤是什么
2014/12/10 面试题
机械制造专业毕业生求职信
2014/03/02 职场文书
机关搬迁方案
2014/05/18 职场文书
投标保密承诺书
2014/05/19 职场文书
助理政工师申报材料
2014/06/03 职场文书
2014年应急工作总结
2014/12/11 职场文书
2014年加油站站长工作总结
2014/12/23 职场文书
2015最新婚礼主持词
2015/06/30 职场文书
2015年学校消防安全工作总结
2015/10/14 职场文书
执行力心得体会范文
2016/01/11 职场文书
3招让你摆脱即兴讲话冷场尴尬
2019/08/08 职场文书