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获取远程图片并把它保存到本地的代码
Apr 07 PHP
PHP mkdir()定义和用法
Jan 14 PHP
并发下常见的加锁及锁的PHP具体实现代码
Oct 12 PHP
php轻松实现中英文混排字符串截取
May 28 PHP
Windows下的PHP安装pear教程
Oct 24 PHP
PHP连接SQLServer2005的方法
Jan 27 PHP
PHP中捕获超时事件的方法实例
Feb 12 PHP
PHP简单实现断点续传下载的方法
Sep 25 PHP
PHP实现验证码校验功能
Nov 16 PHP
golang实现php里的serialize()和unserialize()序列和反序列方法详解
Oct 30 PHP
PHP超低内存遍历目录文件和读取超大文件的方法
May 01 PHP
详解PHP Swoole与TCP三次握手
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字符串 ==比较运算符的副作用
2009/10/21 PHP
php学习之 循环结构实现代码
2011/06/09 PHP
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
2011/11/10 PHP
spl_autoload_register与autoload的区别详解
2013/06/03 PHP
从数据结构的角度分析 for each in 比 for in 快的多
2013/07/07 Javascript
JavaScript验证电子邮箱的函数
2014/08/22 Javascript
JavaScript针对网页节点的增删改查用法实例
2015/02/02 Javascript
JS实现超精简的链接列表在固定区域内滚动效果代码
2015/11/04 Javascript
你不知道的高性能JAVASCRIPT
2016/01/18 Javascript
JS中使用apply方法通过不同数量的参数调用函数的方法
2016/05/31 Javascript
Web程序员必备的7个JavaScript函数
2016/06/14 Javascript
jQuery插件HighCharts绘制简单2D柱状图效果示例【附demo源码】
2017/03/21 jQuery
微信小程序教程系列之设置标题栏和导航栏(7)
2020/06/29 Javascript
详解React开发中使用require.ensure()按需加载ES6组件
2017/05/12 Javascript
Vue2.0利用vue-resource上传文件到七牛的实例代码
2017/07/28 Javascript
深入浅析Vue中的 computed 和 watch
2018/06/06 Javascript
Nodejs 微信小程序消息推送的实现
2021/01/20 NodeJs
Python MySQLdb模块连接操作mysql数据库实例
2015/04/08 Python
Python实现矩阵加法和乘法的方法分析
2017/12/19 Python
Django 限制用户访问频率的中间件的实现
2018/08/23 Python
pycharm重置设置,恢复默认设置的方法
2018/10/22 Python
Python闭包思想与用法浅析
2018/12/27 Python
Python 3.x基于Xml数据的Http请求方法
2018/12/28 Python
利用python实现在微信群刷屏的方法
2019/02/21 Python
Python实例方法、类方法、静态方法的区别与作用详解
2019/03/25 Python
Python企业编码生成系统总体系统设计概述
2019/07/26 Python
Python tkinter常用操作代码实例
2020/01/03 Python
一款基于css3和jquery实现的动画显示弹出层按钮教程
2015/01/04 HTML / CSS
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
2013/07/15 HTML / CSS
美国南加州的原创极限运动潮牌:Vans(范斯)
2016/08/05 全球购物
一个精品风格的世界:Atterley
2019/05/01 全球购物
美国用餐电影院:Alamo Drafthouse Cinema
2020/01/23 全球购物
妇联主席先进事迹
2014/05/18 职场文书
企业总经理助理岗位职责
2014/09/12 职场文书
2015年外联部工作总结
2015/04/03 职场文书
通过Python把学姐照片做成拼图游戏
2022/02/15 Python