正在加载中...

关闭
请选择需要拨打的号码

信息详页

返回
Asp中Len()函数和Left()函数的区别补充
在Asp实际开发应用中,我们会经常使用到Len函数和Left函数。
其目的就是判断当前输出的字符串长度,如果过长,我们必须截取前面的部分字符,否则就会出现换行或页面变形的情况。
我们看看下面的示例:
某网站在首页有个“今日新闻”,显示最新的5条信息的标题,但它的table或div宽度,每个标题只允许显示最多20个中文(40个英文或数字)

问题出来了:
注意上面的话,显示最多20个中文(40个英文或数字)。
那么我到底是Left(Rs("NewsTitle"),20),还是Left(Rs("NewsTitle"),40)呢(这里假设新闻标题的字段为NewsTitle)?
又或者某条新闻的标题既包含中文,又包含英文、数字,那我应该怎么判断?
很多人都遇过同样的问题,而我们处理的方法是:宁愿多截取,也不愿页面变形(我早期的方法就是这样)
这样,大部人都选择Left(Rs("NewsTitle"),20)
页面不会变形了,但如果每条新闻的标题有很多英文和数字组成,Left就会把它们早早的截取掉,感觉只有了一半。虽然这个样子比换行或页面变形好看,但这也是死马当活马医。


怎么解决这个问题?
从所周知,1个中文等于2个半角状态下的英文或数字……
对,原理就是这个,我们把1个中文,看成2个英文或数字,这样来做,就可以把问题解决了

请看函数
Function LenStr(StrValue)
Dim a,i
for i=1 to Len(StrValue)
a=Mid(StrValue,i,1)
if Asc(a)<0 then
LenStr=LenStr+2
else
LenStr=LenStr+1
end if
next
End Function

用法:Response.Write LenStr("函数")
返回的结果是:4

而用原始方法:Response.Write Len("函数")
返回的结果是:2

有点感觉了吧?我们已经正确的判断出来了,那如何截取呢?
函数
Function LeftStr(StrValue,NumValue)
Dim nStr,a,i
for i=1 to Len(StrValue)
a=Mid(StrValue,i,1)
if Asc(a)<0 then
nStr=nStr+2
else
nStr=nStr+1
end if
LeftStr=LeftStr&a
if nStr>=CInt(NumValue) then Exit Function
next
End Function

用法与Left一样

Response.Write LeftStr("Asp中Left函数的不足",10)
返回结果是:Asp中Left函

Response.Write Left("Asp中Left函数的不足",10)
返回结果是:Asp中Left函数

我们再回到第一个问题:
某网站在首页有个“今日新闻”,显示最新的5条信息的标题,但它的table或div宽度,每个标题只允许显示最多20个中文(40个英文或数字)
现在我们只需要LeftStr(Rs("NewsTitle"),40)就可以了,LeftStr这个函数,会把1个中文自动看成2个英文或数字。
问题现在圆满解决:)