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 相关文章推荐
经典的PHPer为什么被认为是草根?
Apr 02 PHP
优化使用mysql存储session的php代码
Jan 10 PHP
php连接mssql的一些相关经验及注意事项
Feb 05 PHP
php批量上传的实现代码
Jun 09 PHP
easyui的tabs update正确用法分享
Mar 21 PHP
ThinkPHP之getField详解
Jun 20 PHP
百度工程师讲PHP函数的实现原理及性能分析(二)
May 13 PHP
PHP读取PPT文件的方法
Dec 10 PHP
PHP递归删除多维数组中的某个值
Apr 17 PHP
ecshop添加菜单及权限分配问题
Nov 21 PHP
PHP+Redis 消息队列 实现高并发下注册人数统计的实例
Jan 29 PHP
php的lavarel框架中join和orWhere的用法
Dec 28 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实现的简单三角形、矩形周长面积计算器分享
2014/11/18 PHP
微信公众平台接口开发入门示例
2014/12/24 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
[原创]图片分页查看
2006/08/28 Javascript
比较详细的关于javascript中void(0)的具体含义解释
2007/08/02 Javascript
extjs 列表框(multiselect)的动态添加列表项的方法
2009/07/31 Javascript
ext combox 下拉框不出现自动提示,自动选中的解决方法
2010/02/24 Javascript
使用firebug进行调试javascript的示例
2013/12/16 Javascript
jQuery实现新消息在网页标题闪烁提示
2015/06/23 Javascript
javascript表单验证大全
2015/08/12 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
2015/10/12 Javascript
动态创建按钮的JavaScript代码
2016/01/29 Javascript
jQuery实现最简单的切换图效果【可兼容IE6、火狐、谷歌、opera等】
2016/09/04 Javascript
微信小程序 教程之引用
2016/10/18 Javascript
js清除浏览器缓存的几种方法
2017/03/15 Javascript
jquery实现下拉菜单的手风琴效果
2017/07/23 jQuery
Node 自动化部署的方法
2017/10/17 Javascript
详解JavaScript事件循环机制
2018/09/07 Javascript
基于vue+uniapp直播项目实现uni-app仿抖音/陌陌直播室功能
2019/11/12 Javascript
Vue使用自定义指令实现拖拽行为实例分析
2020/06/06 Javascript
Element-ui el-tree新增和删除节点后如何刷新tree的实例
2020/08/31 Javascript
[20:30]职业巡回赛回顾
2018/08/09 DOTA
Python文件夹与文件的操作实现代码
2014/07/13 Python
python有证书的加密解密实现方法
2014/11/19 Python
Python3指定路径寻找符合匹配模式文件
2015/05/22 Python
python用Pygal如何生成漂亮的SVG图像详解
2017/02/10 Python
python利用urllib和urllib2访问http的GET/POST详解
2017/09/27 Python
python创建文件备份的脚本
2018/09/11 Python
Django框架模板用法入门教程
2019/11/04 Python
Etam艾格英国官网:法国著名女装品牌
2019/04/15 全球购物
大四学年自我鉴定
2013/11/13 职场文书
英语教育专业自荐信
2014/05/29 职场文书
高三励志标语
2014/06/05 职场文书
领导班子个人对照检查材料(群众路线)
2014/09/26 职场文书
大学生自荐信范文
2015/03/05 职场文书
2019年教师入党申请书
2019/06/27 职场文书