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 相关文章推荐
2.PHP入门
Oct 09 PHP
PHP 高手之路(三)
Oct 09 PHP
php的POSIX 函数以及进程测试的深入分析
Jun 03 PHP
解析php入库和出库
Jun 25 PHP
ueditor 1.2.6 使用方法说明
Jul 24 PHP
了解PHP的返回引用和局部静态变量
Jun 04 PHP
php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法
Jul 06 PHP
thinkPHP下的widget扩展用法实例分析
Dec 26 PHP
Zend Framework教程之Zend_Layout布局助手详解
Mar 04 PHP
PHP编程实现微信企业向用户付款的方法示例
Jul 26 PHP
什么是PHP7中的孤儿进程与僵尸进程
Apr 14 PHP
YII框架行为behaviors用法示例
Apr 26 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
JS中encodeURIComponent函数用php解码的代码
2012/03/01 PHP
详解PHP中foreach的用法和实例
2016/10/25 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
Thinkphp5+plupload实现的图片上传功能示例【支持实时预览】
2019/05/08 PHP
Javascript &amp; DHTML 实例编程(教程)DOM基础和基本API
2007/06/02 Javascript
javascript 二分法(数组array)
2010/04/24 Javascript
yepnope.js 异步加载资源文件
2011/09/08 Javascript
JS实现图片预加载无需等待
2012/12/21 Javascript
Js 时间函数getYear()的使用问题探讨
2013/04/01 Javascript
解析javascript 实用函数的使用详解
2013/05/10 Javascript
JavaScript模拟重力状态下抛物运动的方法
2015/03/03 Javascript
javascript实现3D变换的立体圆圈实例
2015/08/06 Javascript
javascript发送短信验证码实现代码
2015/11/12 Javascript
zTree插件下拉树使用入门教程
2016/04/11 Javascript
JavaScript中数组Array方法详解
2017/02/27 Javascript
详解Angular.js数据绑定时自动转义html标签及内容
2017/03/30 Javascript
js实现延迟加载的几种方法
2017/04/24 Javascript
JavaScript你不知道的一些数组方法
2017/08/18 Javascript
JS库之Three.js 简易入门教程(详解之一)
2017/09/13 Javascript
vue axios 简单封装以及思考
2018/10/09 Javascript
关于vue.js中实现方法内某些代码延时执行
2019/11/14 Javascript
原生JS生成指定位数的验证码
2020/10/28 Javascript
js实现随机点名
2021/01/19 Javascript
关于better-scroll插件的无法滑动bug(2021通过插件解决)
2021/03/01 Javascript
Python进阶_关于命名空间与作用域(详解)
2017/05/29 Python
python字符串常用方法
2018/06/14 Python
使用Selenium破解新浪微博的四宫格验证码
2018/10/19 Python
Python代码块及缓存机制原理详解
2019/12/13 Python
Python基于jieba, wordcloud库生成中文词云
2020/05/13 Python
基于Python下载网络图片方法汇总代码实例
2020/06/24 Python
python如何实现DES加密
2020/09/21 Python
使用canvas压缩图片大小的方法示例
2019/08/02 HTML / CSS
自考生自我鉴定范文
2013/10/01 职场文书
法院四风对照检查材料思想汇报
2014/10/06 职场文书
2015秋季开学演讲稿范文
2015/07/16 职场文书
2015年医院保卫科工作总结
2015/07/23 职场文书