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.0正式发布 不完全兼容PHP4 新增多项功能
Oct 09 PHP
中篇:安装及配置PHP
Dec 13 PHP
使用PHP 5.0创建图形的巧妙方法
Oct 12 PHP
七款最流行的PHP本地服务器分享
Feb 19 PHP
PHP连接sql server 2005环境配置及问题解决
Aug 08 PHP
PHP实现的多彩标签效果代码分享
Aug 21 PHP
PHP进程同步代码实例
Feb 12 PHP
递归实现php数组转xml的代码分享
May 14 PHP
php防止CC攻击代码 php防止网页频繁刷新
Dec 21 PHP
PHP操作mysql数据库分表的方法
Jun 09 PHP
详解Yii2高级版引入bootstrap.js的一个办法
Mar 21 PHP
Yii框架数据库查询、增加、删除操作示例
Oct 14 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下载远程文件类(支持断点续传)
2008/11/14 PHP
IIS6.0中配置php服务全过程解析
2013/08/07 PHP
基于PHP生成简单的验证码
2016/06/01 PHP
JAVASCRIPT style 中visibility和display之间的区别
2010/01/22 Javascript
基于Jquery制作的幻灯片图集效果打包下载
2011/02/12 Javascript
一个挺有意思的Javascript小问题说明
2011/09/26 Javascript
javascript date格式化示例
2013/09/25 Javascript
javascript中创建对象的几种方法总结
2013/11/01 Javascript
在每个匹配元素的外部插入新元素的方法
2013/12/20 Javascript
删除条目时弹出的确认对话框
2014/06/05 Javascript
JavaScript基础语法之js表达式
2016/06/07 Javascript
关于网页中的无缝滚动的js代码
2016/06/09 Javascript
JavaScript字符串_动力节点Java学院整理
2017/06/27 Javascript
JS Input里添加小图标的两种方法
2017/11/11 Javascript
详解操作虚拟dom模拟react视图渲染
2018/07/25 Javascript
json字符串对象转换代码实例
2019/09/28 Javascript
文章或博客自动生成章节目录索引(支持三级)的实现代码
2020/05/10 Javascript
Node.js API详解之 Error模块用法实例分析
2020/05/14 Javascript
vue keep-alive实现多组件嵌套中个别组件存活不销毁的操作
2020/10/30 Javascript
[03:44]2014DOTA2国际邀请赛 71专访:DK战队赛前讨论视频遭泄露
2014/07/13 DOTA
[31:55]完美世界DOTA2联赛循环赛 IO vs GXR BO2第一场 11.04
2020/11/05 DOTA
[54:57]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第二场 1月8日
2021/03/11 DOTA
Django集成百度富文本编辑器uEditor攻略
2014/07/04 Python
浅析Python中yield关键词的作用与用法
2016/11/29 Python
Python实现基本数据结构中栈的操作示例
2017/12/04 Python
python回调函数中使用多线程的方法
2017/12/25 Python
python计算日期之间的放假日期
2018/06/05 Python
对python遍历文件夹中的所有jpg文件的实例详解
2018/12/08 Python
Django用户认证系统 组与权限解析
2019/08/02 Python
Python使用字典实现的简单记事本功能示例
2019/08/15 Python
Html5调用手机摄像头并实现人脸识别的实现
2018/12/21 HTML / CSS
银行营业厅大堂经理岗位职责
2014/01/06 职场文书
三查三看党性分析材料
2014/02/18 职场文书
校运会通讯稿
2015/07/18 职场文书
python 提取html文本的方法
2021/05/20 Python
Redis过期数据是否会被立马删除
2022/07/23 Redis