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 相关文章推荐
几种显示数据的方法的比较
Oct 09 PHP
PHP开发中常用的8个小技巧
Aug 27 PHP
PHP仿博客园 个人博客(2) 数据库增添改删
Jul 05 PHP
Linux中用PHP判断程序运行状态的2个方法
May 04 PHP
PHP开源开发框架ZendFramework使用中常见问题说明及解决方案
Jun 12 PHP
php实现发送微信模板消息的方法
Mar 07 PHP
php猴子选大王问题解决方法
May 12 PHP
php生成4位数字验证码的实现代码
Nov 23 PHP
PHP编辑器PhpStrom运行缓慢问题
Feb 21 PHP
CodeIgniter框架钩子机制实现方法【hooks类】
Aug 21 PHP
yii框架数据库关联查询操作示例
Oct 14 PHP
php实现JWT(json web token)鉴权实例详解
Nov 05 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 Mysql日期和时间函数集合
2007/11/16 PHP
PHP+JS+rsa数据加密传输实现代码
2011/03/23 PHP
了解PHP的返回引用和局部静态变量
2015/06/04 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
PHP实现数据库的增删查改功能及完整代码
2018/04/18 PHP
php使用scandir()函数扫描指定目录下所有文件示例
2019/06/08 PHP
短信提示使用 特效
2007/01/19 Javascript
javascript下判断一个元素是否存在的代码
2010/03/05 Javascript
getAsDataURL在Firefox7.0下无法预览本地图片的解决方法
2013/11/15 Javascript
jquery禁用右键示例
2014/04/28 Javascript
Javascript让DEDECMS告别手写Tag
2014/09/01 Javascript
JS获得图片alt信息的方法
2015/04/01 Javascript
javascript中的previousSibling和nextSibling的正确用法
2015/09/16 Javascript
javascript的理解及经典案例分析
2016/05/20 Javascript
JavaScript编写带旋转+线条干扰的验证码脚本实例
2016/05/30 Javascript
Javascript 实现放大镜效果实例详解
2016/12/03 Javascript
canvas知识总结
2017/01/25 Javascript
AngularJS service之select下拉菜单效果
2017/07/28 Javascript
vue2.0 资源文件assets和static的区别详解
2018/04/08 Javascript
Vue中的$set的使用实例代码
2018/10/08 Javascript
Vue中Table组件Select的勾选和取消勾选事件详解
2019/03/19 Javascript
vue.config.js常用配置详解
2019/11/14 Javascript
JS操作JSON常用方法(10w阅读)
2020/12/06 Javascript
python机器学习实战之K均值聚类
2017/12/20 Python
使用TensorFlow实现SVM
2018/09/06 Python
pandas.cut具体使用总结
2019/06/24 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
2019/09/25 Python
python 字典有序并写入json文件过程解析
2019/09/30 Python
Python json格式化打印实现过程解析
2020/07/21 Python
护士岗位职责
2014/02/16 职场文书
根叔历年演讲稿
2014/05/20 职场文书
幼儿园教师师德师风演讲稿:爱我所爱 无悔青春
2014/09/10 职场文书
村党的群众路线教育实践活动总结材料
2014/10/31 职场文书
2014年共青团工作总结
2014/12/10 职场文书
在前女友婚礼上,用Python破解了现场的WIFI还把名称改成了
2021/05/28 Python
如何使用 resize 实现图片切换预览功能
2021/08/23 HTML / CSS