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 相关文章推荐
cache_lite试用
Feb 14 PHP
php 注释规范
Mar 29 PHP
PHP闭包(Closure)使用详解
May 02 PHP
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
Jun 25 PHP
关于url地址传参数时字符串有回车造成页面脚本赋值失败的解决方法
Jun 28 PHP
php循环创建目录示例分享(php创建多级目录)
Mar 04 PHP
仿dedecms下拉分页样式修改的thinkphp分页类实例
Oct 30 PHP
php获取本周星期一具体日期的方法
Apr 20 PHP
php搜索文件程序分享
Oct 30 PHP
asp.net和php的区别点总结
Oct 10 PHP
Thinkphp5.0 框架实现控制器向视图view赋值及视图view取值操作示例
Oct 12 PHP
Laravel框架Eloquent ORM删除数据操作示例
Dec 03 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
thinkPHP查询方式小结
2016/01/09 PHP
Zend Framework动作助手FlashMessenger用法详解
2016/03/05 PHP
javascript call和apply方法
2008/11/24 Javascript
JS 拼图游戏 面向对象,注释完整。
2009/06/18 Javascript
几个有趣的Javascript Hack
2010/07/24 Javascript
原生Js实现按的数据源均分时间点幻灯片效果(已封装)
2010/12/28 Javascript
根据邮箱的域名跳转到相应的登录页面的代码
2012/02/27 Javascript
JS仿百度搜索自动提示框匹配查询功能
2013/11/21 Javascript
js四舍五入数学函数round使用实例
2014/05/09 Javascript
JS中的THIS和WINDOW.EVENT.SRCELEMENT详解
2015/05/25 Javascript
javascript中caller和callee详解
2015/08/10 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
jQuery Html控件基本操作(日常收集整理)
2016/03/11 Javascript
解析浏览器端的AJAX缓存机制
2016/06/21 Javascript
Vue.js教程之axios与网络传输的学习实践
2017/04/29 Javascript
Vue SSR 组件加载问题
2018/05/02 Javascript
vue.js template模板的使用(仿饿了么布局)
2018/08/13 Javascript
JS实现点击按钮随机生成可拖动的不同颜色块示例
2019/01/30 Javascript
使用XML库的方式,实现RPC通信的方法(推荐)
2017/06/14 Python
Python中实现最小二乘法思路及实现代码
2018/01/04 Python
Python管理Windows服务小脚本
2018/03/12 Python
Python判断变量名是否合法的方法示例
2019/01/28 Python
浅析python的Lambda表达式
2019/02/27 Python
Python 实现数据结构-循环队列的操作方法
2019/07/17 Python
Python CVXOPT模块安装及使用解析
2019/08/01 Python
Python数据分析模块pandas用法详解
2019/09/04 Python
python快速排序的实现及运行时间比较
2019/11/22 Python
Python使用matplotlib绘制Logistic曲线操作示例
2019/11/28 Python
pytorch 自定义参数不更新方式
2020/01/06 Python
python实现堆排序的实例讲解
2020/02/21 Python
详解基于Scrapy的IP代理池搭建
2020/09/29 Python
发现两个有趣的CSS3动画效果
2013/08/14 HTML / CSS
关于旷工的检讨书
2014/02/02 职场文书
2014年教师学期工作总结
2014/11/08 职场文书
Nginx的rewrite模块详解
2021/03/31 Servers
Python帮你解决手机qq微信内存占用太多问题
2022/02/15 Python