php实现中文字符截取防乱码方法汇总


Posted in PHP onApril 29, 2015

大家在自己的程序中相信都会经常用到截取字符串吧,但是往往遇到截取中文字符串的时候会遇到乱码的问题。很是让人头疼,接下来介绍两种方法防止截取中文字符串的时候出现乱码的问题。
首先第一种,自己写好的一个函数方便使用
利用这个函数截取就不会出现乱码了。

/** 
 * 支持中文字符串截取 
 */ 
function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true){ 
  switch($charset){ 
    case 'utf-8':$char_len=3;break; 
    case 'UTF8':$char_len=3;break; 
    default:$char_len=2; 
  } 
  //小于指定长度,直接返回 
  if(strlen($str)<=($length*$char_len)){   
    return $str; 
  } 
  if(function_exists("mb_substr")){  
    $slice= mb_substr($str, $start, $length, $charset); 
  }else if(function_exists('iconv_substr')){ 
    $slice=iconv_substr($str,$start,$length,$charset); 
  }else{ 
    $re['utf-8']  = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/"; 
    $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/"; 
    $re['gbk']  = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/"; 
    $re['big5']  = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/"; 
    preg_match_all($re[$charset], $str, $match); 
    $slice = join("",array_slice($match[0], $start, $length)); 
  } 
  if($suffix) 
    return $slice; 
  return $slice; 
}

第二种是php内置的一个函数mb_substr函数

指定要截取的字符串的编码格式,就能有效的防止出现乱码了。

说明

string mb_substr ( string $str , int $start [, int $length [, string $encoding ]] ) 
<?php 
 function substr_unicode($str, $s, $l = null) { 
   return join("", array_slice( 
     preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY), $s, $l)); 
 } 
 
$str = "Büyük"; 
 $s = 0; // start from "0" (nth) char 
 $l = 3; // get "3" chars 
 echo substr($str, $s, $l) ."\n";  
 echo mb_substr($str, $s, $l) ."\n"; 
 echo substr_unicode($str, $s, $l); 
 ?>

以上所述就是本文的全部内容了,希望大家能够喜欢。

PHP 相关文章推荐
PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数
Apr 09 PHP
php去除HTML标签实例
Nov 06 PHP
开源php中文分词系统SCWS安装和使用实例
Apr 11 PHP
8个PHP程序员常用的功能汇总
Dec 18 PHP
PHP中使用BigMap实例
Mar 30 PHP
php通过exif_read_data函数获取图片的exif信息
May 21 PHP
图文详解phpstorm配置Xdebug进行调试PHP教程
Jun 13 PHP
PHP使用mysql与mysqli连接Mysql数据库用法示例
Jul 07 PHP
PHP中STDCLASS用法实例分析
Nov 11 PHP
PHP如何读取由JavaScript设置的Cookie
Mar 22 PHP
PHP实现上传多图即时显示与即时删除的方法
May 09 PHP
php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】
May 27 PHP
WIN8.1下搭建PHP5.6环境
Apr 29 #PHP
php筛选不存在的图片资源
Apr 28 #PHP
php+ajax实现无刷新动态加载数据技术
Apr 28 #PHP
php恢复数组的key为数字序列的方法
Apr 28 #PHP
php递归调用删除数组空值元素的方法
Apr 28 #PHP
php删除文本文件中重复行的方法
Apr 28 #PHP
php实现简单的语法高亮函数实例分析
Apr 27 #PHP
You might like
使用Xdebug调试和优化PHP程序之[1]
2007/04/17 PHP
PHP json_encode中文乱码问题的解决办法
2013/09/09 PHP
php获取json数据所有的节点路径
2015/05/17 PHP
脚本收藏iframe
2006/07/21 Javascript
js动态创建表格,删除行列的小例子
2013/07/20 Javascript
JavaScript的递归之递归与循环示例介绍
2013/08/05 Javascript
jQuery让控件左右移动的三种实现方法
2013/09/08 Javascript
如何在JavaScript中实现私有属性的写类方式(二)
2013/12/04 Javascript
Node.js中的事件驱动编程详解
2014/08/16 Javascript
javascript 面向对象封装与继承
2014/11/27 Javascript
IE中鼠标经过option触发mouseout的解决方法
2015/01/29 Javascript
浅谈JavaScript中的作用域和闭包问题
2015/07/07 Javascript
nodejs使用express创建一个简单web应用
2017/03/31 NodeJs
js实现点击切换checkbox背景图片的简单实例
2017/05/08 Javascript
javascript 数据存储的常用函数总结
2017/06/01 Javascript
微信小程序中页面FOR循环和嵌套循环
2017/06/21 Javascript
vue插件vue-resource的使用笔记(小结)
2017/08/04 Javascript
ES6知识点整理之函数数组参数的默认值及其解构应用示例
2019/04/17 Javascript
js中的this的指向问题详解
2019/08/29 Javascript
详解vue3.0 的 Composition API 的一种使用方法
2020/10/26 Javascript
Python中MySQL数据迁移到MongoDB脚本的方法
2016/04/28 Python
Bottle框架中的装饰器类和描述符应用详解
2017/10/28 Python
Python Django 实现简单注册功能过程详解
2019/07/29 Python
python os.path.isfile 的使用误区详解
2019/11/29 Python
学python需要去培训机构吗
2020/07/01 Python
德国网上宠物店:Zoobio
2018/05/23 全球购物
英国设计师泳装、沙滩装和比基尼在线精品店:Beach Cafe
2019/08/28 全球购物
自我评价怎么写正确呢?
2013/12/02 职场文书
高一学年自我鉴定范文(3篇)
2014/09/26 职场文书
大学生迟到检讨书500字
2014/10/17 职场文书
2014年党建工作汇报材料
2014/11/02 职场文书
2014年纪委工作总结
2014/12/05 职场文书
教育教学读书笔记
2015/07/02 职场文书
2016年保险公众宣传日活动总结
2016/04/05 职场文书
会议承办单位欢迎词
2019/07/09 职场文书
我们认为中短波广播场强仪的最佳组合
2022/04/05 无线电