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中数据的批量导入(csv文件)
Oct 09 PHP
在同一窗体中使用PHP来处理多个提交任务
Oct 09 PHP
php学习笔记之 函数声明
Jun 09 PHP
PHP 第二节 数据类型之数值型
Apr 28 PHP
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
Apr 08 PHP
php冒泡排序、快速排序、快速查找、二维数组去重实例分享
Apr 24 PHP
php自动获取关键字的方法
Jan 06 PHP
php模拟服务器实现autoindex效果的方法
Mar 10 PHP
php中smarty变量修饰用法实例分析
Jun 11 PHP
PHP实现导出excel数据的类库用法示例
Oct 15 PHP
php-fpm中max_children的配置
Mar 15 PHP
PHP SESSION跨页面传递失败解决方案
Dec 11 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
PHP5中的时间相差8小时的解决办法
2008/03/28 PHP
php安装xdebug/php安装pear/phpunit详解步骤(图)
2013/12/22 PHP
php中的filesystem文件系统函数介绍及使用示例
2014/02/13 PHP
CI框架中libraries,helpers,hooks文件夹详细说明
2014/06/10 PHP
表单元素事件 (Form Element Events)
2009/07/17 Javascript
JS组件Bootstrap按钮组与下拉按钮详解
2016/05/10 Javascript
基于JavaScript实现瀑布流效果
2017/03/29 Javascript
JS简单判断字符在另一个字符串中出现次数的2种常用方法
2017/04/20 Javascript
jQuery输入框密码的显示隐藏【代码分享】
2017/04/29 jQuery
nodejs socket实现的服务端和客户端功能示例
2017/06/02 NodeJs
Node.js 8 中的重要新特性
2017/06/28 Javascript
jquery动态添加带有样式的HTML标签元素方法
2018/02/24 jQuery
WebSocket的通信过程与实现方法详解
2018/04/29 Javascript
vue项目使用微信公众号支付总结及遇到的坑
2018/10/23 Javascript
Vue组件化开发之通用型弹出框的实现
2020/02/28 Javascript
解决vue单页面应用进入页面加载所有 js 的问题
2020/08/12 Javascript
Ant design vue table 单击行选中 勾选checkbox教程
2020/10/24 Javascript
python读文件逐行处理的示例代码分享
2013/12/27 Python
对python中for、if、while的区别与比较方法
2018/06/25 Python
Django rest framework工具包简单用法示例
2018/07/20 Python
如何使用Python抓取网页tag操作
2020/02/14 Python
Django 如何使用日期时间选择器规范用户的时间输入示例代码详解
2020/05/22 Python
Sephora丝芙兰菲律宾官方网站:购买化妆品和护肤品
2017/04/05 全球购物
英国文具、办公用品和科技商店:Ryman
2018/09/27 全球购物
Clarks西班牙官方在线商店:clarks鞋
2019/05/03 全球购物
如何设定的weblogic的热启动模式(开发模式)与产品发布模式
2012/09/08 面试题
学前教育毕业生自荐信
2013/10/29 职场文书
精彩的英文自荐信
2014/01/30 职场文书
小学生美德少年事迹
2014/02/02 职场文书
调解员先进事迹材料
2014/02/07 职场文书
新手上路标语
2014/06/20 职场文书
中学学校门卫岗位职责
2014/08/15 职场文书
单位单身证明样本
2014/10/11 职场文书
四风专项整治工作情况汇报
2014/10/28 职场文书
古诗文之爱国名句(77句)
2019/09/24 职场文书
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
2021/06/26 Python