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 相关文章推荐
服务器端解压缩zip的脚本
Dec 22 PHP
调整优化您的LAMP应用程序的5种简单方法
Jun 26 PHP
基于php无限分类的深入理解
Jun 02 PHP
浅析PKI加密解密 OpenSSL
Jul 01 PHP
php中如何防止表单的重复提交
Aug 02 PHP
Linux下手动编译安装PHP扩展的例子分享
Jul 15 PHP
php+mysql实现无限级分类
Nov 11 PHP
在Mac OS上自行编译安装Apache服务器和PHP解释器
Dec 24 PHP
Yii2增加验证码步骤详解
Apr 25 PHP
自定义min版smarty模板引擎MinSmarty.class.php文件及用法
May 20 PHP
php 流程控制switch的简单实例
Jun 07 PHP
php 人员权限管理(RBAC)实例(推荐)
May 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
一个更简单的无限级分类菜单代码
2007/01/16 PHP
php中根据某年第几天计算出日期年月日的代码
2011/02/24 PHP
CodeIgniter配置之SESSION用法实例分析
2016/01/19 PHP
Laravel5.5 手动分页和自定义分页样式的简单实现
2019/10/15 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
HTML中事件触发列表与解说
2007/07/09 Javascript
CCPry JS类库 代码
2009/10/30 Javascript
JavaScript 学习笔记(十三)Dom创建表格
2010/01/21 Javascript
JavaScript 对象模型 执行模型
2010/10/15 Javascript
导航跟随滚动条置顶移动示例代码
2013/09/11 Javascript
js星星评分效果
2014/07/24 Javascript
移动端JQ插件hammer使用详解
2015/07/03 Javascript
JavaScript实现的简单烟花特效代码
2015/10/20 Javascript
jQuery validate验证插件使用详解
2016/05/11 Javascript
简述Angular 5 快速入门
2017/11/04 Javascript
解决Vue中引入swiper,在数据渲染的时候,发生不滑动的问题
2018/09/27 Javascript
利用node 判断打开的是文件 还是 文件夹的实例
2019/06/10 Javascript
JavaScript oncopy事件用法实例解析
2020/05/13 Javascript
解决vue与node模版引擎的渲染标记{{}}(双花括号)冲突问题
2020/09/11 Javascript
[46:16]2018DOTA2亚洲邀请赛3月30日 小组赛B组 iG VS VP
2018/03/31 DOTA
Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
2014/06/10 Python
Python 实现购物商城,含有用户入口和商家入口的示例
2017/09/15 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
2018/05/24 Python
jupyter notebook清除输出方式
2020/04/10 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
2020/05/20 Python
django 获取字段最大值,最新的记录操作
2020/08/09 Python
python MD5加密的示例
2020/10/19 Python
flask框架中的cookie和session使用
2021/01/31 Python
一款CSS3实现多功能下拉菜单(带分享按)的教程
2014/11/05 HTML / CSS
Canvas制作的下雨动画的示例
2018/03/06 HTML / CSS
英国蜡烛、蜡烛配件和家居香氛购买网站:Yankee Candle
2018/12/12 全球购物
纽约市的奢华内衣目的地:Anya Lust
2019/08/02 全球购物
应届毕业生的个人自我鉴定
2013/10/24 职场文书
统计岗位职责
2014/02/21 职场文书
运动会5000米加油稿
2015/07/21 职场文书
CSS作用域(样式分割)的使用汇总
2021/11/07 HTML / CSS