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 5昨天隆重推出--PHP 5/Zend Engine 2.0新特性
Oct 09 PHP
给初学者的30条PHP最佳实践(荒野无灯)
Aug 02 PHP
PHP无限分类(树形类)的深入分析
Jun 02 PHP
php之Memcache学习笔记
Jun 17 PHP
在wamp集成环境下升级php版本(实现方法)
Jul 01 PHP
PHP数据库万能引擎类adodb配置使用以及实例集锦
Jun 12 PHP
PHP实现图片裁剪、添加水印效果代码
Oct 01 PHP
php+ajax实时刷新简单实例
Feb 25 PHP
PHP 绘制网站登录首页图片验证码
Apr 12 PHP
php empty 函数判断结果为空但实际值却为非空的原因解析
May 28 PHP
PHP数组常用函数实例小结
Aug 20 PHP
eval(cmd)与eval($cmd)的区别与联系
Jul 07 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
PHPLog php 程序调试追踪工具
2009/09/09 PHP
PHP页面输出时js设置input框的选中值
2016/09/30 PHP
PHP获取链表中倒数第K个节点的方法
2018/01/18 PHP
PHP聊天室简单实现方法详解
2018/12/08 PHP
把textarea中字符串里含有的回车换行替换成&amp;lt;br&amp;gt;的javascript代码
2007/04/20 Javascript
Jquey拖拽控件Draggable使用方法(asp.net环境)
2010/09/28 Javascript
点击隐藏页面左栏或右栏实现js代码
2013/04/01 Javascript
JavaScript打印iframe内容示例代码
2013/08/20 Javascript
js为数字添加逗号并格式化数字的代码
2013/08/23 Javascript
jquery动态增加删除表格行的小例子
2013/11/14 Javascript
jQuery获得指定元素坐标的方法
2015/04/14 Javascript
IE6兼容透明背景图片及解决方案
2015/08/19 Javascript
js变量提升深入理解
2016/09/16 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
2016/11/03 Javascript
Vue.js:使用Vue-Router 2实现路由功能介绍
2017/02/22 Javascript
bootstrap suggest搜索建议插件使用详解
2017/03/25 Javascript
AngularJS表单验证功能分析
2017/05/26 Javascript
React Native之prop-types进行属性确认详解
2017/12/19 Javascript
js原生方法被覆盖,从新赋值原生的方法
2018/01/02 Javascript
详解滑动穿透(锁body)终极探索
2019/04/16 Javascript
简单易懂的python环境安装教程
2017/07/13 Python
Python cookbook(数据结构与算法)实现优先级队列的方法示例
2018/02/18 Python
Linux下多个Python版本安装教程
2018/08/15 Python
Python/Django后端使用PIL Image生成头像缩略图
2019/04/30 Python
python3注册全局热键的实现
2020/03/22 Python
将不规则的Python多维数组拉平到一维的方法实现
2021/01/11 Python
CSS3 Flex 弹性布局实例代码详解
2018/11/01 HTML / CSS
css3 transform导致子元素固定定位变成绝对定位的方法
2020/03/06 HTML / CSS
英国高级百货公司:Harvey Nichols
2017/01/29 全球购物
篮球比赛口号
2014/06/10 职场文书
环境日宣传活动总结
2014/07/09 职场文书
奉献爱心演讲稿
2014/09/04 职场文书
2014年教师节演讲稿范文
2014/09/10 职场文书
优秀教师自我评价范文
2014/09/27 职场文书
2015年党日活动总结范文
2015/03/25 职场文书
Django 如何实现文件上传下载
2021/04/08 Python