php 中文截断,PHP中实现中文字串截取无乱码的解决方法
在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中实现中文字串截取无乱码的解决方法相关推荐
- 中文字串截取无乱码的问题
UTF-8中文截取函数 在PHP中,substr()函数截取带有中文字符串的话,可能会出现乱码,这是因为中西文一个字节所占有的字节数不一样,而substr的长度参数是按照字节去算的,在GB2312编码 ...
- PHP面试题:实现中文字串截取无乱码的方法
Mb_substr();
- excel中联系人转换为csv导入手机出现乱码的解决方法
解决方式可直接调至文末黑体加粗加大字号. 同事要举行一个培训会议,需要联系各单位的人员,但是所有人员的单位.姓名.手机号都是存在excel里的.一个个存入手机太麻烦,数量太多会累死人.于是找我帮忙.. ...
- c php乱码,php分割GBK中文乱码的解决方法
类似如下的字符串(GBK), explode不能得到正确结果: $result = explode("|", "滕华弢|海青"); 究其原因, 对于" ...
- Java中url传递中文参数取值乱码的解决方法
Java中url传递中文参数取值乱码的解决方法 参考文章: (1)Java中url传递中文参数取值乱码的解决方法 (2)https://www.cnblogs.com/liwenjuan/p/3211 ...
- Activiti保存.png 流程图片文件且解决idea中保存图片时显示中文乱码的解决方法
Activiti保存.png 流程图片文件且解决idea中保存图片时显示中文乱码的解决方法 Eclipse 工具中的操作 流程图片生成的两种方式: 使用 activiti-designer 设计流程图 ...
- java.net.url 中文乱码_asp.net URL中包含中文参数造成乱码的解决方法
asp.net URL中包含中文参数造成乱码的解决方法 更新时间:2010年03月08日 21:44:27 作者: 中文乱码一直以来是WEB开发中比较常见的问题之一,对于初学者来说,各种各样的编码 ...
- RStudio控制台(console)中出现少量中文乱码的解决方法
RStudio控制台(console)中出现少量中文乱码的解决方法 参考文章: (1)RStudio控制台(console)中出现少量中文乱码的解决方法 (2)https://www.cnblogs. ...
- windows文件(.txt,.h,.cpp等等)中的中文在ubuntu下乱码的解决方法
ubuntu默认的打开.txt文件用的是gedit,可gedit默认编码是UTF8,打开windows下编辑的gb2312的文档都是乱码.解决方法之一就是把gedit的编码改为GB2312,方法如下: ...
最新文章
- Complexer-YOLO:基于语义点云的实时三维目标检测与跟踪
- 法国拟将雷诺与日产合并 代表团抵日进行谈判
- pytorch图像和张量的相互转换_[Pytorch]Pytorch的tensor变量类型转换
- HTTP状态码:400\500 错误代码
- 项目宝提供的服务器,开源WebSocket服务器项目宝贝鱼CshBBrain V4.0.1 和 V2.0.2发布
- 【Boost】Boost使用几条简单笔记
- kafka 集群服役新节点
- Raffi Krikorian 为“在运行中进行架构重写”提供了指南
- 【车道线检测】基于matlab Hough变换视频车道线检测 【含Matlab源码 274期】
- STM32+DWM1000开发uwb测距系列教程之三:使用官方例程实现p2p双向 twr测距
- stagefright框架
- t检验的p值对照表_第十讲 R-两独立样本t检验
- 抠图软件有哪些?这些软件可以做到一键抠图
- 七步学习法 —— 如何高效学习一项技能
- Maven异常:0.0.1-SNAPSHOT: Could not find artifact
- Git命令的使用(进阶版)
- cocos2d-x下硬件音量按键控制游戏音量的实现
- Silverlight开发实践--My Silverlight Clock (源)
- vuejs管理系统模板_2020年22种最佳VueJS管理员仪表板模板
- 如何真正系统地练好吉他横按
热门文章
- PLSQL Developer连接数据库报错ora-12514解决
- linux,windwos之间共享文件的其妙方法
- azure考试_我如何通过AZ-900 Microsoft Azure基础考试
- 跨域 cors 请求两次_请求两次的故事-CORS
- mac docker 共享_如何在Docker for Mac中加快共享文件访问
- 笛卡尔函数_笛卡尔,伯克利和函数式React式编程
- 使用bypy从ubuntu通过命令行上传文件到百度云
- 非常实用的Python库
- 迭代列表不要For循环,这是Python列表推导式最基本的概念
- 再见,付费录屏软件!我用70行Python代码打造免费版!