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 相关文章推荐
初探PHP5
Oct 09 PHP
PHP动态变静态原理
Nov 25 PHP
php实现无限级分类实现代码(递归方法)
Jan 01 PHP
PHP中如何实现常用邮箱的基本判断
Jan 07 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
Nov 03 PHP
PHP调用MySQL存储过程并返回值的方法
Dec 26 PHP
php正则表达式获取内容所有链接
Jul 24 PHP
日常整理PHP中简单的图形处理(经典)
Oct 26 PHP
PHP使用mkdir创建多级目录的方法
Dec 22 PHP
抛弃 PHP 代价太高
Apr 26 PHP
php 流程控制switch的简单实例
Jun 07 PHP
浅谈PHP链表数据结构(单链表)
Jun 08 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
初学者入门:细述PHP4的核心Zend
2006/09/05 PHP
Codeigniter框架实现获取分页数据和总条数的方法
2014/12/05 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
2020/04/14 PHP
比较全面的event对像在IE与FF中的区别 推荐
2009/09/21 Javascript
输入框的字数时时统计—关于 onpropertychange 和 oninput 使用
2011/10/21 Javascript
jQuery 中使用JSON的实现代码
2011/12/01 Javascript
js中的for如何实现foreach中的遍历
2014/05/31 Javascript
JavaScript fontsize方法入门实例(按照指定的尺寸来显示字符串)
2014/10/17 Javascript
javascript将url中的参数加密解密代码
2014/11/17 Javascript
javascript中this的四种用法
2015/05/11 Javascript
jQuery插件开发精品教程让你的jQuery提升一个台阶
2016/01/27 Javascript
移动端js触摸事件详解
2016/09/18 Javascript
bootstrap组件之按钮式下拉菜单小结
2017/01/19 Javascript
AngularJS 购物车全选/取消全选功能的实现方法
2017/08/14 Javascript
JS实现自定义状态栏动画文字效果示例
2017/10/12 Javascript
详解Vue项目部署遇到的问题及解决方案
2019/01/11 Javascript
Vue 用Vant实现时间选择器的示例代码
2019/10/25 Javascript
python logging重复记录日志问题的解决方法
2018/07/12 Python
Python实现的IP端口扫描工具类示例
2019/02/15 Python
如何运行带参数的python脚本
2019/11/15 Python
pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作
2020/05/25 Python
Python依赖包迁移到断网环境操作
2020/07/13 Python
python字典通过值反查键的实现(简洁写法)
2020/09/30 Python
Python中使用Selenium环境安装的方法步骤
2021/02/22 Python
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
基于HTML5 audio元素播放声音jQuery小插件
2011/05/11 HTML / CSS
比较基础的php面试题及答案-填空题
2014/04/26 面试题
介绍一下write命令
2012/09/24 面试题
自荐书模板
2013/12/19 职场文书
甜品蛋糕店创业计划书范文
2014/02/06 职场文书
初中家长寄语
2014/04/02 职场文书
演讲稿的格式及范文
2014/08/22 职场文书
高中教师个人总结
2015/02/10 职场文书
2015年小学生自我评价范文
2015/03/03 职场文书
课改心得体会范文
2016/01/25 职场文书
Python matplotlib安装以及实现简单曲线的绘制
2022/04/26 Python