• Welcome to Journal web site.

我是 视觉 设计师

让设计传递下去

Next
Prev

解决PHP使用mb_substr方法截取中文返回空白的原因

Data: 2020-04-01 08:54:36Form: JournalClick: 33

最近手上在玩个新项目,有个需求是从一段文章中平均抽出10段,每段20个字。一切开始都比较顺利,算法也简单。先用mb_strwidth函数来计算总文章字节数,用mb_strwidth函数的好处就是,该函数在计算中文时算2个字节,英文1个字节。

mb_strimwidth($thisContent,开始截取字数,需要输出多少字数,'utf-8');

因为得出结果是字节数所以我这边比较偷懒字节除2,如果要严谨的话,这边就需要把中英文分别剥离出来然后再统计字数,这边就不讨论这个。

把字数除10取整,这就是每次文章的开始截取的字数点。循环用mb_substr函数跑10次,就输出10断不一样的段落了。

mb_substr函数是以计算中文字数的方式直接计算,这就是为什么上一步要除2。

for($i=0;$i<10;$i++){

$keyword=mb_substr($thisContent,round(单段字数*$i),每次要输出的字数,"utf-8");

}

开始在项目上跑的时候发现了一些问题,例如会偶尔返回空白截取失败。

 

输出原文来比较没发现异样,直接查看源码发现有一大堆空格占位,str_replace替换掉空格继续跑。

str_replace(“ ”,””,$thisContent);

后来又出现一样故障,这次更诡异,原文一切正常,无空位无异常符号,检查代码也找不出原因。

 

直接原文输出到文本用TEXT文本工具打开以及用FiddlerDW2014查看,这总没错。期间用了无数方法无解,绝望时刚好换一台电脑继续做,上面装的是2018版 DW,卧槽,一堆无效字符bug秒破。

 

这个符号复制不出来,只能在新版本DW里头能修改,添加上这个诡异的点,故障解除。

 

DW 2018版本里头修改

 

切换到DW2014版本里头就没了。

这个问题让我烧脑了2天,误打误撞才得以解决,不然就变成一个诡异的bug了。

各位要是有兴趣自己测试的话,自己也可以测试一下

链接: https://pan.baidu.com/s/1X_VY337fDSJdxheCAei3_w 提取码: pkuk

所以工具还是用新的版本比较好,毕竟大公司的研发工程师什么问题没考虑过,都会给你想好了,就不需要自己走弯路了。

 


Name:
<提交>