原创著作,产权保护 政府、投票、评选、公安、学校、问卷、视频会议专注发展中小企事业 系统报价 | 支付帐号 | 授权查证
    计算机著作版权登记号:2014SR032463 手机:+86-1373066-4304 | QQ:1213920482 欢迎选择智睿软件系统 欢迎选择智睿软件系统
智睿软件系统
Asp中Len()函数和Left()函数的区别补充
来源:智睿 浏览:2106 次 发布时间:2017-08-26 16:32:24
在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个英文或数字。
问题现在圆满解决:)
【刷新页面】【加入收藏】【打印此文】 【关闭窗口】
上一篇:智睿企业网站管理系统 V 10.0.5 开源企业网站系统,简繁企业网站 下一篇:智睿多语企业网站管理系统 V 9.7.0 中英企业网站, 开源企业网站系统