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 和 MySQL 基础教程(一)
Oct 09 PHP
怎么样可以把 phpinfo()屏蔽掉?
Nov 24 PHP
php 将bmp图片转为jpg等其他任意格式的图片
Jun 29 PHP
php GeoIP的使用教程
Mar 09 PHP
深入理解:XML与对象的序列化与反序列化
Jun 08 PHP
IIS6.0中配置php服务全过程解析
Aug 07 PHP
codeigniter教程之多文件上传使用示例
Feb 11 PHP
yii实现级联下拉菜单的方法
Jul 31 PHP
浅析PHP编程中10个最常见的错误
Aug 08 PHP
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
May 09 PHP
php断点续传之文件分割合并详解
Dec 13 PHP
php操作mongodb封装类与用法实例
Sep 01 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获得数组交集与差集的方法
2015/06/10 PHP
jQuery+Ajax+PHP“喜欢”评级功能实现代码
2015/10/08 PHP
php 无限分类 树形数据格式化代码
2016/10/11 PHP
JavaScript delete操作符应用实例
2009/01/13 Javascript
JQuery 图片延迟加载并等比缩放插件
2009/11/09 Javascript
javascript实现跳转菜单的具体方法
2013/07/05 Javascript
Node.js抓取中文网页乱码问题和解决方法
2015/02/10 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
2015/04/16 Javascript
jQuery xml字符串的解析、读取及查找方法
2016/03/01 Javascript
用jQuery向div中添加Html文本内容的简单实现
2016/07/13 Javascript
jQuery插件DataTable使用方法详解(.Net平台)
2016/12/22 Javascript
Angular4 中常用的指令入门总结
2017/06/12 Javascript
如何从零开始利用js手写一个Promise库详解
2018/04/19 Javascript
jQuery实现的简单拖拽功能示例【测试可用】
2018/08/14 jQuery
Element Table的row-class-name无效与动态高亮显示选中行背景色
2018/11/30 Javascript
JS块级作用域和私有变量实例分析
2019/05/11 Javascript
如何在Angular8.0下使用ngx-translate进行国际化配置
2019/07/24 Javascript
在vue-cli3.0 中使用预处理器 (Sass/Less/Stylus) 配置全局变量操作
2020/08/10 Javascript
vue将data恢复到初始状态 &amp;&amp; 重新渲染组件实例
2020/09/04 Javascript
Python多线程同步Lock、RLock、Semaphore、Event实例
2014/11/21 Python
Python使用win32com实现的模拟浏览器功能示例
2017/07/13 Python
python实现闹钟定时播放音乐功能
2018/01/25 Python
jupyter notebook参数化运行python方式
2020/04/10 Python
Python3如何判断三角形的类型
2020/04/12 Python
美国网上鞋城:Shoeline.com
2016/11/17 全球购物
质检员岗位职责
2013/12/17 职场文书
我的动漫时代的创业计划书范文
2014/01/27 职场文书
公司年会抽奖活动主持词
2014/03/31 职场文书
《去年的树》教学反思
2014/04/11 职场文书
本科生自荐信
2014/06/18 职场文书
公司合作意向书范文
2014/07/30 职场文书
2014坚持党风廉政建设思想汇报
2014/09/18 职场文书
详细谈谈MYSQL中的COLLATE是什么
2021/06/11 MySQL
JUnit5常用注解的使用
2021/07/02 Java/Android
PHP设计模式(观察者模式)
2021/07/07 PHP
Nginx HTTP跳转至HTTPS
2022/05/15 Servers