账号通
    

账号  

密码  

4261

查看

17

回复
主题:科汛5.02系统设计上的BUG!! [收藏主题] 转到:  
swcml 当前离线

454

主题

0

广播

0

粉丝
添加关注
级别:四年级

用户积分:2920 分
登录次数:119 次
注册时间:2006/11/11
最后登录:2013/3/10
swcml 发表于:2008/9/20 22:31:00   | 只看该作者 查看该作者主题 楼主 
科汛在线网校系统

5.02科汛系统在对标题字数进行截字时是按实际字数来计算的,比如设置标题截取为15个字,如果标题是全中文的则显示正常,如果是包含英文就出问题,这个截字功能会把英文单个字母也算成一个汉字来截取,结果中英文混合的标题变成超短标题。正确的算法应该是按字节来截取,英文字母算一个字节,汉字算两个字节,这样截取就能保证所有的标题正确显示。

据我所知,市面所有的CMS系统,包括PHP的,都是按字节来算,科汛这样设计,不知道是居于什么原因,极度不理解。

建议在5.03版上修改此功能。

 

还有一个就是科汛的编辑器过滤超级强悍,强大到你哭笑不得。有时候我们编辑内容时,包含有一些&lt;&gt;之类的字符实体,科汛编辑直接就它转成<>,这样就产生问题了,假如文章内容是示例<h1>这个标签如何使用,结果变成html字符,文章内容就被破坏了

 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
swcml 当前离线

454

主题

0

广播

0

粉丝
添加关注
级别:四年级

用户积分:2920 分
登录次数:119 次
注册时间:2006/11/11
最后登录:2013/3/10
swcml 发表于:2008/9/21 17:37:00   | 只看该作者 查看该作者主题 沙发 
科汛在线网校系统
以下是引用一生有你在2008-9-21 16:44:00的发言:

第二个问题更是简单,同样在kesion.publiccls.asp这个文件

 

打开ks_cls/kesion.publiccls.asp

找到htmlcode函数.把里面的内容直接改成

htmlcode=server.htmlencode(str)即可

替换后也是出错,提示变量未定义。

后来试着把这两行注解掉就OK了

'  HtmlStr = Replace(HtmlStr, "&gt;", ">")
'  HtmlStr = Replace(HtmlStr, "&lt;", "<")

 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
一生有你 当前离线

10439

主题

0

广播

18

粉丝
添加关注
级别:版主

用户积分:72521 分
登录次数:1969 次
注册时间:2006/7/1
最后登录:2021/8/25
一生有你 发表于:2008/9/21 17:35:00   | 只看该作者 查看该作者主题 藤椅 
做在线知识付费 选科汛云开店

不过,我仔细看了下官方代码,应该是你的理解有误.官方的原理是中文取两个字节,英文取一个字段.你可以看他的代码

 

c = Abs(Asc(Mid(Str, I, 1)))
   If c > 255 Then
    T = T + 2
   Else
    T = T + 1
   End If

 

这里判断是不是汉字,是的话+2,否则加1

 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
swcml 当前离线

454

主题

0

广播

0

粉丝
添加关注
级别:四年级

用户积分:2920 分
登录次数:119 次
注册时间:2006/11/11
最后登录:2013/3/10
swcml 发表于:2008/9/22 16:31:00   | 只看该作者 查看该作者主题 板凳 
科汛在线网校系统
发现问题是这样的:用最新版5.02商城版 GB编码的正如版主所说,确实一切正常没有问题。但用UTF-8编码的就出现我所说的问题了。 对比了Kesion.PublicCls.asp文件,只有几处不一样,但看似不关这个问题。 还望版主解答一下,谢谢!
 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
一生有你 当前离线

10439

主题

0

广播

18

粉丝
添加关注
级别:版主

用户积分:72521 分
登录次数:1969 次
注册时间:2006/7/1
最后登录:2021/8/25
一生有你 发表于:2008/9/22 16:38:00   | 只看该作者 查看该作者主题 报纸 
科汛在线商城系统(NET)
以下是引用swcml在2008-9-22 16:31:00的发言:
发现问题是这样的:用最新版5.02商城版 GB编码的正如版主所说,确实一切正常没有问题。但用UTF-8编码的就出现我所说的问题了。对比了Kesion.PublicCls.asp文件,只有几处不一样,但看似不关这个问题。还望版主解答一下,谢谢!

utf-8版的本身字符所占的数就不一样

 

UTF-8编码是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码

 

这就是为什么utf-8会比较占用空间的原因了.面向国内用户,还是推荐用gb

 

 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
一生有你 当前离线

10439

主题

0

广播

18

粉丝
添加关注
级别:版主

用户积分:72521 分
登录次数:1969 次
注册时间:2006/7/1
最后登录:2021/8/25
一生有你 发表于:2008/9/22 14:17:00   | 只看该作者 查看该作者主题 地板 
科汛智能建站系统
ssssssssss
神七飞船火
是让人觉着
2222222222

 

 

