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的栏目导航程序
Oct 09 PHP
PHP 日常开发小技巧
Sep 23 PHP
php5.3中连接sqlserver2000的两种方法(com与ODBC)
Dec 29 PHP
PHP用strstr()函数阻止垃圾评论(通过判断a标记)
Sep 28 PHP
php+ajax实现图片文件上传功能实例
Jun 17 PHP
PHP和Shell实现检查SAMBA与NFS Server是否存在
Jan 07 PHP
thinkPHP连接sqlite3数据库的实现方法(附Thinkphp代码生成器下载)
May 27 PHP
thinkPHP5框架分页样式类完整示例
Sep 01 PHP
PHP cookie与session会话基本用法实例分析
Nov 18 PHP
php下的原生ajax请求用法实例分析
Feb 28 PHP
Yii redis集合的基本使用教程
Jun 14 PHP
PHP7原生MySQL数据库操作实现代码
Jul 03 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
别人整理的服务器变量:$_SERVER
2006/10/20 PHP
在wamp集成环境下升级php版本(实现方法)
2013/07/01 PHP
php三种实现多线程类似的方法
2015/10/30 PHP
PHP模板引擎Smarty内置变量调解器用法详解
2016/04/11 PHP
深入分析PHP设计模式
2020/06/15 PHP
javascript支持firefox,ie7页面布局拖拽效果代码
2007/12/20 Javascript
js 动态选中下拉框
2009/11/26 Javascript
jquery 插件学习(二)
2012/08/06 Javascript
解读JavaScript中 For, While与递归的用法
2013/05/07 Javascript
JavaScript中的连字符详解
2013/11/28 Javascript
js点击选择文本的方法
2015/02/09 Javascript
BootStrap学习系列之Bootstrap Typeahead 组件实现百度下拉效果(续)
2016/07/07 Javascript
AngularJS ng-bind 指令简单实现
2016/07/30 Javascript
AngularJs  Using $location详解及示例代码
2016/09/02 Javascript
Javascript单例模式的介绍和实例
2016/10/08 Javascript
javascript实现圣旨卷轴展开效果(代码分享)
2017/03/23 Javascript
webpack项目调试以及独立打包配置文件的方法
2018/02/28 Javascript
解决jquery有正确返回值但不执行success函数的问题
2018/08/20 jQuery
vue解决使用webpack打包后keep-alive不生效的方法
2018/09/01 Javascript
[02:15]2014DOTA2国际邀请赛 赛后退役选手回顾
2014/08/01 DOTA
python自动安装pip
2014/04/24 Python
Python的Flask框架中配置多个子域名的方法讲解
2016/06/07 Python
python selenium 获取标签的属性值、内容、状态方法
2018/06/22 Python
详解Python 正则表达式模块
2018/11/05 Python
python 字典操作提取key,value的方法
2019/06/26 Python
python 处理微信对账单数据的实例代码
2019/07/19 Python
pytorch方法测试——激活函数(ReLU)详解
2020/01/15 Python
Python求区间正整数内所有素数之和的方法实例
2020/10/13 Python
weblogic面试题
2016/03/07 面试题
中专生职业生涯规划书范文
2013/12/29 职场文书
律师授权委托书范本
2014/10/07 职场文书
司机个人年终总结
2015/03/03 职场文书
公司财务部岗位职责
2015/04/14 职场文书
表扬信范文
2019/04/22 职场文书
导游词幽默开场白
2019/06/26 职场文书
GoLang中生成UUID唯一标识的实现
2021/05/08 Golang