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数据库类
May 27 PHP
PHP+XML 制作简单的留言本 图文教程
Nov 02 PHP
PHP5 字符串处理函数大全
Mar 23 PHP
Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
Jul 23 PHP
PHP--用万网的接口实现域名查询功能
Dec 13 PHP
如何使用“PHP” 彩蛋进行敏感信息获取
Aug 07 PHP
PHP使用GIFEncoder类处理gif图片实例
Jul 01 PHP
php操纵mysqli数据库的实现方法
Sep 18 PHP
php微信公众平台配置接口开发程序
Sep 22 PHP
php封装的表单验证类完整实例
Oct 19 PHP
PHP中quotemeta()函数的用法讲解
Apr 04 PHP
YII2框架使用控制台命令的方法分析
Mar 18 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
关于WordPress的SEO优化相关的一些PHP页面脚本技巧
2015/12/10 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
2017/04/04 PHP
Mootools 1.2教程(2) DOM选择器
2009/09/14 Javascript
js切换div css注意的细节
2012/12/10 Javascript
使用jquery写个更改表格行顺序的小功能
2014/04/29 Javascript
jquery中each遍历对象和数组示例
2014/08/05 Javascript
JavaScript语言对Unicode字符集的支持详解
2014/12/30 Javascript
TypeScript具有的几个不同特质
2015/04/07 Javascript
利用jQuery实现打字机字幕效果实例代码
2016/09/02 Javascript
Angularjs实现带查找筛选功能的select下拉框示例代码
2016/10/04 Javascript
15 分钟掌握vue-next响应式原理
2019/10/13 Javascript
vue实现编辑器键盘抬起时内容跟随光标距顶位置向上滚动效果
2020/05/28 Javascript
Python Web框架Flask中使用七牛云存储实例
2015/02/08 Python
介绍Python中的文档测试模块
2015/04/28 Python
python通过smpt发送邮件的方法
2015/04/30 Python
解析Python中的二进制位运算符
2015/05/13 Python
django1.11.1 models 数据库同步方法
2018/05/30 Python
Python-numpy实现灰度图像的分块和合并方式
2020/01/09 Python
python分别打包出32位和64位应用程序
2020/02/18 Python
馥绿德雅美国官方网站:Rene Furterer头皮护理专家
2019/05/01 全球购物
模具专业推荐信
2013/10/30 职场文书
暑期社会实践学生的自我评价
2014/01/09 职场文书
个性发展自我评价
2014/02/11 职场文书
外贸专业求职信
2014/03/09 职场文书
员工入职担保书范文
2014/04/01 职场文书
群众路线教育实践活动实施方案
2014/10/31 职场文书
2015应届毕业生自荐信范文
2015/03/05 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
2016习总书记系列重要讲话心得体会
2016/01/15 职场文书
小学三年级作文之写景
2019/11/05 职场文书
python 实现图与图之间的间距调整subplots_adjust
2021/05/21 Python
Python实现滑雪小游戏
2021/09/25 Python
python调用ffmpeg命令行工具便捷操作视频示例实现过程
2021/11/01 Python
PyTorch中permute的使用方法
2022/04/26 Python
Win11使用CAD卡顿或者致命错误怎么办?Win11无法正常使用CAD的解决方法
2022/07/23 数码科技
python 使用pandas读取csv文件的方法
2022/12/24 Python