[原创,转载请注明:[url]http://wfyang.blog.51cto.com[/url]]
现在流传的那几个字符串截取函数,一般都是对字符串进行循环判断,如果要截取的串比较长,效率就成了一个问题。
我解决的办法非常简单,还是用substr()函数,只不过在substr($str)的后面带一个chr(0),即substr($str).chr(0)。
下面我说一下这种方法的原理。chr(0)代表的是ascii码表中的第一个字符"null",是一个非打印字符(有关chr()函数和ascii码的知识可以参阅PHP手册)。当substr()函数将一个全角字符截掉一半的时候,我们得到的字符串的最后一个字符实际上是被截掉的全角字符的区位码(有关中文字符编码的知识请看这里: [url]http://huggin.bokee.com/3857070.html[/url])。".chr(0)"的作用就是将那个区位码与"000"结合,这同样是一个非打印字符,于是,乱码不见了。
这样做还存在一个问题,那就是字符截取的数量并不是很精确。你用for循环对“我是1个中国人,我热爱我的祖国”这个串进行一下截取就知道了。要解决这个问题,简单一点的方法是写一个函数,在用substr()函数的时候将$length*2,这样截取的长度总量为偶数,在大多数情况下,这能保证返回的字符串长度基本符合需要。更复杂一点的方法是对截取得到的字符串的最后一个字符串进行判断,不过对中文字符串来说,这样精确的截取好象并不是很有意义,反面会降低程序的效率。
下面给出一个简单的函数实现以前验证程序,这里并没有对一些特殊情况进行判断,你可以自己加上。
<?php
//文件名:char.php
//功能:新的字符截取函数
//作者:wfyang
//日期:Mon Nov 20 10:04:08 CST 2006 
//本函数截取的字符串长度单位为全角字符
function cutstr($str = '',$length = 0)
{
 $length *=2;
 if (strlen($str) <= $length)
  return $str;
 return substr($str,0,$length).chr(0).'…';

$str = '我是1个中国人,我热爱我的祖国!';
for ($i=1;$i<16;$i++)
{
 echo $i.':'.cutstr($str,$i).'<br/>';
}

?>

本文转自wfyang 51CTO博客,原文链接:http://blog.51cto.com/wfyang/9876,如需转载请自行联系原作者

一个效率更高的全半角字符串截取函数相关推荐

  1. SQL优化——IN和EXISTS谁的效率更高

    .点击上方"蓝字" 关注我们,享更多干货! IN和EXISTS被频繁使用在SQL中,虽然作用是一样的,但是在使用效率谁更高这点上众说纷纭.下面我们就通过一组测试来看,在不同场景下, ...

  2. 取代 Mybatis Generator,这款代码生成神器配置更简单,开发效率更高

    作为一名 Java 后端开发,日常工作中免不了要生成数据库表对应的持久化对象 PO,操作数据库的接口 DAO,以及 CRUD 的 XML,也就是 mapper. Mybatis Generator 是 ...

  3. .NET快速信息化系统开发框架 V3.2-amp;gt;WinForm版本新增新的角色授权管理界面效率更高、更规范...

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/chinahuyong/article/details/76735793 角色授权管理模块主要是对角色 ...

  4. 工作效率 工具_我使用的工具加快了我的工作流程,使我的工作效率更高

    工作效率 工具 by Egwuenu Gift 通过Egwuenu礼物 我使用的工具加快了我的工作流程,使我的工作效率更高 (The tools I use speed up my workflow ...

  5. 一文带你彻底搞懂i++和++i的区别,谁的效率更高?

    作者简介:Codebowl靓仔,学妹的工具人,C++开发误入数据开发,梦想30岁退休的靓仔就是我啦. i++和++i对于初学者来说,一直是一个特别容易搞混的内容,相信很多人现在也没有完全搞清(作者初学 ...

  6. for循环和while循环哪个效率更高

    for循环和while循环哪个效率更高? 有人说while循环效率更高,有人说for循环的效率更高,今天我们就用事实分析一下哪个效率高? 实践如下,我们来写一个1亿的次的循环,在执行for和while ...

  7. PHP抓取网页指定内容(推荐用CURL效率更高)

    PHP抓取某页面指定内容 初学php研究了好几个小时最后问了同事,得以解决:下面我就以我网站的一个详情页为例子,给大家分享一下: 直接贴代码,注释写的很清楚了 [方法一] <?php //添加编 ...

  8. ++i和i++哪个效率更高

    参考博文:https://blog.csdn.net/qq_38570571/article/details/81255717 这篇写的不错 在C++当中 ++i比i++效率更高

  9. 锤子手机Android auto,分享锤子手机Smartisan OS的几个使用小技巧,效率更高

    原标题:分享锤子手机Smartisan OS的几个使用小技巧,效率更高 老罗创办的锤子科技一直以来都追求着效率的提升和不随流俗的设计美感,锤子手机基于安卓深度定制的系统Smartisan OS正是体现 ...

最新文章

  1. numpy中的矩阵与数学上的矩阵的关系
  2. python自动化接口测试中的cookies怎么实现_Python接口自动化之cookie、session应用
  3. 线性代数之相似矩阵与二次型基础点
  4. bat-bat-bat (重要的事情说三遍)
  5. 查看node的位置_升级Node版本RN项目运行报错cb.apply is not a function
  6. pacman 查询_掌握pacman包管理工具,玩转Arch Linux
  7. SQL Server更新某一列中多个字典码对应内容(sql示例)
  8. 5005.boost之asio简单反射型服务器客户端
  9. 【Android开发—智能家居系列】(三):手机连接WIFI模块
  10. 服气!蹭热点无敌,麦当劳发布“5G”新品:真香
  11. ClickOnce Cannot download the application解决方法
  12. linux下phpmyadmin安装
  13. Java设计模式------单例模式
  14. TCL语言编译器安装及使用
  15. 泰克示波器存储格式,在存储时怎么选择?
  16. 电脑主机组装总结——自己动手,丰衣足食
  17. 企业财务数据分析指标
  18. 无线鼠标没反应怎么办
  19. stm32---端口复用和重映射
  20. JMM内存模型 多线程三大特性

热门文章

  1. 【工业智能】人工智能真的无所不能吗?
  2. 人机融合智能:人工智能3.0
  3. 全新算法助机器学习抵抗干扰
  4. 一文解析|首个上榜科创板的机器人企业,江苏北人“闯关记”
  5. 太真实!当程序员接手了新项目...... | 每日趣闻
  6. 我是一个秒杀请求,正在逃离这颗星球...
  7. JavaScript递归
  8. 冒号课堂 编程范式与OOP思想
  9. 利用Jenkins的Pipeline实现集群自动化部署SpringBoot项目
  10. head tail mkdir cp