Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

核心函数 cutstr() 因为编码问题导致的剪切字串长度计算错误

[复制链接]
skyskai 发表于 2013-8-22 11:48:04 | 显示全部楼层 |阅读模式
Discuz_X3.0_SC_UTF8_20130802   DZX3.0 包括(0620、0801版) function_core.php cutstr() 函数中
因为剪切字串长度判断受到编码长度问题,影响了剪切后的实际效果。

测试字串:关于深山区搬迁并村的情况调查
14汉字 GBK代表28字节,utf-8则为42字节

改前:

                              
修正后:没有添加过长省略尾串” …”

cutstr函数在入口处首先判断了传入字串的长度,因为字符编码的不同,这里就出现上图所示的现象,尽管字串不超长,但仍然会被加上省略尾串,这里函数接收的限制长度也是以GBK编码来计算的。
提示框中的数字为模板中写的测试代码:
  1. {echo strlen($v[title]);}  {echo strlen(cutstr($v[title],30));}
复制代码
修改内容 function_core.php的 cutstr()函数入口第一个判断 :0620版在837行,0801版在842行。只针对UTF-8做了测试。
原始:
         if(strlen($string)<= $length) {

改为:
         if(strlen(iconv("utf-8","gbk",$string) ) <= $length) {

以修正剪切字串的长度计算误差。

上面这个只是我测试过的修改方案。
希望官方能仔细看一下这里,给出一个更合理的方案。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2025-3-9 07:47 , Processed in 0.025982 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表