账号通
    

账号  

密码  

4103

查看

3

回复
主题:[分享]修改utif-8版本截取字数函数中英文不区分 [收藏主题] 转到:  
一生有你 当前离线

10439

主题

0

广播

18

粉丝
添加关注
级别:版主

用户积分:72521 分
登录次数:1969 次
注册时间:2006/7/1
最后登录:2021/8/25
一生有你 发表于:2008/9/27 15:10:00   | 显示全部帖子 查看该作者主题 楼主 
科汛在线商城系统(NET)

科汛5.02 utf-8版本中英文截取字符数不区分的解决方法.


 


打开ks_cls/kesion.publiccls.asp


 


找到


'*************************************************************************
 '函数名: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 lennum)
  Dim oRegExp, p_num, i, x
  Set oRegExp = new RegExp
  oRegExp.IgnoreCase = True
  oRegExp.Global = True
  oRegExp.Pattern = "[\uff00-\uffff\u4e00-\u9fa5\ufe10-\ufe1f\ufe30-\ufe4f\u1100-\u11ff\u2600-\u26ff\u2700-\u27bf\u2800-\u28ff\u3300-\u33ff\u3200-\u32ff\ua490-\ua4cf\ua000-\ua48f\u3130-\u318f\uac00-\ud7af\u31f0-\u31ff\u30a0-\u30ff\u3040-\u309f\u31a0-\u31bf\u3100-\u312F\u2FF0-\u2FFF\u2F00-\u2FDF\u31c0-\u31ef\u3000-\u303f\u2e80-\u2eff\uff00-\uffef]"
  p_num = 0
  x = 0
  Do While Not p_num > lennum - 2
  x = x + 1
  p_num = int(p_num) + 1
  
  If oRegExp.Test(str) Then
  p_num = p_num + 1
  End If
  GotTopic = left(trim(str),x)
  Loop
  Set oRegExp=Nothing
 End Function


 

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