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 相关文章推荐
Zend Studio 无法启动的问题解决方法
Dec 04 PHP
PHP中对用户身份认证实现两种方法
Jun 04 PHP
php设计模式小结
Feb 15 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
Nov 07 PHP
php 表单提交大量数据发生丢失的解决方法
Mar 03 PHP
ThinkPHP模板引擎之导入资源文件方法详解
Jun 18 PHP
ThinkPHP行为扩展Behavior应用实例详解
Jul 22 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
May 27 PHP
php实现用已经过去多长时间的方式显示时间
Jun 05 PHP
PHP自定义函数实现数组比较功能示例
Oct 19 PHP
php测试kafka项目示例
Feb 06 PHP
PHP设计模式(一)工厂模式Factory实例详解【创建型】
May 02 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
解析thinkphp中的M()与D()方法的区别
2013/06/22 PHP
如何使用PHP Embed SAPI实现Opcodes查看器
2015/11/10 PHP
Yii2配置Nginx伪静态的方法
2017/05/05 PHP
PHP实现微信图片上传到服务器的方法示例
2017/06/29 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
PHP自定义错误处理的方法分析
2018/12/19 PHP
jquery 可排列的表实现代码
2009/11/13 Javascript
xheditor与validate插件冲突的解决方案
2010/04/15 Javascript
jQuery实现textarea自动增长宽高的方法
2015/12/18 Javascript
理解Javascript图片预加载
2016/02/23 Javascript
jquery动态创建div与input的实例代码
2016/10/12 Javascript
JS简单获取当前日期和农历日期的方法
2017/04/17 Javascript
js自定义弹框插件的封装
2020/08/24 Javascript
利用pm2部署多个node.js项目的配置教程
2017/10/22 Javascript
JavaScript基于对象方法实现数组去重及排序操作示例
2018/07/10 Javascript
JS实现可视化文件上传
2018/09/08 Javascript
js form表单input框限制20个字符,10个汉字代码实例
2019/04/12 Javascript
vue 解除鼠标的监听事件的方法
2019/11/13 Javascript
vue开发移动端底部导航条功能
2020/04/08 Javascript
vue全局使用axios的操作
2020/09/08 Javascript
[00:34]DOTA2上海特级锦标赛 Spirit战队宣传片
2016/03/04 DOTA
[02:36]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma 选手采访
2021/03/11 DOTA
python BeautifulSoup设置页面编码的方法
2015/04/03 Python
Python 迭代器与生成器实例详解
2017/05/18 Python
python使用matplotlib画饼状图
2018/09/25 Python
Python判断变量名是否合法的方法示例
2019/01/28 Python
超简单使用Python换脸实例
2019/03/27 Python
Django 过滤器汇总及自定义过滤器使用详解
2019/07/19 Python
pycharm快捷键汇总
2020/02/14 Python
python 写一个水果忍者游戏
2021/01/13 Python
豪华床上用品、床单和浴室必需品:Peacock Alley
2019/09/04 全球购物
农村婚礼证婚词
2014/01/10 职场文书
安康杯竞赛活动总结
2014/05/05 职场文书
单身申明具结书
2015/02/26 职场文书
Python图像处理之图像拼接
2021/04/28 Python
Python 数据可视化神器Pyecharts绘制图像练习
2022/02/28 Python