一级棒(Eachfun)
一级棒 - 编程园地 - 源码放送 - 动网论坛在首页调用中的BUG及其修正
RSS订阅
动网论坛在首页调用中的BUG及其修正
发表时间:2004-10-14 00:00:00 关键词:编程,源码,下载,ASP,动网

BUG之一:拦腰截断,
比如论坛有一帖子标题为“hello how are you long time no see”
那么被调用到首页后一般显示成以下样子:
“hello how ar...”
当我们把鼠标移上去时,应该会有详细说明,
但是详细说明却是“hello”,后面没了。

原来问题出在少个双引号上,对于如下一段网页代码:
<a href=地址 title=说明>内容</a>
在“说明”内容中没有空格时,一切正常,
但是如果“说明”的内容中含有空格,
就会到空格为止,只显示前面一段。
修改方法为加上双引号,使之变为:
<a href="地址" title="说明">内容</a>

修正方法:
打开newtopic.asp,找到其中某一个response.write语句。
将其中的“title="&Topic&"”改为“title="""&Topic&"""”
也就是说,加上四个双引号。

BUG之二:浪费感情
经过上面一改,详细注释已经不再是“hello”了,
而是“hello how ar...”,
但是,这样还不够,
如果鼠标移上去显示的根没移上去一模一样,
那么还要它显示干什么?

修改方法是,让鼠标移上去后显示得更全一点,
打开newtopic.asp,
增加声明一个变量“Topic1”,
在“Topic=Stringhtml(topic)”的下面加一行:
“topic1=topic”,
再把“title="""&Topic&"""”改为“title="""&Topic1&"""”
这样,显示为注释的内容就是没有截取前的了。

BUG之三:美丽陷阱
当用户的帖子标题中含有半角双引号时,
这个双引号又会干扰其在首页调用中的显示,
比如,贴子标题为“he said "let me see"”,
那么注释的显示将在“he said”后结束。

修改方法是替换掉半角双引号,或者干脆不要了。
找到:“str = Replace(str, CHR(34), """")”
改为:“str = Replace(str, CHR(34), "")”。
也就是说,去掉两个引号。

BUG之四:土洋不分
为了在网页上显示得漂亮,一般形况下都要把长的内容截断。
自动截取特定长度的字符时不能直接截取前几字,
而应该考虑它们是汉字还是字母。
如果直接按照字符数截取,
在首页显示时只起到了防止超长的作用,
没有起到美观的作用。

而且,这个功能还有一个特别容易被忽视的地方:
以首页显示十个字符为例,
因为“...”要占用三个字符,
所以很多人想当然看其是不是长于七个字符,
但是实际上这是片面的,
先要看其是否长于十字符,如果是,就取其前七位,
如果不是,就不用截。

修正方法:对程序进行大改动。把一个汉字当成两个字符处理。
程序如下:
Function toumaoCutString(inputtext,ascwidth)
  '将一个字符串截取它的前一段,使之能够在一定的宽度内显示
  'inputtext为未截取之前的字符串,
  'ascwidth为规定的宽度,以英文字母数为准,一个汉字相当于两个字符
  '程序设计:偷猫,主页:http://www.eachfun.com/,QQ:33751
  dim toumaoCSI'临时变量,用于在inputtext中一个一个往下取字符
  dim toumaoCSJ'临时变量,用于记录到第几个字符时,宽度已经达到ascwidth
  dim toumaoCSK'临时变量,用于记录整个inputtext相当于多少宽度
  dim toumaoCSL'临时变量,用于记录到第几个字符时,宽度已经达到ascwidth-3
  If inputtext="" Or ascwidth=0 Then
    toumaoCutString=""
    Exit Function
  End If

  For toumaoCSI=1 to Len(inputtext)
    If Asc(Mid(inputtext,toumaoCSI,1))<0 Then
      toumaoCSK=toumaoCSK + 2'汉字
    Else
      toumaoCSK=toumaoCSK + 1'英文或数字
    End If
    If toumaoCSK<=ascwidth Then toumaoCSJ=toumaoCSI
    If toumaoCSK<=ascwidth-3 Then toumaoCSL=toumaoCSI
  Next

  If toumaoCSK<=ascwidth Then
    toumaoCutString=inputtext
  Else
    toumaoCutString=Left(inputtext,toumaoCSL) & "..."
  End If
End Function

然后再把:“topic=left(topic,request("tlen"))&"..."”
改为:“topic=toumaoCutString(topic,request("tlen"))”

本站特约顾问律师常州东晟律师事务所朱立律师(电话13915029670,QQ646146109)提醒您:
本站文章皆为作者原创,其它媒体(包括但不限于报刊、杂志、网站、电视、电台)未经作者书面许可严禁转载(或部分摘录)!
发表评论
称呼:
QQ:
邮箱:
链接:
内容:
搜索: 百度搜索 Google搜索
Copyright©2000 - 2008 Eachfun.Com, All Rights Reserved 一级棒网络
苏ICP备05080156号
一级棒建站系统 http://www.eachfun.com 一级棒版权所有,未经许可不得商用!