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 相关文章推荐
基于mysql的bbs设计(四)
Oct 09 PHP
php时间不正确的解决方法
Apr 09 PHP
PHP程序员面试 切忌急功近利(更需要注重以后的发展)
Sep 01 PHP
php设计模式 Delegation(委托模式)
Jun 26 PHP
php笔记之:php数组相关函数的使用
Apr 26 PHP
ThinkPHP表单自动提交验证实例教程
Jul 18 PHP
PHP函数eval()介绍和使用示例
Aug 20 PHP
php实现无限级分类
Dec 24 PHP
php字符串分割函数用法实例
Mar 17 PHP
PHP编写RESTful接口
Feb 23 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
Nov 14 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
Apr 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
smarty基础之拼接字符串的详解
2013/06/18 PHP
解析curl提交GET,POST,Cookie的简单方法
2013/06/29 PHP
十分钟打造AutoComplete自动完成效果代码
2009/12/26 Javascript
『jQuery』.html(),.text()和.val()的概述及使用
2013/04/22 Javascript
javascript递归回溯法解八皇后问题
2015/04/22 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
2015/09/04 Javascript
简单谈谈node.js 版本控制 nvm和 n
2015/10/15 Javascript
JavaScript中将数组进行合并的基本方法讲解
2016/03/07 Javascript
关于动态执行代码(js的Eval)实例详解
2016/08/15 Javascript
vue树形结构获取键值的方法示例
2018/06/21 Javascript
详解Vue webapp项目通过HBulider打包原生APP
2018/06/29 Javascript
小程序红包雨的实现示例
2019/02/19 Javascript
扫微信小程序码实现网站登陆实现解析
2019/08/20 Javascript
关于Node.js中频繁修改代码重启服务器的问题
2020/10/15 Javascript
[02:15]2014DOTA2国际邀请赛 专访LGD.lin小兔子是大腿
2014/07/14 DOTA
[01:20]2018DOTA2亚洲邀请赛总决赛战队Mineski晋级之路
2018/04/07 DOTA
Python的高级Git库 Gittle
2014/09/22 Python
python中list循环语句用法实例
2014/11/10 Python
Python基于select实现的socket服务器
2016/04/13 Python
python版本单链表实现代码
2018/09/28 Python
Python3将数据保存为txt文件的方法
2019/09/12 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
2020/05/12 Python
python使用re模块爬取豆瓣Top250电影
2020/10/20 Python
详解numpy1.19.4与python3.9版本冲突解决
2020/12/15 Python
python实现xml转json文件的示例代码
2020/12/30 Python
阿迪达斯比利时官方商城:adidas比利时
2016/10/10 全球购物
阿迪达斯芬兰官方网站:adidas芬兰
2017/01/30 全球购物
大唐电信科技股份有限公司java工程师面试经历
2016/12/09 面试题
成都思必达公司C#程序员招聘面试题
2013/06/26 面试题
提拔干部考察材料
2014/05/26 职场文书
教师作风建设剖析材料
2014/10/11 职场文书
工作证明英文模板
2014/10/21 职场文书
少先队大队委竞选口号
2015/12/25 职场文书
会计入职心得体会
2016/01/22 职场文书
2019自荐信范文集锦!
2019/07/03 职场文书
使用pd.merge表连接出现多余行的问题解决
2022/06/16 Python