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 变量定义方法
Jun 14 PHP
认识并使用PHP超级全局变量
Jan 26 PHP
发款php蜘蛛统计插件只要有mysql就可用
Oct 12 PHP
php错误提示failed to open stream: HTTP request failed!的完美解决方法
Jun 06 PHP
PHP函数preg_match_all正则表达式的基本使用详细解析
Aug 31 PHP
php的mssql数据库连接类实例
Nov 28 PHP
php输入数据统一类实例
Feb 23 PHP
php跨服务器访问方法小结
May 12 PHP
PHP中4种常用的抓取网络数据方法
Jun 04 PHP
PHP数组操作简单案例分析
Oct 15 PHP
Laravel框架实现调用百度翻译API功能示例
May 30 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
上海永华YH-R296(华普R-96)12波段立体声收音机的分析和打理
2021/03/02 无线电
php计算两个文件相对路径的方法
2015/03/14 PHP
PHP中PDO连接数据库中各种DNS设置方法小结
2016/05/13 PHP
php的debug相关函数用法示例
2016/07/11 PHP
修改Laravel5.3中的路由文件与路径
2016/08/10 PHP
Yii框架安装简明教程
2020/05/15 PHP
jQuery EasyUI API 中文文档 - Menu菜单
2011/10/03 Javascript
js如何判断用户是在PC端和还是移动端访问
2014/04/24 Javascript
纯js实现div内图片自适应大小(已测试,兼容火狐)
2014/06/16 Javascript
jQuery插件之jQuery.Form.js用法实例分析(附demo示例源码)
2016/01/04 Javascript
js 创建对象 经典模式全面了解
2016/08/16 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
2016/11/02 Javascript
理解AngularJs篇:30分钟快速掌握AngularJs
2016/12/23 Javascript
CentOS 安装NodeJS V8.0.0的方法
2017/06/15 NodeJs
JavaScript创建对象的七种方式(推荐)
2017/06/26 Javascript
详解使用angularjs的ng-options时如何设置默认值(初始值)
2017/07/18 Javascript
vue如何引入sass全局变量
2018/06/28 Javascript
小程序清理本地缓存的方法
2018/08/17 Javascript
JavaScript数组方法的错误使用例子
2018/09/13 Javascript
小程序实现展开/收起的效果示例
2018/09/22 Javascript
用Nodejs实现在终端中炒股的实现
2020/10/18 NodeJs
python lambda表达式在sort函数中的使用详解
2019/08/28 Python
解决Python图形界面中设置尺寸的问题
2020/03/05 Python
Django 项目布局方法(值得推荐)
2020/03/22 Python
Django数据结果集序列化并展示实现过程
2020/04/22 Python
Python基于BeautifulSoup爬取京东商品信息
2020/06/01 Python
Python学习笔记之装饰器
2020/08/06 Python
Python装饰器如何实现修复过程解析
2020/09/05 Python
浏览器实现移动端高性能css3动画(开启gpu加速)
2013/12/23 HTML / CSS
使用css如何制作时间ICON方法实践
2012/11/12 HTML / CSS
加拿大最大的箱包及旅游配件零售商:Bentley Leathers
2017/07/19 全球购物
机修工岗位职责
2013/11/24 职场文书
西柏坡导游词
2015/02/05 职场文书
村官个人总结范文
2015/03/03 职场文书
终止合同协议书范本
2016/03/22 职场文书
python实现层次聚类的方法
2021/11/01 Python