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 相关文章推荐
在PHP3中实现SESSION的功能(二)
Oct 09 PHP
第二节--PHP5 的对象模型
Nov 16 PHP
php 购物车实例(申精)
May 11 PHP
php 取得瑞年与平年的天数的代码
Aug 10 PHP
php生成随机密码的几种方法
Jan 17 PHP
php之readdir函数用法实例
Nov 13 PHP
PHP使用redis实现统计缓存mysql压力的方法
Nov 14 PHP
WordPress开发中用于标题显示的相关函数使用解析
Jan 07 PHP
如何正确配置Nginx + PHP
Jul 15 PHP
php实现用户注册密码的crypt加密
Jun 08 PHP
PHP后台实现微信小程序登录
Aug 03 PHP
php字符串截取函数mb_substr用法实例分析
Jun 25 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
深入理解PHP原理之错误抑制与内嵌HTML分析
2011/05/02 PHP
ThinkPHP实例化模型的四种方法概述
2014/08/22 PHP
详解PHP中instanceof关键字及instanceof关键字有什么作用
2015/11/05 PHP
学习php设计模式 php实现原型模式(prototype)
2015/12/07 PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
2017/05/04 PHP
PHP使用PDO 连接与连接管理操作实例分析
2020/04/21 PHP
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3
2008/03/22 Javascript
Jquery Ajax请求代码(2)
2011/01/07 Javascript
javaScript矢量图表库-gRaphael几行代码实现精美的条形图/饼图/点图/曲线图
2013/01/09 Javascript
使用GruntJS构建Web程序之Tasks(任务)篇
2014/06/06 Javascript
[原创]Bootstrap 中下拉菜单修改成鼠标悬停直接显示
2016/04/14 Javascript
一系列Bootstrap导航条使用方法分享
2016/04/29 Javascript
详解vue-Resource(与后端数据交互)
2017/01/16 Javascript
jQuery自定义多选下拉框效果
2017/06/19 jQuery
创建简单的node服务器实例(分享)
2017/06/23 Javascript
js中的事件委托或是事件代理使用详解
2017/06/23 Javascript
Node.js使用Express.Router的方法
2017/11/14 Javascript
纯js封装的ajax功能函数与用法示例
2018/05/14 Javascript
小白教程|一小时上手最流行的前端框架vue(推荐)
2019/04/10 Javascript
Vue中this.$nextTick的作用及用法
2020/02/04 Javascript
python自动化测试之连接几组测试包实例
2014/09/28 Python
Pandas:Series和DataFrame删除指定轴上数据的方法
2018/11/10 Python
PYQT5设置textEdit自动滚屏的方法
2019/06/14 Python
Python ConfigParser模块的使用示例
2020/10/12 Python
详解CSS3新增的背景属性
2019/12/25 HTML / CSS
欧缇丽英国官方网站:Caudalie英国
2016/08/17 全球购物
New Era英国官网:美国棒球帽品牌
2018/03/21 全球购物
财务管理个人自荐书范文
2013/11/24 职场文书
离婚协议书该怎么写
2014/10/04 职场文书
家属答谢词
2015/01/05 职场文书
业务员岗位职责
2015/02/03 职场文书
财务个人年度总结范文
2015/02/26 职场文书
团队拓展训练心得体会
2016/01/12 职场文书
如何撰写促销方案?
2019/07/05 职场文书
进行数据处理的6个 Python 代码块分享
2022/04/06 Python
零基础学java之带返回值的方法的定义和调用
2022/04/10 Java/Android