1. 字符串截取是一个非常常见的编程任务,而往往带中文的字符串截取会经常用到。虽然不难,但是自己写函数实现又耗费时间,这里介绍一个比较好用的字符串截取函数,能够胜任基本的需求了。
  2. <?php
  3. function sysSubStr($string,$length,$append = false)
  4. {
  5. if(strlen($string) <= $length )
  6. {
  7. return $string;
  8. }
  9. else
  10. {
  11. $i = 0;
  12. while ($i < $length)
  13. {
  14. $stringTMP = substr($string,$i,1);
  15. if ( ord($stringTMP) >=224 )
  16. {
  17. $stringTMP = substr($string,$i,3);
  18. $i = $i + 3;
  19. }
  20. elseif( ord($stringTMP) >=192 )
  21. {
  22. $stringTMP = substr($string,$i,2);
  23. $i = $i + 2;
  24. }
  25. else
  26. {
  27. $i = $i + 1;
  28. }
  29. $stringLast[] = $stringTMP;
  30. }
  31. $stringLast = implode("",$stringLast);
  32. if($append)
  33. {
  34. $stringLast .= "...";
  35. }
  36. return $stringLast;
  37. }
  38. }
  39.  
  40. $string = "简明现代魔法 —— 专注于互联网主流的各种技术";
  41. $length = "27";
  42. $append = true;
  43. echo sysSubStr($string,$length,$append);
  44. // 输出
  45. // 简明现代魔法 —— 专...
  46. ?>
  47.  
  48. 截取GB2312中文字符串:
  49. <?php
  50. //截取中文字符串
  51. function mysubstr($str, $start, $len) {
  52. $tmpstr = "";
  53. $strlen = $start + $len;
  54. for($i = 0; $i < $strlen; $i++) {
  55. if(ord(substr($str, $i, 1)) > 0xa0) {
  56. $tmpstr .= substr($str, $i, 2);
  57. $i++;
  58. } else
  59. $tmpstr .= substr($str, $i, 1);
  60. }
  61. return $tmpstr;
  62. }
  63. ?>
  64.  
  65. 截取utf8编码的多字节字符串:
  66. <?php
  67. //截取utf8字符串
  68. function utf8Substr($str, $from, $len)
  69. {
  70. return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
  71. '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
  72. '$1',$str);
  73. }
  74. ?>
  75.  
  76. UTF-8GB2312都支持的汉字截取函数:
  77. <?php
  78. /*
  79. Utf-8、gb2312都支持的汉字截取函数
  80. cut_str(字符串, 截取长度, 开始长度, 编码);
  81. 编码默认为 utf-8
  82. 开始长度默认为 0
  83. */
  84.  
  85. function cut_str($string, $sublen, $start = 0, $code = 'UTF-8')
  86. {
  87. if($code == 'UTF-8')
  88. {
  89. $pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";
  90. preg_match_all($pa, $string, $t_string);
  91.  
  92. if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."...";
  93. return join('', array_slice($t_string[0], $start, $sublen));
  94. }
  95. else
  96. {
  97. $start = $start*2;
  98. $sublen = $sublen*2;
  99. $strlen = strlen($string);
  100. $tmpstr = '';
  101.  
  102. for($i=0; $i< $strlen; $i++)
  103. {
  104. if($i>=$start && $i< ($start+$sublen))
  105. {
  106. if(ord(substr($string, $i, 1))>129)
  107. {
  108. $tmpstr.= substr($string, $i, 2);
  109. }
  110. else
  111. {
  112. $tmpstr.= substr($string, $i, 1);
  113. }
  114. }
  115. if(ord(substr($string, $i, 1))>129) $i++;
  116. }
  117. if(strlen($tmpstr)< $strlen ) $tmpstr.= "...";
  118. return $tmpstr;
  119. }
  120. }
  121.  
  122. $str = "abcd需要截取的字符串";
  123. echo cut_str($str, 8, 0, 'gb2312');
  124. ?>

