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+SqlServer实现分页显示
Oct 09 PHP
攻克CakePHP系列一 连接MySQL数据库
Oct 22 PHP
PHP 面向对象实现代码
Nov 11 PHP
php下正则来匹配dede模板标签的代码
Aug 21 PHP
php生成略缩图代码
Jul 16 PHP
实现PHP+Mysql无限分类的方法汇总
Mar 02 PHP
php获取英文姓名首字母的方法
Jul 13 PHP
php实现zip文件解压操作
Nov 03 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
May 13 PHP
CodeIgniter记录错误日志的方法全面总结
May 17 PHP
thinkPHP5.0框架自动加载机制分析
Mar 18 PHP
Laravel构建即时应用的一种实现方法详解
Aug 31 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实现维护文件代码
2007/06/14 PHP
PHP导航下拉菜单的实现如此简单
2013/09/22 PHP
PHP添加Xdebug扩展的方法
2014/02/12 PHP
php备份数据库类分享
2015/04/14 PHP
简单的php+mysql聊天室实现方法(附源码)
2016/01/05 PHP
php打包网站并在线压缩为zip
2016/02/13 PHP
yii框架数据库关联查询操作示例
2019/10/14 PHP
php生成短网址/短链接原理和用法实例分析
2020/05/29 PHP
Extjs实现进度条的两种便捷方式
2013/09/26 Javascript
js中typeof的用法汇总
2013/12/12 Javascript
jQuery$命名冲突怎么办如何解决
2014/01/16 Javascript
javascript中call和apply的用法示例分析
2015/04/02 Javascript
javascript实现点击单选按钮链接转向对应网址的方法
2015/08/12 Javascript
jquery+CSS实现的水平布局多级网页菜单效果
2015/08/24 Javascript
JS实现弹性漂浮效果的广告代码
2015/09/02 Javascript
jQuery实现产品对比功能附源码下载
2016/08/09 Javascript
input 禁止输入特殊字符的四种实现方式
2016/08/24 Javascript
Ionic+AngularJS实现登录和注册带验证功能
2017/02/09 Javascript
图片懒加载imgLazyLoading.js使用详解
2020/09/15 Javascript
JS 音频可视化插件Wavesurfer.js的使用教程
2018/10/31 Javascript
基于layui的table插件进行复选框联动功能的实现方法
2019/09/19 Javascript
vue+webpack dev本地调试全局样式引用失效的解决方案
2019/11/12 Javascript
vuex(vue状态管理)的特殊应用案例分享
2020/03/03 Javascript
通过实例解析json与jsonp原理及使用方法
2020/09/27 Javascript
用Python实现换行符转换的脚本的教程
2015/04/16 Python
33个Python爬虫项目实战(推荐)
2019/07/08 Python
PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解
2020/04/16 Python
python绘图模块之利用turtle画图
2021/02/12 Python
CSS3 简写animation
2012/05/10 HTML / CSS
Monnier Frères美国官网:法国知名奢侈品网站
2016/11/22 全球购物
阿迪达斯印尼官方网站:adidas印尼
2020/02/10 全球购物
学校万圣节活动方案
2014/02/13 职场文书
公证委托书
2014/08/01 职场文书
公司向个人借款协议书范本
2014/10/09 职场文书
2015年销售部工作总结范文
2015/04/27 职场文书
如何使用JavaScript策略模式校验表单
2021/04/29 Javascript