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 01 PHP
初学PHP的朋友 经常问的一些问题。不断更新
Aug 11 PHP
php mysql 判断update之后是否更新了的方法
Jan 10 PHP
PHP中对于浮点型的数据需要用不同的方法解决
Mar 11 PHP
php递归调用删除数组空值元素的方法
Apr 28 PHP
PHP中使用curl入门教程
Jul 02 PHP
PHP接口并发测试的方法(推荐)
Dec 15 PHP
php实现图片按比例截取的方法
Feb 06 PHP
Thinkphp5行为使用方法汇总
Dec 21 PHP
PHP抽象类和接口用法实例详解
Jul 20 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
Mar 26 PHP
PHP扩展类型及安装方式解析
Apr 27 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
一个简洁的多级别论坛
2006/10/09 PHP
使用Curl进行抓取远程内容时url中文编码问题示例探讨
2013/10/29 PHP
PHP实现视频文件上传完整实例
2014/08/28 PHP
使用laravel指定日志文件记录任意日志
2019/10/17 PHP
html向js方法传递参数具体实现
2013/08/08 Javascript
Jquery 类网页微信二维码图块滚动效果具体实现
2013/10/14 Javascript
JQuery中extend使用介绍
2014/03/13 Javascript
JS实现静止元素自动移动示例
2014/04/14 Javascript
JavaScript DOM节点添加示例
2014/07/16 Javascript
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
完美解决IE9浏览器出现的对象未定义问题
2016/09/29 Javascript
JavaScript实现定时页面跳转功能示例
2017/02/14 Javascript
Angular.js组件之input mask对input输入进行格式化详解
2017/07/10 Javascript
jQuery实现点击下拉框中的值累加到文本框中的方法示例
2017/10/28 jQuery
使用Angular-CLI构建NPM包的方法
2018/09/07 Javascript
Vue CLI 3搭建vue+vuex最全分析(推荐)
2018/09/27 Javascript
微信小程序判断用户是否需要再次授权获取个人信息
2019/07/18 Javascript
Javascript如何实现双指控制图片功能
2020/02/25 Javascript
vue滑动吸顶及锚点定位的示例代码
2020/05/10 Javascript
通过滑动翻页效果实现和移动端click事件问题
2021/01/26 Javascript
[01:43]倾听DOTA2英雄之声 魅惑魔女国服配音鉴赏
2013/06/06 DOTA
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
Python中使用多进程来实现并行处理的方法小结
2017/08/09 Python
Python实现带参数与不带参数的多重继承示例
2018/01/30 Python
使用Tkinter制作信息提示框
2020/02/18 Python
浅谈tensorflow 中的图片读取和裁剪方式
2020/06/30 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
2020/07/03 Python
HTML5 DeviceOrientation实现手机网站摇一摇功能代码实例
2015/04/24 HTML / CSS
智能钱包:Ekster
2019/11/21 全球购物
新闻编辑自荐书范文
2014/02/12 职场文书
酒店开业策划方案
2014/06/02 职场文书
出纳工作检讨书
2014/10/18 职场文书
劳动仲裁撤诉申请书
2015/05/18 职场文书
nginx实现发布静态资源的方法
2021/03/31 Servers
python小程序之飘落的银杏
2021/04/17 Python
python字符串常规操作大全
2021/05/02 Python