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新手上路(六)
Oct 09 PHP
手把手教你使用DedeCms V3的在线采集图文教程
Apr 03 PHP
php 多个submit提交表单 处理方法
Jul 07 PHP
php Xdebug 调试扩展的安装与使用.
Mar 13 PHP
url decode problem 解决方法
Dec 26 PHP
PHP strstr 函数判断字符串是否否存在的实例代码
Sep 28 PHP
windows下配置php5.5开发环境及开发扩展
Dec 25 PHP
PHP转盘抽奖接口实例
Feb 09 PHP
smarty模板数学运算示例
Dec 11 PHP
PHP中empty,isset,is_null用法和区别
Feb 19 PHP
PHP实现时间比较和时间差计算的方法示例
Jul 24 PHP
Yii2.0实现生成二维码功能实例
Oct 24 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中的字符串函数
2006/11/24 PHP
浅析linux下apache服务器的配置和管理
2013/08/10 PHP
PHP获取服务器端信息的方法
2014/11/28 PHP
帝国CMS留言板回复后发送EMAIL通知客户
2015/07/06 PHP
php表单提交实例讲解
2015/11/12 PHP
PHP中如何判断exec函数执行成功?
2016/08/04 PHP
php中mkdir()函数的权限问题分析
2016/09/24 PHP
老生常谈PHP面向对象之标识映射
2017/06/21 PHP
php使用curl伪造来源ip和refer的方法示例
2018/05/08 PHP
PHP Swoole异步Redis客户端实现方法示例
2019/10/24 PHP
accesskey 提交
2006/06/26 Javascript
Javascript 网页水印(非图片水印)实现代码
2010/03/01 Javascript
浅析js中取绝对值的2种方法
2013/07/09 Javascript
javascript右下角弹层及自动隐藏(自己编写)
2013/11/20 Javascript
AngularJS初始化过程分析(引导程序)
2014/12/06 Javascript
JavaScript+html5 canvas实现图片破碎重组动画特效
2016/02/22 Javascript
BootStrap整体框架之基础布局组件
2016/12/15 Javascript
nodejs中全局变量的实例解析
2017/03/07 NodeJs
jQuery EasyUI的TreeGrid查询功能实现方法
2017/08/08 jQuery
Vue from-validate 表单验证的示例代码
2017/09/26 Javascript
VUE+Element UI实现简单的表格行内编辑效果的示例的代码
2018/10/31 Javascript
手把手教你如何使用nodejs编写cli命令行
2018/11/05 NodeJs
javascript将16进制的字符串转换为10进制整数hex
2020/03/05 Javascript
vue 遮罩层阻止默认滚动事件操作
2020/07/28 Javascript
webstorm建立vue-cli脚手架的傻瓜式教程
2020/09/22 Javascript
python保存文件方法小结
2018/07/27 Python
基于Python的ModbusTCP客户端实现详解
2019/07/13 Python
Python基于locals返回作用域字典
2020/10/17 Python
Pandas DataFrame求差集的示例代码
2020/12/13 Python
国际知名军事风格休闲装品牌:Alpha Industries(阿尔法工业)
2017/05/24 全球购物
美国亚马逊旗下男装网站:East Dane(支持中文)
2019/09/25 全球购物
自行车租赁公司创业计划书
2014/01/28 职场文书
教师绩效工资方案
2014/02/01 职场文书
心理学专业求职信
2014/06/16 职场文书
调解书格式范本
2015/05/20 职场文书
病假证明模板
2015/06/19 职场文书