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 相关文章推荐
3.从实例开始
Oct 09 PHP
PHP mkdir()定义和用法
Jan 14 PHP
PHP常用技巧总结(附函数代码)
Feb 04 PHP
PHP引用符&amp;的用法详细解析
Aug 22 PHP
php strrpos()与strripos()函数
Aug 31 PHP
PHP之APC缓存详细介绍 apc模块安装
Jan 13 PHP
浅谈PDO的rowCount函数
Jun 18 PHP
PHP实现基于文本的摩斯电码生成器
Jan 11 PHP
thinkphp3.2.3版本的数据库增删改查实现代码
Sep 22 PHP
PHP实现的DES加密解密类定义与用法示例
Nov 02 PHP
PHP封装cURL工具类与应用示例
Jul 01 PHP
php 多个变量指向同一个引用($b = &amp;$a)用法分析
Nov 13 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下判断数组中是否存在相同的值array_unique
2008/03/25 PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
2016/03/25 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
2020/04/27 PHP
javascript实现获取服务器时间
2015/05/19 Javascript
详解AngularJS中自定义过滤器
2015/12/28 Javascript
Vuejs第十篇之vuejs父子组件通信
2016/09/06 Javascript
JS对象是否拥有某属性如何判断
2017/02/03 Javascript
微信小程序中使用javascript 回调函数
2017/05/11 Javascript
简单谈谈vue的过渡动画(推荐)
2017/10/11 Javascript
React Native验证码倒计时工具类分享
2017/10/24 Javascript
angular 实现的输入框数字千分位及保留几位小数点功能示例
2018/06/19 Javascript
基于webpack4搭建的react项目框架的方法
2018/06/30 Javascript
vue 使用html2canvas将DOM转化为图片的方法
2018/09/11 Javascript
vue+django实现一对一聊天功能的实例代码
2019/07/17 Javascript
javascript设计模式 ? 迭代器模式原理与用法实例分析
2020/04/17 Javascript
Python采集腾讯新闻实例
2014/07/10 Python
零基础写python爬虫之抓取百度贴吧并存储到本地txt文件改进版
2014/11/06 Python
python 时间戳与格式化时间的转化实现代码
2016/03/23 Python
在Python中关于使用os模块遍历目录的实现方法
2019/01/03 Python
详解python中TCP协议中的粘包问题
2019/03/22 Python
Python类中方法getitem和getattr详解
2019/08/30 Python
Python字符串、列表、元组、字典、集合的补充实例详解
2019/12/20 Python
Python项目实战之使用Django框架实现支付宝付款功能
2021/02/23 Python
CSS的pointer-events属性详细介绍(作用和注意事项)
2014/04/23 HTML / CSS
带你认识HTML5中的WebSocket
2015/05/22 HTML / CSS
预备党员转正思想汇报
2014/01/12 职场文书
英语商务邀请函范文
2014/01/16 职场文书
学校门卫岗位职责
2014/03/16 职场文书
工会工作先进事迹
2014/08/18 职场文书
财政局个人总结
2015/03/04 职场文书
高校自主招生教师推荐信
2015/03/23 职场文书
小学生家长意见
2015/06/03 职场文书
Vue.Draggable实现交换位置
2022/04/07 Vue.js
CSS 鼠标点击拖拽效果的实现代码
2022/12/24 HTML / CSS