PHP中英混合字符串截取函数代码

 更新时间:2011年07月17日 18:42:58   作者:  
今天在遇到了一个中英字符串截取的问题,在gbk里中文里每个字占两字节,如果全是中文的话,用substr()函数就可以实现了,但中英都有的话就麻烦了,在以前收藏的代码里找到了一个不错的函数,很好的实现了截取的功能
复制代码 代码如下:

function get_word($string, $length, $dot = '..',$charset='gbk') {
if(strlen($string) <= $length) {
return $string;
}
$string = str_replace(array(' ','&nbsp;', '&', '"', '<', '>'), array('','','&', '"', '<', '>'), $string);
$strcut = '';
if(strtolower($charset) == 'utf-8') {
$n = $tn = $noc = 0;
while($n < strlen($string)) {
$t = ord($string[$n]);
if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
$tn = 1; $n++; $noc++;
} elseif(194 <= $t && $t <= 223) {
$tn = 2; $n += 2; $noc += 2;
} elseif(224 <= $t && $t < 239) {
$tn = 3; $n += 3; $noc += 2;
} elseif(240 <= $t && $t <= 247) {
$tn = 4; $n += 4; $noc += 2;
} elseif(248 <= $t && $t <= 251) {
$tn = 5; $n += 5; $noc += 2;
} elseif($t == 252 || $t == 253) {
$tn = 6; $n += 6; $noc += 2;
} else {
$n++;
}
if($noc >= $length) {
break;
}
}
if($noc > $length) {
$n -= $tn;
}
$strcut = substr($string, 0, $n);
} else {
for($i = 0; $i < $length; $i++) {
$strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
}
}
return $strcut.$dot;
}
$str = "欢迎 visit 简明 nowamagic";
$str_result = get_word($str, 12);
echo $str_result;

测试运行结果:
欢迎 visit..

相关文章

  • PHP程序61条面向对象分析设计的经验小结

    PHP程序61条面向对象分析设计的经验小结

    你不必严格遵守这些原则,违背它们也不会被处以宗教刑罚。但你应当把这些原则看成警铃,若违背了其中的一条,那么警铃就会响起 。 ----- Arthur J.Riel
    2008-11-11
  • 如何在Ubuntu下启动Apache的Rewrite功能

    如何在Ubuntu下启动Apache的Rewrite功能

    本篇文章是对在Ubuntu下启动Apache的Rewrite功能的具体操作步骤进行了详细的分析介绍,需要的朋友参考下
    2013-07-07
  • 浅谈laravel中间件的创建思路

    浅谈laravel中间件的创建思路

    网上有很多解析laravel中间件的实现原理,但是不知道有没有读者在读的时候不明白,作者是怎么想到要用array_reduce函数的?本文从自己的角度出发,模拟了如果我是作者,我是怎么实现这个中间件功能,又是怎么找到并使用对应的函数。本文将介绍Laravel中间件得创建思路。
    2021-05-05
  • php数组函数array_walk用法示例

    php数组函数array_walk用法示例

    这篇文章主要介绍了php数组函数array_walk用法,分析了array_walk对数组中每个成员调用用户函数的使用技巧,需要的朋友可以参考下
    2016-05-05
  • 针对PHP开发安全问题的相关总结

    针对PHP开发安全问题的相关总结

    今天小编就为大家分享一篇关于针对PHP开发安全问题的相关总结,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • PHP实现的获取文件mimes类型工具类示例

    PHP实现的获取文件mimes类型工具类示例

    这篇文章主要介绍了PHP实现的获取文件mimes类型工具类,结合实例形式分析了php针对文件mimes类型的相关判断操作技巧,需要的朋友可以参考下
    2018-04-04
  • PHP如何使用XlsWriter实现百万级数据导入导出

    PHP如何使用XlsWriter实现百万级数据导入导出

    这篇文章主要为大家详细介绍了PHP如何使用XlsWriter实现百万级数据导入导出,文中的示例代码讲解详细,有需要的小伙伴可以跟随小编一起学习一下
    2025-02-02
  • kindeditor 加入七牛云上传的实例讲解

    kindeditor 加入七牛云上传的实例讲解

    下面小编就为大家带来一篇kindeditor 加入七牛云上传的实例讲解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • php函数间的参数传递(值传递/引用传递)

    php函数间的参数传递(值传递/引用传递)

    函数间的参数传递包括值传递和引用传递,详细示例接下来为大家详细介绍下,感兴趣的朋友不要错过
    2013-09-09
  • PHP中余数、取余的妙用

    PHP中余数、取余的妙用

    这篇文章主要介绍了PHP中余数、取余的妙用,这个是在WEB开发中一个经常使用的小技巧,不管是在表格、ul、li或者是换行等HTML处理中,需要隔几行换行,隔几行加入ul或li的结束标记等时候,特别的有用,需要的朋友可以参考下
    2015-06-06

最新评论