以上是我测试10个字符的结果.确定是中文算两个,英文算一个,测试标签系统函数标签->栏目文章列表标签

 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
一生有你 当前离线

10439

主题

0

广播

18

粉丝
添加关注
级别:版主

用户积分:72521 分
登录次数:1969 次
注册时间:2006/7/1
最后登录:2021/8/25
一生有你 发表于:2008/9/22 14:19:00   | 只看该作者 查看该作者主题 7楼 
科汛智能建站系统

测试sql标签,同样正常


select top 10 ID,TITLE from KS_Article ORDER BY ID DESC


 


[loop=10]
<a href="{$Field(ID,GetInfoUrl,1,1)}">{$Field(TITLE,Text,10,,0,)}</a><br>
[/loop]


 


最终输出


ssssssssss
神七飞船火
是让人觉着
2222222222

 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
swcml 当前离线

454

主题

0

广播

0

粉丝
添加关注
级别:四年级

用户积分:2920 分
登录次数:119 次
注册时间:2006/11/11
最后登录:2013/3/10
swcml 发表于:2008/9/22 12:20:00   | 只看该作者 查看该作者主题 8楼 
 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
swcml 当前离线

454

主题

0

广播

0

粉丝
添加关注
级别:四年级

用户积分:2920 分
登录次数:119 次
注册时间:2006/11/11
最后登录:2013/3/10
swcml 发表于:2008/9/21 18:05:00   | 只看该作者 查看该作者主题 9楼 
科汛在线商城系统(NET)
以下是引用一生有你在2008-9-21 17:35:00的发言:

不过,我仔细看了下官方代码,应该是你的理解有误.官方的原理是中文取两个字节,英文取一个字段.你可以看他的代码

 

c = Abs(Asc(Mid(Str, I, 1)))
   If c > 255 Then
    T = T + 2
   Else
    T = T + 1
   End If

 

这里判断是不是汉字,是的话+2,否则加1

我不太懂ASP,感觉也好像是对的,但事实上却说明显示出来的标题是按字数来截取的,


此主题相关图片如下:123.jpg
123.jpg

我在后台标签里的标题字数填写12,图片上显示出来的也看到12个汉字就截断了,第七条我们可以看到把单个英文算上也是12个,这样就不对啊,英文应该两个计一个汉字才对吧?

 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
swcml 当前离线

454

主题

0

广播

0

粉丝
添加关注
级别:四年级

用户积分:2920 分
登录次数:119 次
注册时间:2006/11/11
最后登录:2013/3/10
swcml 发表于:2008/9/21 17:23:00   | 只看该作者 查看该作者主题 10楼 
以下是引用一生有你在2008-9-21 16:43:00的发言:

也不是什么大问题,你如果要用字节,就打开ks_cls/kesion.publiccls.asp

找到GotTopic函数

'*************************************************************************
 '函数名:gotTopic
 '作  用:截字符串,汉字一个算两个字符,英文算一个字符
 '参  数:str   ----原字符串
 '       strlen ----截取长度
 '返回值:截取后的字符串
 '*************************************************************************
 Public Function GotTopic(ByVal Str, ByVal strlen)
  If Str = "" OR IsNull(Str) Then GotTopic = "":Exit Function
  If strlen=0 Then GotTopic=Str:Exit Function
  Dim l, T, c, I, strTemp
  Str = Replace(Replace(Replace(Replace(Str, "&nbsp;", " "), "&quot;", Chr(34)), "&gt;", ">"), "&lt;", "<")
  l = Len(Str)
  T = 0
  strTemp = Str
  strlen = CLng(strlen)
  For I = 1 To l
   c = Abs(Asc(Mid(Str, I, 1)))
   If c > 255 Then
    T = T + 2
   Else
    T = T + 1
   End If
   If T >= strlen Then
    strTemp = Left(Str, I)
    Exit For
   End If
  Next
  If strTemp <> Str Then strTemp = strTemp
  GotTopic = Replace(Replace(Replace(Replace(strTemp, " ", "&nbsp;"), Chr(34), "&quot;"), ">", "&gt;"), "<", "&lt;")
 End Function

 

 

直接改成

'*************************************************************************
 '函数名:gotTopic
 '作  用:截字符串,汉字一个算两个字符,英文算一个字符
 '参  数:str   ----原字符串
 '       strlen ----截取长度
 '返回值:截取后的字符串
 '*************************************************************************
 Public Function GotTopic(ByVal Str, ByVal strlen)
  GotTopic = left(str,strlen)

 End Function

谢谢版主指点,可是不行啊,替换后没反应,跟原来一样

 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
<上一主题 | 下一主题 >
Powered By KesionCMS Version X1
厦门科汛软件有限公司 © 2006-2016 页面执行0.23438秒 powered by KesionCMS 9.0