收藏几个支持中文的PHP字符串截取函数的更多相关文章

  1. (实用篇)多个PHP中文字符串截取函数

    字符串截取是一个非常常见的编程任务,而往往带中文的字符串截取会经常用到.虽然不难,但是自己写函数实现又耗费时间,这里介绍一个比较好用的字符串截取函数,能够胜任基本的需求了 <?php funct ...

  2. 改造phpcms-v9自带的字符串截取函数

    1.phpcms-v9自带的字符串截取函数在phpcms/libs/functions/global.func.php文件中: /** * 字符截取 支持UTF8/GBK * @param $stri ...

  3. Mysql字符串截取函数SUBSTRING的用法说明

    感觉上MySQL的字符串函数截取字符,比用程序截取(如PHP或JAVA)来得强大,所以在这里做一个记录,希望对大家有用. 函数: 1.从左开始截取字符串 left(str, length) 说明:le ...

  4. 字符串截取函数slice, substring, substr

    在日常项目需求中,常常会遇到需要截取字符串操作的工作,而ECMAScript为我们提供了原生的截取字符串的函数,而且提供了三个:slice, substring, substr.我们怎么判断在什么时候 ...

  5. MySQL 字符串截取函数

    MySQL 字符串截取函数:left(), right(), substring(), substring_index().还有 mid(), substr().其中,mid(), substr() ...

  6. php 字符串截取函数

    php自带的一个截取字符串的函数,只能处理英文,数字的不能截取中文混排的哦,有需要的朋友可以参考,后面的比较好用,第一个主要是给初学者学学用的. php //构造字符串 $str = "AB ...

  7. js字符串截取函数slice()、substring()、substr()

    摘要 在js中字符截取函数有常用的三个slice().substring().substr()了,下面我来给大家介绍slice().substring().substr()函数在字符截取时的一些用法与 ...

  8. ThinkPHP 3.2.2 视图模板中使用字符串截取函数

    在项目的 Common/function.php 文件里( 项目结构如图 ) 添加函数: /*字符串截断函数+省略号*/ function subtext($text, $length) { if(m ...

  9. JavaScript中字符串截取函数slice()、substring()、substr()

    在js中字符截取函数有常用的三个slice().substring().substr()了,下面我来给大家介绍slice().substring().substr()函数在字符截取时的一些用法与区别吧 ...

随机推荐

  1. MySQL中的锁、隔离等级和读场景

    一.导言 关于MySQL中的锁还有隔离等级这类话题,其概念性的解释早已泛滥.记住其概念,算不上什么.更重要的是思考:他们的区别和联系在哪儿,为什么会有这样的概念. 1)MySQL的锁(Lock)分为行 ...

  2. JAVA实现zip压缩需要注意的问题

    近来对院社二维码平台进行2.0升级改造.于昨日踩到一个巨坑.特此记录... 需求源于院社编辑在批量下载二维码的时候,系统后台需要对所要下载的二维码进行重命名和zip打包压缩. 系统测试的时候发现:首次 ...

  3. MySQL —— 如何快速对比数据?

    我们在MySql中想要对比下两个不同的实例上的数据并且找出差异,除了主键之外我们还要对比每一个字段,应该怎么做呢? 方案一:写一个程序将两个实例里面的每一行数据都分别取出来对比,但是耗时我们无法估计, ...

  4. 网页调用本地程序(Windows下浏览器全兼容)

    用网页调用本地应用程序的思路是,先进行注册表注册自定义一个URL Protocol协议,再利用URL Protocol实现网页调用本地应用程序. 1.先写一个注册表文件,将其保存为.reg后缀的注册表 ...

  5. blender, 创建多边形面片

    按a键清除所有选择,进入Edit Mode,选vertex select方式.然后按住control,使用MLB连续画多个顶点,形成一个多边形,如图所示: 然后同时选中两个端点,点Make Edge/ ...

  6. Web Socket rfc6455 握手 (C++)

    std::string data((const char*)buf->data(),bytes_transferred); recycle_buffer(buf); std::string ke ...

  7. Atitit.web预览播放视频的总结

    Atitit.web预览播放视频的总结 1. 浏览器类型的兼容性(chrome,ff,ie) 1 2. 操作系统的兼容性 1 3. 视频格式的内部视频格式跟播放器插件的兼容性.. 2 4. 指定播放器 ...

  8. 管道相关函数(1)-pipe

    定义: int pipe(int filedes[2]); 表头文件: #include<unistd.h> 说明: pipe()会建立管道, 并将文件描述词由参数filedes数组返回. ...

  9. jq使用自定义属性实现有title的tab切换

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  10. 使用libjpeg 压缩yuv420到jpg (内存方式)

    #include <Windows.h> #include <stdio.h> extern "C" { #include <jpeglib.h> ...