1. 论坛系统升级为Xenforo,欢迎大家测试!
    排除公告

ASP求字符串长度。汉字算两个字符,英文算一个字符。

本帖由 小叶2005-09-10 发布。版面名称:后端开发

  1. 小叶

    小叶 New Member

    注册:
    2005-09-04
    帖子:
    17,941
    赞:
    33
    PHP:
       '求字符串长度。汉字算两个字符,英文算一个字符。
        Function strLength(str)
            If isNull(str) Or Str = "" Then
                StrLength = 0
                Exit Function
            End If
            Dim WINNT_CHINESE
            WINNT_CHINESE=(len("例子")=2)
            If WINNT_CHINESE Then
                Dim l,t,c
                Dim i
                l=len(str)
                t=l
                For i=1 To l
                    c=asc(mid(str,i,1))
                    If c<0 Then c=c+65536
                    If c>255 Then t=t+1
                Next
                strLength=t
            Else 
                strLength=len(str)
            End If
        End Function
     
  2. 不学无术

    不学无术 Ulysses 的元神

    注册:
    2005-08-31
    帖子:
    16,714
    赞:
    39
    我常用的:

    代码:
    '--------------------------------------------------------------------------------
    Function GetStrLen(str)
    '--------------------------------------------------------------------------------
    '--------------------------------------------------------------------------------
    	If IsNull(str) Or str = "" Then
    		getStrLen = 0
    	Else
    		Dim i, n, k, chrA
    		k = 0
    		n = Len(str)
    		For i = 1 To n
    			chrA = Mid(str, i, 1)
    			If Asc(chrA) >= 0 And Asc(chrA) <= 255 Then
    				k = k + 1
    			Else
    				k = k + 2
    			End If
    		Next
    		getStrLen = k
    	End If
    End Function
    原来差不多,不过这个只是将 0-255 之间的认定为单字节字符。

    另,常用来截取标题的函数:

    代码:
    '--------------------------------------------------------------------------------
    Function GetStrValue(ByVal str, ByVal i, ByVal str_2)
    '--------------------------------------------------------------------------------
    '--------------------------------------------------------------------------------
        If getStrLen(str) <= i Then
            getStrValue = str
        Else
            Dim j, n, k, chrA
    		j = i - getStrLen(str_2)
            n = 0
            k = 0
            Do While n < j
                k = k + 1
    			chrA = Mid(str, k, 1)
                If Asc(chrA) < 0 Or Asc(chrA) > 255 Then
                    n = n + 2
    				If n > j Then k = k - 1
                Else
                    n = n + 1
                End If
            Loop
            getStrValue = Left(Trim(str), k) & str_2
        End If
    End Function
    其中 str 是字符串,i 是需要的字节数(英文算一个,中文算两个),str_2 是用来作为省略标记的字符,例如“...”或者“…”。
     
  3. 小叶

    小叶 New Member

    注册:
    2005-09-04
    帖子:
    17,941
    赞:
    33
    以前截取标题的时候,真麻烦,,用left函数,
    纯汉字就算两个,英文却算一个..
     
  4. 老林

    老林 New Member

    注册:
    2005-09-06
    帖子:
    10,580
    赞:
    36
    昨天找了半天 
     
  5. 小叶

    小叶 New Member

    注册:
    2005-09-04
    帖子:
    17,941
    赞:
    33
    有什么问题就发出来大家一起交流嘛..
     
  6. 老林

    老林 New Member

    注册:
    2005-09-06
    帖子:
    10,580
    赞:
    36

    理论上同意
     
  7. 感觉

    感觉 New Member

    注册:
    2005-09-12
    帖子:
    94
    赞:
    0
    收藏,谢谢!
     
  8. 小人物大英雄

    小人物大英雄 New Member

    注册:
    2005-09-19
    帖子:
    5
    赞:
    0
    晕,看着论坛标签 PHP代码……寒,我就说怎么越看越不像PHP~