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 相关文章推荐
递归列出所有文件和目录
Oct 09 PHP
亲密接触PHP之PHP语法学习笔记1
Dec 17 PHP
rrmdir php中递归删除目录及目录下的文件
May 15 PHP
Laravel 4 初级教程之视图、命名空间、路由
Oct 30 PHP
PHP跨平台获取服务器IP地址自定义函数分享
Dec 29 PHP
PHP获取数组的键与值方法小结
Jun 13 PHP
两款万能的php分页类
Nov 12 PHP
PHP匿名函数和use子句用法实例
Mar 16 PHP
PHP使用PDO操作数据库的乱码问题解决方法
Apr 08 PHP
PHP+MySQL实现消息队列的方法分析
May 09 PHP
PHP面向对象程序设计重载(overloading)操作详解
Jun 13 PHP
php + ajax 实现的写入数据库操作简单示例
May 16 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
星际玩家的三大定律
2020/03/04 星际争霸
PHP脚本的10个技巧(6)
2006/10/09 PHP
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
2007/02/11 PHP
yii框架中的Url生产问题小结
2012/01/16 PHP
php中判断数组相等的方法以及数组运算符介绍
2015/03/30 PHP
你应该知道PHP浮点数知识
2015/05/13 PHP
Javascript 陷阱 window全局对象
2008/11/26 Javascript
javascript 数组学习资料收集
2010/04/11 Javascript
ECMAScript5中的对象存取器属性:getter和setter介绍
2014/12/08 Javascript
jQuery常见面试题之DOM操作详析
2017/07/05 jQuery
Vue学习笔记进阶篇之函数化组件解析
2017/07/21 Javascript
详解Angular2表单-模板驱动的表单(Template-Driven Forms)
2017/08/04 Javascript
VUE饿了么树形控件添加增删改功能的示例代码
2017/10/17 Javascript
js中apply与call简单用法详解
2017/11/06 Javascript
vue cli webpack中使用sass的方法
2018/02/24 Javascript
js实现简单放大镜效果
2020/03/07 Javascript
JavaScript实现图片合成下载的示例
2020/11/19 Javascript
python实现socket端口重定向示例
2014/02/10 Python
Python ORM框架SQLAlchemy学习笔记之数据查询实例
2014/06/10 Python
python和bash统计CPU利用率的方法
2015/07/10 Python
Python压缩解压缩zip文件及破解zip文件密码的方法
2015/11/04 Python
解决Python的str强转int时遇到的问题
2018/04/09 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
2019/08/12 Python
Python hashlib模块加密过程解析
2019/11/05 Python
Linux中如何用命令创建目录
2015/01/12 面试题
平面设计自荐信
2013/10/07 职场文书
模具设计与制造专业应届生求职信
2013/10/18 职场文书
家佳咖啡店创业计划书
2013/12/27 职场文书
大学学习个人的自我评价
2014/02/18 职场文书
社区工作者演讲稿
2014/05/23 职场文书
四风问题原因分析及整改措施
2014/10/24 职场文书
2014年学生会部门工作总结
2014/11/07 职场文书
追悼会悼词大全
2015/06/23 职场文书
2015国庆节宣传语
2015/07/14 职场文书
导游词之茶卡盐湖
2019/11/26 职场文书
用Python生成会跳舞的美女
2022/01/18 Python