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编码规范-php coding standard
Mar 16 PHP
PHP错误抑制符(@)导致引用传参失败Bug的分析
May 02 PHP
慎用preg_replace危险的/e修饰符(一句话后门常用)
Jun 19 PHP
两级联动select刷新后其值保持不变的实现方法
Jan 27 PHP
PHP生成网站桌面快捷方式代码分享
Oct 11 PHP
PHP中定义数组常量(array常量)的方法
Nov 17 PHP
php实现图片转换成ASCII码的方法
Apr 03 PHP
WordPress中&quot;无法将上传的文件移动至&quot;错误的解决方法
Jul 01 PHP
php array_walk_recursive 使用自定的函数处理数组中的每一个元素
Nov 16 PHP
PHP定义字符串的四种方式详解
Feb 06 PHP
php合并数组并保留键值的实现方法
Mar 12 PHP
PHP实现websocket通信的方法示例
Aug 28 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
Drupal7中常用的数据库操作实例
2014/03/02 PHP
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
2014/05/08 PHP
php5.3以后的版本连接sqlserver2000的方法
2014/07/28 PHP
PHP扩展模块memcached长连接使用方法分析
2014/12/24 PHP
Yii2使用自带的UploadedFile实现的文件上传
2016/06/20 PHP
php好代码风格的阶段性总结
2016/06/25 PHP
php使用glob函数遍历文件和目录详解
2016/09/23 PHP
php 修改上传文件大小限制实例详解
2016/10/23 PHP
PHP版微信小店接口开发实例
2016/11/12 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
利用PHP判断是手机移动端还是PC端访问的函数示例
2017/12/14 PHP
javascript倒计时功能实现代码
2012/06/07 Javascript
JQuery操作tr和td内容的方法实例
2013/03/06 Javascript
JS常用字符串处理方法应用总结
2014/05/22 Javascript
javascript中Number对象的toString()方法分析
2014/12/20 Javascript
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
2015/01/01 NodeJs
JavaScript里四舍五入函数round用法实例
2015/04/06 Javascript
深入学习jQuery Validate表单验证
2016/01/18 Javascript
Vue SPA单页应用首屏优化实践
2018/06/28 Javascript
解决百度Echarts图表坐标轴越界的方法
2018/10/17 Javascript
Vue.js中 v-model 指令的修饰符详解
2018/12/03 Javascript
vue $mount 和 el的区别说明
2020/09/11 Javascript
vue 使用vant插件做tabs切换和无限加载功能的实现
2020/11/04 Javascript
用vue设计一个日历表
2020/12/03 Vue.js
Python批量修改文本文件内容的方法
2016/04/29 Python
python+pyqt实现右下角弹出框
2017/10/26 Python
python实现的多任务版udp聊天器功能案例
2019/11/13 Python
英国家庭家具、照明和花园家具购物网站:Furniture123
2018/12/31 全球购物
名词解释WEB SERVICE,SOAP,UDDI,WSDL,JAXP,JAXM;JSWDL开发包的介绍。
2012/10/27 面试题
后勤采购员岗位职责
2013/12/19 职场文书
自动化职业生涯规划书范文
2014/01/03 职场文书
物流合作计划书
2014/01/10 职场文书
《晚上的太阳》教学反思
2014/04/23 职场文书
党员群众路线整改措施及今后努力方向
2014/10/28 职场文书
教师考核表个人总结
2015/02/12 职场文书
2015年纪委工作总结
2015/05/13 职场文书