在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打开。

举个例子:

echo mb_substr('这样一来我的字符串就不会有乱码^_^', 0, 7, 'utf-8');

?>

输出:这样一来我的字

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

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中实现中文字串截取无乱码的解决方法相关推荐

  1. 中文字串截取无乱码的问题

    UTF-8中文截取函数 在PHP中,substr()函数截取带有中文字符串的话,可能会出现乱码,这是因为中西文一个字节所占有的字节数不一样,而substr的长度参数是按照字节去算的,在GB2312编码 ...

  2. PHP面试题:实现中文字串截取无乱码的方法

    Mb_substr();

  3. excel中联系人转换为csv导入手机出现乱码的解决方法

    解决方式可直接调至文末黑体加粗加大字号. 同事要举行一个培训会议,需要联系各单位的人员,但是所有人员的单位.姓名.手机号都是存在excel里的.一个个存入手机太麻烦,数量太多会累死人.于是找我帮忙.. ...

  4. c php乱码,php分割GBK中文乱码的解决方法

    类似如下的字符串(GBK), explode不能得到正确结果: $result = explode("|", "滕华弢|海青"); 究其原因, 对于" ...

  5. Java中url传递中文参数取值乱码的解决方法

    Java中url传递中文参数取值乱码的解决方法 参考文章: (1)Java中url传递中文参数取值乱码的解决方法 (2)https://www.cnblogs.com/liwenjuan/p/3211 ...

  6. Activiti保存.png 流程图片文件且解决idea中保存图片时显示中文乱码的解决方法

    Activiti保存.png 流程图片文件且解决idea中保存图片时显示中文乱码的解决方法 Eclipse 工具中的操作 流程图片生成的两种方式: 使用 activiti-designer 设计流程图 ...

  7. java.net.url 中文乱码_asp.net URL中包含中文参数造成乱码的解决方法

    asp.net URL中包含中文参数造成乱码的解决方法 更新时间:2010年03月08日 21:44:27   作者: 中文乱码一直以来是WEB开发中比较常见的问题之一,对于初学者来说,各种各样的编码 ...

  8. RStudio控制台(console)中出现少量中文乱码的解决方法

    RStudio控制台(console)中出现少量中文乱码的解决方法 参考文章: (1)RStudio控制台(console)中出现少量中文乱码的解决方法 (2)https://www.cnblogs. ...

  9. windows文件(.txt,.h,.cpp等等)中的中文在ubuntu下乱码的解决方法

    ubuntu默认的打开.txt文件用的是gedit,可gedit默认编码是UTF8,打开windows下编辑的gb2312的文档都是乱码.解决方法之一就是把gedit的编码改为GB2312,方法如下: ...

最新文章

  1. Complexer-YOLO:基于语义点云的实时三维目标检测与跟踪
  2. 法国拟将雷诺与日产合并 代表团抵日进行谈判
  3. pytorch图像和张量的相互转换_[Pytorch]Pytorch的tensor变量类型转换
  4. HTTP状态码:400\500 错误代码
  5. 项目宝提供的服务器,开源WebSocket服务器项目宝贝鱼CshBBrain V4.0.1 和 V2.0.2发布
  6. 【Boost】Boost使用几条简单笔记
  7. kafka 集群服役新节点
  8. Raffi Krikorian 为“在运行中进行架构重写”提供了指南
  9. 【车道线检测】基于matlab Hough变换视频车道线检测 【含Matlab源码 274期】
  10. STM32+DWM1000开发uwb测距系列教程之三:使用官方例程实现p2p双向 twr测距
  11. stagefright框架
  12. t检验的p值对照表_第十讲 R-两独立样本t检验
  13. 抠图软件有哪些?这些软件可以做到一键抠图
  14. 七步学习法 —— 如何高效学习一项技能
  15. Maven异常:0.0.1-SNAPSHOT: Could not find artifact
  16. Git命令的使用(进阶版)
  17. cocos2d-x下硬件音量按键控制游戏音量的实现
  18. Silverlight开发实践--My Silverlight Clock (源)
  19. vuejs管理系统模板_2020年22种最佳VueJS管理员仪表板模板
  20. 如何真正系统地练好吉他横按

热门文章

  1. PLSQL Developer连接数据库报错ora-12514解决
  2. linux,windwos之间共享文件的其妙方法
  3. azure考试_我如何通过AZ-900 Microsoft Azure基础考试
  4. 跨域 cors 请求两次_请求两次的故事-CORS
  5. mac docker 共享_如何在Docker for Mac中加快共享文件访问
  6. 笛卡尔函数_笛卡尔,伯克利和函数式React式编程
  7. 使用bypy从ubuntu通过命令行上传文件到百度云
  8. 非常实用的Python库
  9. 迭代列表不要For循环,这是Python列表推导式最基本的概念
  10. 再见,付费录屏软件!我用70行Python代码打造免费版!