php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例


Posted in PHP onMay 28, 2016

本文实例讲述了php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8用法。分享给大家供大家参考,具体如下:

/*
*gb2312中文字符串截取
 */
function substr_for_gb2312($str,$start,$len=null)
 {
  $totlelength = strlen($str);
  //特例情况
  if ($len == null) $len = $totlelength;
  if ($len ==0) return "";
  if ($len >= $totlelength && $start == 0 ) return $str;
  if ($start > $totlelength) return "";
  //分析$start
  if ($start < 0 ) //$start<0时,转化为$start>0时的定位.
  {
  if ( abs($start) >= $totlelength ) $start = 0;
  else $start = $totlelength - abs($start);
  }
  //确定起始位置,当起始位拆分某汉字时,返回值包含此汉字.
  if ($start > 0)
  {
  $i = $start-1;
  $flag = -1;
  while ($i >= 0)
  {
  if ( ord(substr($str,$i,1)) > 160)
  {
  $flag = -1*$flag;
  }
  else break;
  $i--;
  }
  if($flag==1)
  {
  $start = $start - 1;
  $len++;    //保证不位移.
  }
 }
 $str = substr($str,$start);//截除字符串$str的$start位前的字符
 $totlelength = strlen($str);
 //确定结束位置,当结束位拆分某汉字时,返回值不包含此汉字.
 if ($len<0) $len = $totlelength - abs($len);
 if ($len <= 0) return "";
 $i=min($len,$totlelength);
 $i--;
 $flag = -1;
 while ($i >= 0)
 {
  if (ord(substr($str,$i,1))>160)
  {
   $flag=-1*$flag;
  }
  else break;
  $i--;
 }
 if($flag == 1)
  $len=$len-1;
 $subit=substr($str,0,$len);
 return $subit;
 }
/******************************************************************
* PHP截取UTF-8字符串,解决半字符问题。
* 英文、数字(半角)为1字节(8位),中文(全角)为3字节
* @return 取出的字符串, 当$len小于等于0时, 会返回整个字符串
* @param $str 源字符串
* $len 左边的子串的长度
****************************************************************/
function substr_for_utf($str,$len)
{
for($i=0;$i<$len;$i++)
{
$temp_str=substr($str,0,1);
if(ord($temp_str) > 127)
{
$i++;
if($i<$len)
{
$new_str[]=substr($str,0,3);
$str=substr($str,3);
}
}
else
{
$new_str[]=substr($str,0,1);
$str=substr($str,1);
}
}
return join($new_str);
}
?>
/*带start位置的utf8截取函数*/
function utf8_substr($string, $start, $length) {
  preg_match_all ('/[/x00-/x7F]|[/xC2-/xDF][/x80-/xBF]|[/xE0-/xEF][/x80-/xBF][/x80-/xBF]|[/xF0-/xF4][/x80-/xBF][/x80-/xBF][/x80-/x
BF]/', $string, $rs);
  $out = '';
  $size = count ($rs[0]);
  $end = $start + $length;
  if ($end > $size ) {
    $end = $size;
  }
  for ($i = $start; $i < $end; $i++) {
    $out .= $rs[0][$i];
  }
  return $out;
}
PHP 相关文章推荐
php中数据的批量导入(csv文件)
Oct 09 PHP
基于mysql的bbs设计(二)
Oct 09 PHP
PHP 内存缓存加速功能memcached安装与用法
Sep 03 PHP
深入PHP许愿墙模块功能分析
Jun 25 PHP
关于Sphinx创建全文检索的索引介绍
Jun 25 PHP
显示youtube视频缩略图和Vimeo视频缩略图代码分享
Feb 13 PHP
PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程
Jun 12 PHP
ThinkPHP实现分页功能
Apr 28 PHP
完美的php分页类
Oct 24 PHP
多个Laravel项目如何共用migrations详解
Sep 25 PHP
解决Laravel 不能创建 migration 的问题
Oct 09 PHP
php使用redis的有序集合zset实现延迟队列应用示例
Feb 20 PHP
php获取一定范围内取N个不重复的随机数
May 28 #PHP
smarty的section嵌套循环用法示例
May 28 #PHP
PHP引用返回用法示例
May 28 #PHP
php时间函数用法分析
May 28 #PHP
zend framework重定向方法小结
May 28 #PHP
php通过文件头判断格式的方法
May 28 #PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
May 27 #PHP
You might like
PHP与已存在的Java应用程序集成
2006/10/09 PHP
php date与gmdate的获取日期的区别
2010/02/08 PHP
php修改时间格式的代码
2011/05/29 PHP
如何突破PHP程序员的技术瓶颈分析
2011/07/17 PHP
php启用zlib压缩文件的配置方法
2013/06/12 PHP
jquery 插件 web2.0分格的分页脚本,可用于ajax无刷新分页
2008/12/25 Javascript
JS IE和FF兼容性问题汇总
2009/02/09 Javascript
使用Raygun对Node.js应用进行错误处理的方法
2015/06/23 Javascript
BootStrap的弹出框(Popover)支持鼠标移到弹出层上弹窗层不隐藏的原因及解决办法
2016/04/03 Javascript
移动端翻页插件dropload.js(支持Zepto和jQuery)
2016/07/27 Javascript
功能强大的Bootstrap使用手册(一)
2016/08/02 Javascript
JavaScript禁止微信浏览器下拉回弹效果
2017/05/16 Javascript
Vue2.0 http请求以及loading展示实例
2018/03/06 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
2018/10/31 Javascript
js实现图片放大并跟随鼠标移动特效
2019/01/18 Javascript
JS实现计算小于非负数n的素数的数量算法示例
2019/02/26 Javascript
JS数据类型判断的几种常用方法
2020/07/07 Javascript
python中cPickle用法例子分享
2014/01/03 Python
介绍Python中几个常用的类方法
2015/04/08 Python
Python的Django框架中的数据过滤功能
2015/07/17 Python
python打开windows应用程序的实例
2019/06/28 Python
Django框架组成结构、基本概念与文件功能分析
2019/07/30 Python
wxPython实现文本框基础组件
2019/11/18 Python
CSS3文本换行word-wrap解决英文文本超过固定宽度不换行
2013/10/10 HTML / CSS
《自然之道》教学反思
2014/02/11 职场文书
学校工作推荐信范文
2014/07/11 职场文书
部门群众路线教育实践活动对照检查材料思想汇报
2014/10/07 职场文书
机关党员三严三实心得体会
2014/10/13 职场文书
校园会短篇的广播稿
2014/10/21 职场文书
分居协议书范本
2014/11/03 职场文书
党员自我评价范文2015
2015/03/03 职场文书
PhpSpreadsheet中文文档 | Spreadsheet操作教程实例
2021/04/01 PHP
python获取淘宝服务器时间的代码示例
2021/04/22 Python
Python移位密码、仿射变换解密实例代码
2021/06/27 Python
Spring Security使用单点登录的权限功能
2022/04/03 Java/Android
vue-cli3.x配置全局的scss的时候报错问题及解决
2022/04/30 Vue.js