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 05 PHP
初品cakephp 入门基础
Feb 16 PHP
PHP fopen 读取带中文URL地址的一点见解
Sep 25 PHP
基于php缓存的详解
May 15 PHP
PHP文件上传主要代码讲解
Sep 30 PHP
zend framework框架中url大小写问题解决方法
Aug 19 PHP
php 如何获取文件的后缀名
Jun 05 PHP
PHP7匿名类用法分析
Sep 26 PHP
highchart数据源纵轴json内的值必须是int(详解)
Feb 20 PHP
浅谈Yii乐观锁的使用及原理
Jul 25 PHP
Yii框架组件的事件机制原理与用法分析
Apr 07 PHP
PHP替换Word中变量并导出PDF图片的实现方法
Nov 26 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
DC四月将推出百页特刊漫画 纪念小丑诞生80周年
2020/04/09 欧美动漫
php实现的简单检验登陆类
2015/06/18 PHP
Smarty3配置及入门语法
2017/02/22 PHP
[原创]PHP正则匹配中英文、数字及下划线的方法【用户名验证】
2017/08/01 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
2017/10/11 PHP
BOOM vs RR BO5 第二场 2.14
2021/03/10 DOTA
超炫的jquery仿flash导航栏特效
2014/11/11 Javascript
纯javascript实现四方向文本无缝滚动效果
2015/06/16 Javascript
Javascript实现快速排序(Quicksort)的算法详解
2015/09/06 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
2016/01/10 Javascript
jQuery+pjax简单示例汇总
2017/04/21 jQuery
JS库中的Particles.js在vue上的运用案例分析
2017/09/13 Javascript
Vue组件之自定义事件的功能图解
2018/02/01 Javascript
记一次webpack3升级webpack4的踩坑经历
2018/06/12 Javascript
JavaScript折半查找(二分查找)算法原理与实现方法示例
2018/08/06 Javascript
解决vue select当前value没有更新到vue对象属性的问题
2018/08/30 Javascript
javascript设计模式 ? 享元模式原理与用法实例分析
2020/04/15 Javascript
vue使用require.context实现动态注册路由
2020/12/25 Vue.js
[09:47]2018DOTA2亚洲邀请赛4.5SOLO赛 No[o]ne vs Sumail
2018/04/06 DOTA
Python中你应该知道的一些内置函数
2017/03/31 Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
2017/09/12 Python
python 类对象和实例对象动态添加方法(分享)
2017/12/31 Python
python机器学习理论与实战(五)支持向量机
2018/01/19 Python
浅谈Tensorflow模型的保存与恢复加载
2018/04/26 Python
django缓存配置的几种方法详解
2018/07/16 Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
2018/10/26 Python
在Mac上删除自己安装的Python方法
2018/10/29 Python
Python爬虫基于lxml解决数据编码乱码问题
2020/07/31 Python
下面关于"联合"的题目的输出是什么
2013/08/06 面试题
电气工程及其自动化自我评价四篇
2013/09/24 职场文书
土木工程毕业生自荐信
2013/11/12 职场文书
优秀党员学习焦裕禄精神思想汇报范文
2014/09/10 职场文书
会议接待欢迎词范文
2015/01/26 职场文书
新教师2015年度工作总结
2015/07/22 职场文书
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
2022/03/21 Java/Android
Python语法学习之进程的创建与常用方法详解
2022/04/08 Python