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 相关文章推荐
VML绘图板②脚本--VMLgraph.js、XMLtool.js
Oct 09 PHP
PHP初学者头疼问题总结
Oct 09 PHP
PHP UTF8编码内的繁简转换类
Jul 20 PHP
php is_file 判断给定文件名是否为一个正常的文件
May 10 PHP
调试一段PHP程序时遇到的三个问题
Jan 17 PHP
利用curl抓取远程页面内容的示例代码
Jul 23 PHP
destoon安全设置中需要设置可写权限的目录及文件
Jun 21 PHP
列举PHP的Yii 2框架的开发优势
Jul 03 PHP
PHP实现简单爬虫的方法
Jul 29 PHP
php实现图片缩略图的方法
Mar 29 PHP
php 比较获取两个数组相同和不同元素的例子(交集和差集)
Oct 18 PHP
laravel框架邮箱认证实现方法详解
Nov 22 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
解析csv数据导入mysql的方法
2013/07/01 PHP
通过php删除xml文档内容的方法
2015/01/23 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
php-app开发接口加密详解
2018/04/18 PHP
JAVASCRIPT keycode总结
2009/02/04 Javascript
一行代码告别document.getElementById
2012/06/01 Javascript
用js判断页面刷新或关闭的方法(onbeforeunload与onunload事件)
2012/06/22 Javascript
利用JS判断用户是否上网(连接网络)
2013/12/23 Javascript
javascript实现数独解法
2015/03/14 Javascript
jQuery实现不断闪烁文字的方法
2015/05/15 Javascript
Javascript实现图片轮播效果(一)让图片跳动起来
2016/02/17 Javascript
js拖拽的原型声明和用法总结
2016/04/04 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
移动端横屏的JS代码(beta)
2016/05/16 Javascript
Jquery Easyui日历组件Calender使用详解(23)
2016/12/18 Javascript
vue中前进刷新、后退缓存用户浏览数据和浏览位置的实例讲解
2018/09/21 Javascript
详解微信小程序开发(项目从零开始)
2019/06/06 Javascript
layui前端时间戳转化实例
2019/11/15 Javascript
[36:45]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
Python多进程通信Queue、Pipe、Value、Array实例
2014/11/21 Python
仅用500行Python代码实现一个英文解析器的教程
2015/04/02 Python
Python中列表和元组的使用方法和区别详解
2020/12/30 Python
Python 基础教程之包和类的用法
2017/02/23 Python
python3爬取淘宝信息代码分析
2018/02/10 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
2020/12/01 Python
CSS3制作缩略图的详细过程
2016/07/08 HTML / CSS
用HTML5实现手机摇一摇的功能的教程
2012/10/30 HTML / CSS
html5的canvas实现3d雪花飘舞效果
2013/12/27 HTML / CSS
Godiva巧克力英国官网:比利时歌帝梵巧克力
2018/08/28 全球购物
JBL加拿大官方商店:扬声器、耳机等
2020/10/23 全球购物
幼儿园老师寄语
2014/04/03 职场文书
《傅雷家书》教学反思
2014/04/20 职场文书
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
2022/04/18 MySQL
Nginx HTTP跳转至HTTPS
2022/05/15 Servers
Nginx代理Redis哨兵主从配置的实现
2022/07/15 Servers