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新手上路(七)
Oct 09 PHP
PHP5.3.1 不再支持ISAPI
Jan 08 PHP
如何在smarty中增加类似foreach的功能自动加载数据
Jun 26 PHP
php利用单例模式实现日志处理类库
Feb 10 PHP
ThinkPHP中的关联模型注意点
Jun 16 PHP
windows8.1下Apache+Php+MySQL配置步骤
Oct 30 PHP
WordPress中给文章添加自定义字段及后台编辑功能区域
Dec 19 PHP
php利用imagemagick实现复古老照片效果实例
Feb 16 PHP
yii2.0整合阿里云oss删除单个文件的方法
Sep 19 PHP
PHP赋值的内部是如何跑的详解
Jan 13 PHP
Laravel基础_关于view共享数据的示例讲解
Oct 14 PHP
PHP网页缓存技术优点及代码实例
Jul 29 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
分页显示Oracle数据库记录的类之二
2006/10/09 PHP
PHP日期函数date格式化UNIX时间的方法
2015/03/19 PHP
Laravel多用户认证系统示例详解
2018/03/13 PHP
Firefox下提示illegal character并出现乱码的原因
2010/03/25 Javascript
从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
2011/02/23 Javascript
nodejs中实现路由功能
2014/12/29 NodeJs
jquery任意位置浮动固定层插件用法实例
2015/05/29 Javascript
Bootstrap CSS组件之分页(pagination)和翻页(pager)
2016/12/17 Javascript
bootstrap导航、选项卡实现代码
2016/12/28 Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
2017/01/04 Javascript
vue项目中使用tinymce编辑器的步骤详解
2018/09/11 Javascript
react使用CSS实现react动画功能示例
2020/05/18 Javascript
解决Vue-Router升级导致的Uncaught (in promise)问题
2020/08/07 Javascript
openlayers4实现点动态扩散
2020/08/17 Javascript
[01:58]最残酷竞争 2016国际邀请赛中国区预选赛积分循环赛回顾
2016/06/28 DOTA
Python解析json文件相关知识学习
2016/03/01 Python
python中日志logging模块的性能及多进程详解
2017/07/18 Python
解读python logging模块的使用方法
2018/04/17 Python
Python实现多进程的四种方式
2019/02/22 Python
python实现五子棋人机对战游戏
2020/03/25 Python
如何将 awk 脚本移植到 Python
2019/12/09 Python
CSS3制作缩略图的详细过程
2016/07/08 HTML / CSS
南非领先的在线旅行社:Travelstart南非
2016/09/04 全球购物
天巡全球:Skyscanner Global
2017/06/20 全球购物
微软瑞士官方网站:Microsoft瑞士
2018/04/20 全球购物
诗普兰迪官方网站:Splendid
2018/09/18 全球购物
设计总监岗位职责
2013/12/07 职场文书
国际金融专业大学生职业生涯规划书
2013/12/28 职场文书
商场促销活动方案
2014/02/08 职场文书
小学语文国培感言
2014/03/04 职场文书
奉献演讲稿范文
2014/05/21 职场文书
法制教育演讲稿
2014/09/10 职场文书
会议营销主持词
2015/07/03 职场文书
导游词之四川武侯祠
2019/10/21 职场文书
详解php中流行的rpc框架
2021/05/29 PHP
go使用Gin框架利用阿里云实现短信验证码功能
2021/08/04 Golang