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 相关文章推荐
fleaphp crud操作之findByField函数的使用方法
Apr 23 PHP
php定时计划任务的实现方法详解
Jun 06 PHP
php中利用str_pad函数生成数字递增形式的产品编号
Sep 30 PHP
解决file_get_contents无法请求https连接的方法
Dec 17 PHP
php通过Chianz.com获取IP地址与地区的方法
Jan 14 PHP
PHP下载生成的csv文件及问题总结
Aug 06 PHP
PHP给文字内容中的关键字进行套红处理
Apr 12 PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
Nov 07 PHP
ThinkPHP框架表单验证操作方法
Jul 19 PHP
php如何把表单内容提交到数据库
Jul 08 PHP
laravel Validator ajax返回错误信息的方法
Sep 29 PHP
PHP pthreads v3下同步处理synchronized用法示例
Feb 21 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通用检测函数集合
2011/02/08 PHP
采用header定义为文件然后readfile下载(隐藏下载地址)
2014/01/31 PHP
IE本地存储userdata的一个bug说明
2010/07/01 Javascript
基于jquery的图片幻灯展示源码
2012/07/15 Javascript
Java File类的常用方法总结
2015/03/18 Javascript
使用Promise解决多层异步调用的简单学习心得
2016/05/17 Javascript
详解Javascript百度地图接口开发文档中的类和方法
2017/02/07 Javascript
分享十三个最佳JavaScript数据网格库
2017/04/07 Javascript
Angular 4.X开发实践中的踩坑小结
2017/07/04 Javascript
JS+canvas画一个圆锥实例代码
2017/12/13 Javascript
基于vue打包后字体和图片资源失效问题的解决方法
2018/03/06 Javascript
JavaScript中常用的简洁高级技巧总结
2019/03/10 Javascript
小程序登录/注册页面设计的实现代码
2019/05/24 Javascript
[19:14]DOTA2 HEROS教学视频教你分分钟做大人-维萨吉
2014/06/24 DOTA
python 域名分析工具实现代码
2009/07/15 Python
用Python脚本生成Android SALT扰码的方法
2013/09/18 Python
实现python版本的按任意键继续/退出
2016/09/26 Python
python制作抖音代码舞
2019/04/07 Python
浅谈Python3中strip()、lstrip()、rstrip()用法详解
2019/04/29 Python
pytorch 在sequential中使用view来reshape的例子
2019/08/20 Python
python实现的生成word文档功能示例
2019/08/23 Python
python二维键值数组生成转json的例子
2019/12/06 Python
vue常用指令代码实例总结
2020/03/16 Python
html5 canvas里绘制椭圆并保持线条粗细均匀的技巧
2013/03/25 HTML / CSS
Hotels.com印度:酒店预订
2019/05/11 全球购物
介绍一下常见的木马种类
2014/11/15 面试题
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
国贸专业个人求职信范文
2014/01/08 职场文书
英文商务邀请信
2014/01/22 职场文书
警校毕业生自我评价
2014/04/06 职场文书
大学生赌博检讨书
2014/09/22 职场文书
2015年五一劳动节活动总结
2015/02/09 职场文书
趣味运动会新闻稿
2015/07/17 职场文书
被委托人身份证明
2015/08/07 职场文书
Python中re模块的元字符使用小结
2022/04/07 Python