PHP中实现中文字串截取无乱码的解决方法


Posted in PHP onMay 29, 2018

在PHP中,substr()函数截取带有中文字符串的话,可能会出现乱码,这是因为中西文一个字节所占有的字节数不一样,而substr的长度参数是按照字节去算的,在GB2312编码时,一个中文占2个字节,英文为1个字节,而在UTF-8编码当中,一个中文可能占有2个或3个字节,英文或半角标点占1字节。

直接使用PHP函数substr截取中文字符可能会出现乱码,主要是substr可能硬生生的将一个中文字符“锯”成两半。解决办法:

1、使用mbstring扩展库的mb_substr截取就不会出现乱码了。

2、自己书写截取函数,但效率不如用mbstring扩展库来得高。

3、如果仅是为了输出截取的串,可用如下方式实现:substr($str, 0, 30).chr(0)。

=============================

substr()函数可以分割文字,但要分割的文字如果包括中文字符往往会遇到问题,这时可以用mb_substr()/mb_strcut这个函数,mb_substr()/mb_strcut的用法与substr()相似,只是在mb_substr()/mb_strcut最后要加入多一个参数,以设定字符串的编码,但是一般的服务器都没打开php_mbstring.dll,需要在php.ini在把php_mbstring.dll打开。

举个例子:

<?php
echo mb_substr('这样一来我的字符串就不会有乱码^_^', 0, 7, 'utf-8');
?>
输出:这样一来我的字
<?php
echo mb_strcut('这样一来我的字符串就不会有乱码^_^', 0, 7, 'utf-8');
?>

输出:这样一

从上面的例子可以看出,mb_substr是按字来切分字符,而mb_strcut是按字节来切分字符,但是都不会产生半个字符的现象。

=============================

PHP实现中文字串截取无乱码的方法

function GBsubstr($string, $start, $length) {
if(strlen($string)>$length){
  $str=null;
  $len=$start+$length;
  for($i=$start;$i<$len;$i++){
  if(ord(substr($string,$i,1))>0xa0){
   $str.=substr($string,$i,2);
   $i++;
  }else{
   $str.=substr($string,$i,1);
  }
  }
  return $str.'...';
}else{
  return $string;
}
}

【实现中文字串截取无乱码的方法--适用于utf-8】

function substr_text($str, $start=0, $length, $charset="utf-8", $suffix="")
{
if(function_exists("mb_substr")){
return mb_substr($str, $start, $length, $charset).$suffix;
}
elseif(function_exists('iconv_substr')){
return iconv_substr($str,$start,$length,$charset).$suffix;
}
$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));
return $slice.$suffix;
}

总结

以上所述是小编给大家介绍的PHP中实现中文字串截取无乱码的解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
如何在PHP中使用Oracle数据库(5)
Oct 09 PHP
PHP 实用代码收集
Jan 22 PHP
php设计模式 Decorator(装饰模式)
Jun 26 PHP
php简单实现屏蔽指定ip段用户的访问
Apr 29 PHP
Yii开启片段缓存的方法
Mar 28 PHP
php实现的二叉树遍历算法示例
Jun 15 PHP
Laravel网站打开速度优化的方法汇总
Jul 16 PHP
thinkphp5.1 文件引入路径问题及注意事项
Jun 13 PHP
实例讲解PHP中使用命名空间
Jan 27 PHP
PHP与SQL语句写一句话木马总结
Oct 11 PHP
ThinkPHP5分页paginate代码实例解析
Nov 10 PHP
如何用Laravel包含你自己的帮助函数
May 27 PHP
php实现表单提交上传文件功能
May 28 #PHP
PHP封装的非对称加密RSA算法示例
May 28 #PHP
thinkPHP3.2.3结合Laypage实现的分页功能示例
May 28 #PHP
Windows下wamp php单元测试工具PHPUnit安装及生成日志文件配置方法
May 28 #PHP
PHP测试框架PHPUnit组织测试操作示例
May 28 #PHP
php empty 函数判断结果为空但实际值却为非空的原因解析
May 28 #PHP
PHP排序二叉树基本功能实现方法示例
May 26 #PHP
You might like
PHP实现邮件群发的源码
2013/06/18 PHP
分享最受欢迎的5款PHP框架
2014/11/27 PHP
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
2015/05/21 PHP
javascript 一段左右两边随屏滚动的代码
2009/06/18 Javascript
JavaScript DOM 学习第九章 选取范围的介绍
2010/02/19 Javascript
javascript 用记忆函数快速计算递归函数
2010/03/15 Javascript
JS代码优化技巧之通俗版(减少js体积)
2011/12/23 Javascript
HTML中的setCapture和releaseCapture使用介绍
2012/03/21 Javascript
基于JavaScript 数据类型之Boolean类型分析介绍
2013/04/19 Javascript
jquery 无限级下拉菜单的简单实现代码
2014/02/21 Javascript
Jquery实现自定义弹窗示例
2014/03/12 Javascript
jQuery中:last-child选择器用法实例
2014/12/31 Javascript
学习使用jquery iScroll.js移动端滚动条插件
2020/03/24 Javascript
Three.js学习之Lamber材质和Phong材质
2016/08/04 Javascript
JS中传递参数的几种不同方法比较
2017/01/20 Javascript
BootStrap的select2既可以查询又可以输入的实现代码
2017/02/17 Javascript
JS实现给json数组动态赋值的方法示例
2020/03/19 Javascript
js 两数组去除重复数值的实例
2017/12/06 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
2018/04/04 Javascript
Element Dropdown下拉菜单的使用方法
2020/07/26 Javascript
Python Tkinter GUI编程入门介绍
2015/03/10 Python
浅谈Python 对象内存占用
2016/07/15 Python
Python求出0~100以内的所有素数
2018/01/23 Python
Python爬虫设置代理IP的方法(爬虫技巧)
2018/03/04 Python
解决Python2.7读写文件中的中文乱码问题
2018/04/12 Python
Python多进程fork()函数详解
2019/02/22 Python
Python通过cv2读取多个USB摄像头
2019/08/28 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
2020/03/23 Python
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
改变生活的男士内衣:SAXX Underwear
2019/08/28 全球购物
NICKIS.com荷兰:设计师儿童时装
2020/01/08 全球购物
空中乘务员岗位职责
2014/03/08 职场文书
环保小标语
2014/06/13 职场文书
部门群众路线教育实践活动对照检查材料思想汇报
2014/10/07 职场文书
土地租赁协议书
2015/01/29 职场文书
给领导敬酒词
2015/08/12 职场文书