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中的日期及时间
Nov 23 PHP
PHP一些有意思的小区别
Dec 06 PHP
PHP对字符串的递增运算分析
Aug 08 PHP
关于url地址传参数时字符串有回车造成页面脚本赋值失败的解决方法
Jun 28 PHP
ThinkPHP的URL重写问题
Jun 22 PHP
php中HTTP_REFERER函数用法实例
Nov 21 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
Aug 21 PHP
PHP中Session和Cookie是如何操作的
Oct 10 PHP
CodeIgniter 完美解决URL含有中文字符串
May 13 PHP
PHP 使用二进制保存用户状态的实例
Jan 29 PHP
PHP使用Session实现上传进度功能详解
Aug 06 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
Oct 16 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中ajax使用实例教程
2014/08/22 PHP
Zend Framework前端控制器用法示例
2016/12/11 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
2017/02/28 PHP
利用Laravel生成Gravatar头像地址的优雅方法
2017/12/30 PHP
Laravel获取当前请求的控制器和方法以及中间件的例子
2019/10/11 PHP
PHP cookie与session会话基本用法实例分析
2019/11/18 PHP
js二维数组定义和初始化的三种方法总结
2014/03/03 Javascript
jquery实现的缩略图预览滑块实例
2015/06/25 Javascript
BootStrap初学者对弹出框和进度条的使用感觉
2016/06/27 Javascript
javascript闭包功能与用法实例分析
2017/04/06 Javascript
fetch 使用及如何接收JS传值
2017/11/11 Javascript
Webpack中publicPath路径问题详解
2018/05/03 Javascript
微信小程序实现选项卡效果
2018/11/06 Javascript
angular中两种表单的区别(响应式和模板驱动表单)
2018/12/06 Javascript
关于vue的npm run dev和npm run build的区别介绍
2019/01/14 Javascript
layui table 获取分页 limit的方法
2019/09/20 Javascript
[02:07]DOTA2超级联赛专访BBC:难忘网吧超神经历
2013/06/09 DOTA
[01:28]国服启动器接入蒸汽平台操作流程视频
2021/03/11 DOTA
python实现斐波那契递归函数的方法
2014/09/08 Python
Python脚本实现代码行数统计代码分享
2015/03/10 Python
Python RabbitMQ消息队列实现rpc
2018/05/30 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
2020/04/18 Python
解决django后台样式丢失,css资源加载失败的问题
2019/06/11 Python
python进阶之自定义可迭代的类
2019/08/20 Python
HTML5 history新特性pushState、replaceState及两者的区别
2015/12/26 HTML / CSS
HTML5+css3:3D旋转木马效果相册
2017/01/03 HTML / CSS
eBay澳大利亚站:eBay.com.au
2018/02/02 全球购物
欧姆龙医疗保健与医疗产品:Omron Healthcare
2020/02/10 全球购物
函授大专自我鉴定
2013/11/01 职场文书
函授毕业生自我鉴定
2013/11/06 职场文书
2014年教研员工作总结
2014/12/23 职场文书
全陪导游词开场白
2015/05/29 职场文书
骆驼祥子读书笔记
2015/06/26 职场文书
岗位聘任协议书
2015/09/21 职场文书
司法廉洁教育心得体会
2016/01/20 职场文书
Python快速优雅的批量修改Word文档样式
2021/05/20 Python