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&amp;&amp;mysql)六
Oct 09 PHP
php的curl实现get和post的代码
Aug 23 PHP
细谈php中SQL注入攻击与XSS攻击
Jun 10 PHP
php中使用redis队列操作实例代码
Feb 07 PHP
php实现邮件发送并带有附件
Jan 24 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十)
Jun 24 PHP
PHP保存带BOM文件的方法
Feb 12 PHP
初识laravel5
Mar 02 PHP
PHP设计模式之适配器模式代码实例
May 11 PHP
PHP使用逆波兰式计算工资的方法
Jul 29 PHP
php魔法函数与魔法常量使用介绍
Jul 23 PHP
safari下载文件自动加了html后缀问题
Nov 09 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
mysql建立外键
2006/11/25 PHP
php下关于Cannot use a scalar value as an array的解决办法
2010/08/08 PHP
phpmailer发送gmail邮件实例详解
2013/06/24 PHP
PHP自定义函数实现assign()数组分配到模板及extract()变量分配到模板功能示例
2018/05/23 PHP
JavaScript.The.Good.Parts阅读笔记(一)假值与===运算符
2010/11/16 Javascript
node.js入门教程
2014/06/01 Javascript
VS2008中使用JavaScript调用WebServices
2014/12/18 Javascript
原生javascript实现图片弹窗交互效果
2015/01/12 Javascript
jquery+easeing实现仿flash的载入动画
2015/03/10 Javascript
详解JavaScript中setSeconds()方法的使用
2015/06/11 Javascript
JavaScript数据类型判定的总结笔记
2015/07/31 Javascript
js实现类似MSN提示的页面效果代码分享
2015/08/24 Javascript
JS组件Bootstrap导航条使用方法详解
2016/04/29 Javascript
JQuery EasyUI Layout 在from布局自适应窗口大小的实现方法
2016/05/28 Javascript
全面解析JS字符串和正则表达式中的match、replace、exec等函数
2016/07/01 Javascript
jquery动态创建div与input的实例代码
2016/10/12 Javascript
javascript 组合按键事件监听实现代码
2017/02/21 Javascript
基于js中this和event 的区别(详解)
2017/10/24 Javascript
Nuxt.js实战详解
2018/01/18 Javascript
vue实现学生录入系统之添加删除功能
2018/07/11 Javascript
详解jquery和vue对比
2019/04/16 jQuery
使用Python写一个小游戏
2018/04/02 Python
解决PyCharm import torch包失败的问题
2018/10/13 Python
Pytorch Tensor基本数学运算详解
2019/12/30 Python
python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例
2020/02/28 Python
Python爬虫简单运用爬取代理IP的实现
2020/12/01 Python
CSS3新增布局之: flex详解
2020/06/18 HTML / CSS
HTML5 贪吃蛇游戏实现思路及源代码
2013/09/03 HTML / CSS
canvas实现圆形进度条动画的示例代码
2017/12/26 HTML / CSS
Cult Gaia官网:美国生活方式品牌
2019/08/16 全球购物
int和Integer有什么区别
2013/05/25 面试题
《秋姑娘的信》教学反思
2014/02/28 职场文书
前台文员岗位职责
2015/02/04 职场文书
风之谷观后感
2015/06/11 职场文书
关于感恩老师的古诗句
2019/08/20 职场文书
CSS3实现模糊背景的三种效果示例
2021/03/30 HTML / CSS