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 02 PHP
php中通过虚代理实现延迟加载的实现代码
Jun 10 PHP
PHP生成不重复随机数的方法汇总
Nov 19 PHP
ThinkPHP模版引擎之变量输出详解
Dec 05 PHP
php表单敏感字符过滤类
Dec 08 PHP
PHP5.3以上版本安装ZendOptimizer扩展
Mar 27 PHP
php简单实现查询数据库返回json数据
Apr 16 PHP
php验证邮箱和ip地址最简单方法汇总
Oct 30 PHP
PHP几个实用自定义函数小结
Jan 25 PHP
PHP实现多图上传(结合uploadify插件)思路分析
Nov 30 PHP
php PDO属性设置与操作方法分析
Dec 27 PHP
laravel框架邮箱认证实现方法详解
Nov 22 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
模板引擎正则表达式调试小技巧
2011/07/20 PHP
javascript模仿msgbox提示效果代码
2008/06/10 Javascript
jQuery 性能优化手册 推荐
2010/02/23 Javascript
原生js实现半透明遮罩层效果具体代码
2013/06/06 Javascript
Web表单提交之disabled问题js解决方法
2015/01/13 Javascript
jQuery实现弹出窗口中切换登录与注册表单
2015/06/05 Javascript
JavaScript数组迭代器实例分析
2015/06/09 Javascript
详解AngularJS中自定义过滤器
2015/12/28 Javascript
浅谈jQuery 中的事件冒泡和阻止默认行为
2016/05/28 Javascript
js中字符型和数值型数字的互相转化方法(必看)
2017/04/25 Javascript
如何让你的JS代码更好看易读
2017/12/01 Javascript
vue中本地静态图片路径写法
2018/03/06 Javascript
使用vue-cli打包过程中的步骤以及问题的解决
2018/05/08 Javascript
Vue中保存数据到磁盘文件的方法
2018/09/06 Javascript
bootstrap tooltips在 angularJS中的使用方法
2019/04/10 Javascript
js常用正则表达式集锦
2019/05/17 Javascript
Layui Table js 模拟选中checkbox的例子
2019/09/03 Javascript
微信小程序如何实现点击图片放大功能
2020/01/21 Javascript
vue+springboot+element+vue-resource实现文件上传教程
2020/10/21 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
2020/10/29 Javascript
微信小程序 接入腾讯地图的两种写法
2021/01/12 Javascript
django 常用orm操作详解
2017/09/13 Python
python利用urllib和urllib2访问http的GET/POST详解
2017/09/27 Python
Python通过matplotlib画双层饼图及环形图简单示例
2017/12/15 Python
使用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
2018/03/23 Python
详解python深浅拷贝区别
2019/06/24 Python
python获取网络图片方法及整理过程详解
2019/12/20 Python
Python 输出详细的异常信息(traceback)方式
2020/04/08 Python
Python下划线5种含义代码实例解析
2020/07/10 Python
分享29个基于Bootstrap的HTML5响应式网页设计模板
2015/11/19 HTML / CSS
使用phonegap进行本地存储的实现方法
2017/03/31 HTML / CSS
世界汽车零件:World Car Parts
2019/09/04 全球购物
技术总监管理岗位职责
2014/03/09 职场文书
幼儿园欢迎词范文
2015/01/26 职场文书
2015年教师党员自我评价材料
2015/03/04 职场文书
2015年汽车销售员工作总结
2015/07/24 职场文书