php截取字符串网站内容( php截取中文字符串截取的教训2007-05-23152537转载分类)
优采云 发布时间: 2021-12-18 01:14php截取字符串网站内容(
php截取中文字符串截取的教训2007-05-23152537转载分类)
PHP截取中文字符串 [Trick] PHP截取中文字符串 PHP中文截取教程 2007-05-23152537 为什么你认为这个东西不是中国人发明的?记得我在3Apples的时候同事徐XX问过这个问题。当时我想都没想就把我采集的代码从MSN发给了他。事实上,我也在其中。我在网上查到的大概如下functionSubCNstrlenstart0tmpstrfori0ileniifordsubstrstri1160tmpstrsubstrstri2ielsetmpstrsubstrstri1returntmpstr 徐提出,字符串长度不够。想了想,加了一句ifstrstrlenstrlen,问0xa0是什么意思。事实上,它等于十进制的 160。当天明显的效率优势,证明两人在当天并没有明显的效率优势。回去的时候,在车上想了想这个,问有没有更省事的方法,不过第二天就不提了。这才一年多后,当我再次使用这个功能时,我几乎没有想到,直到最近我写了一个BBS程序。直到那时我才意识到这个问题的严重性,因为之前的程序都有缓存机制,并且需要更多的资源。
基本上不用一次想两个,不过这次论坛程序BOSS强调信息的时效性不允许缓存,经常会用到字符串的截取。结果,暴露了这个SubCN的低效率。细看。我发现在tmpstrsubstrstri2文章这句话里就可以做到,完全没有必要每次都给tmpstr加新词。只要知道 i 的最终值,就可以根据它截取字符串。当时很开心,于是有了下面的改进函数SubCNstrlenifstrstrlenstrlenreturnstrfori0ileniifordsubstrstri1160ireturnsubstrstr0i,实际应用中的表现并没有想象的那么好。效率确实提高了,但是很明显。下班回来就想这个问题。如果截取的字符串是乱码,那么截取的len1的字符串肯定是正常的,反之亦然,那么问题就变成了最后一个字符是否是半个汉字。想法通过后很快就出来了。下面的代码函数SubCNstrlenifstrstrlenstrlenreturnstrposlenwhileposordsubstrstrpos--10x
a0iflen-pos21lenreturnsubstr0len 效率显着提高。我做了一个对比实验。代码从20多行减少到5行。效率提高了十倍以上。我加了句STR-STR取消POS0的判断和返回句改为returnsubstrstr1len-1运行时间起始时间结束时间耗时sSubCN7748538854862SubCN2799208839323SubCN3799895673559SubCN4799500695011set_time_limit120str逸大8区的实验数据10万,他垃圾桶2睡眠垃圾桶1个区文非法纳克fv垃圾2睡莲3杨4凤音琴建设567工程一79一些echomicrotimefori0i100isforj0j1000j
sSubCN3str50echomicrotimefunctionSubCN1strlenstart0ifstrstrlenstrlenreturnstrtmpstrfori0ileniifordsubstrstri10xa0tmpstrsubstrstri2ielsetmpstrsubstrstri1returntmpstrfunctionSubCN2strlenstart0ifstrstrlenstrlenreturnstrtmpstrfori0ileniifordsubstrstri1160tmpstrsubstrstri2ielsetmpstrsubstrstri1returntmpstrfunctionSubCN3strlenifstrstrlenstrlenreturnstrfori0ileniifordsubstrstri1160ireturnsubstrstr0ifunctionSubCN4strlenifstrstrlenstrlenreturnstrifordsubstrstrlen-110xa0lenreturnsubstrstr0len