Skip navigation.

永远的亚特兰缔斯

To record my thinking and study note

Posts tagged with "asp"

转换两个回车为p标签,一个回车为br标签的函数

,

用textarea标签输入数据的时候,转换两个回车为p标签,一个回车为br标签的函数。

'*************************************
'Coded By hooline 2006.9.29
'Msn:peace.zhou#msn.com
'功能:转换两个回车为p标签,一个回车为br标签的函数
'**************************************

Function PzFormatText(sContent)

 If Not IsNull(sContent) Then     
     sContent = Replace(sContent,chr(13)&chr(10)&chr(13)&chr(10),"</p><p>")
     sContent = Replace(sContent,chr(13)&chr(10),"<br />")
     sContent = "<p>"&sContent&"</p>"
     sContent = Replace(sContent,"</p>","</p>"&chr(13)&chr(10))
     PzFormatText = sContent
   Else
     PzFormatText = ""
 End If
 
End Function

网址自动加上A标签的函数

,

功能:

自动给网址加上A标签,例如在文本中有http://www.abc.com,自动转换为
<a href="http://www.abc.com">http://www.abc.com</a>

其中用正则表达式搜索文本内容,并转换为相应代码。

函数:

Function PzRegExpUrl(sChar)
   Dim regEx,match,matches
   Set regEx = New RegExp
   regEx.Pattern = "http://[a-z0-9^~`_./^-^?=&]+"  '设置正则匹配模式
   regEx.Global = True '设置全程性质
   regEx.IgnoreCase = True '是否区分大小写
   Set matches = regEx.Execute(sChar)
   For Each match In matches
      sChar = Replace(sChar,match.value,"<a href="""&match.value&""">"&match.value&"</a>")
   Next
   PzRegExpUrl = sChar
End Function


调用:
Dim sContent
sContent = "<div><ul><li>http://pz1860.cn/index.asp</li></ul></div>"
sContent = PzRegExpUrl(sContent)
response.write sContent

Asp转换时间为GMT(RFC822)格式时间函数

, ,

由于VbScript中没有跟GMT相关的时间函数,所以一些Blog或文章系统在生成Rss的时候生成GMT时间(严格的来说是符合RFC822标准)有问题,所以写了如下这个转换函数。


'*************************************
'Coded By hooline 2006.9.8
'Email:hooline#gmail.com
'Msn:peace.zhou#msn.com
'功能:Asp转换时间为GMT(RFC822)格式时间函数
'**************************************
Function DateTimeToGMT(sDate)
  Dim dWeek,dMonth
  Dim strZero,strZone
  strZero="00"
  strZone="+0800"
  dWeek=Array("Sun","Mon","Tue","Wes","Thu","Fri","Sat")
  dMonth=Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec")
  DateTimeToGMT = dWeek(WeekDay(sDate)-1)&", "&Right(strZero&Day(sDate),2)&" "&dMonth(Month(sDate)-1)&" "&Year(sDate)&" "&Right(strZero&Hour(sDate),2)&":"&Right(strZero&Minute(sDate),2)&":"&Right(strZero&Second(sDate),2)&" "&strZone
End Function



函数调用示例:

dim dDate
dDate = now()
dDate = DateTimeToGMT(dDate)
response.write dDate


输出为:

Fri, 08 Sep 2006 14:24:38 +0800

用静态的URL地址显示动态网页内容(转)

, ,

原文出处:http://home.donews.com/donews/article/9/91262.html
作者:焦延伍

动态生成的网页在构造真正大型的网站时是不可缺少的。但是,动态页面的名字(即它的URL)往往缺乏明确的含义。例如,名为product.asp?Id=4的页面总不如名为/applicances/dishwashers/Model3809.htm的页面来得好记。本文介绍如何实现静态页面名字和动态页面的映射。
概述
静态页面名字除了具有含义更明确这一优点之外,它的另外一个优点在于搜索引擎能够索引这些页面。大多数搜索引擎,如Alta Vista和Yahoo,不会检索URL中带有问号的页面,因为它们担心进入永无止境的链接迷宫。把动态页面名字转换成静态页面名字之后,搜索引擎就会对这些页面进行索引和分类,从而为网站带来更多的访问量。
要使用本文介绍的方法将动态名字转换成静态名字,你必须使用Windows 2000和IIS 5.0。IIS 5.0的两个改进使得我们可以实现这种转换,它们是:使用Server.Transfer的“自定义错误信息”功能以及在ASP页面中使用Server.Transfer的能力。虽然IIS 4.0也支持自定义错误信息,但它使用的是Response.Redirect,没有用,所以本文方法要求使用IIS 5.0。Response.Redirect之所以没有用,是因为搜索引擎不会追随重定向。
使用本文所介绍的方法,网站开发者先用静态风格的URL链接事实上并不存在的页面。然后设置IIS服务器,告诉它要用指定的ASP页面(404.asp)来处理网站上出现的所有404错误。在这个404.asp页面里,把原来的URL转换成正式的动态URL,利用Server.Transfer执行并向用户浏览器返回目标页面。
假设有如下URL:
http://www.myserver.com/applicances/dishwashers/kenmore/Model3809.htm
其中myserver.com以网站的域名取代,该URL将返回404错误。我们首先要做的是用某个专用的.asp页面来处理所有这些404错误。这可以用IIS 5.0的“自定义错误信息”功能来实现。设置该功能的过程如下:
●在MMC中打开IIS服务器管理器
●右击Web网站节点,然后选择“属性”
●点击“自定义错误信息”页
●向下滚动,直至找到404错误
●双击404错误,打开“错误映射属性”对话框
●将消息类型改为URL
●在URL框输入“/404.asp”
●点击“确定”关闭窗口
现在404错误已经由404.asp处理了。当IIS调用404.asp页面时,它会提供导致这个404错误的URL,这对我们来说是非常有用的。
错误处理页面
接下来我们创建处理错误的404.asp页面。首先要做的是获得导致这个404错误的页面名字。下面这行代码从查询字符串提取这个页面的名字:
< %
'获得页面名字
strQ = Request.ServerVariables("QUERY_STRING")
% >
那么,strQ中的哪些内容才是重要的呢?在上例中它应该如下所示:/applicances/dishwashers/kenmore/Model3809.htm。我们真正需要的只有其中的Model3809(产品型号),因为这是产品数据库中的唯一键。下面这几行代码根据产品型号找出产品的ID(编号):
< %
' 计算产品型号
nIndex = InStrRev(strQ,"/")
If (nIndex >0) Then
strModelNumber = Right(strQ,Len(strQ)-nIndex)
strQ = Left(strQ,nIndex-1)
End If

' 从产品型号去掉.htm后缀
If ((Mid(strPageName,Len(strPageName),1)="m") And _
(Mid(strPageName,Len(strPageName)-1,1)="t") And _
(Mid(strPageName,Len(strPageName)-2,1)="h") And _
(Mid(strPageName,(strPageName)-3,1)=".")) Then

strModelNumber =Left(strPageName,Len(strModelNumber)-4)

End If

' 从产品数据库查找产品编号
strSQL = "SELECT Product_Id FROM Product " _
& "WHERE Product_Model = '" & strModelNumber & "'"
Set oRS = oConn.Execute(strSQL)
If (Not oRS.EOF) Then
lProductId = oRS("Product_Id")
End If
% >
现在我们得到了产品编号,在转换到正确的ASP页面之前必须先保存它。我们无法通过Server.Transfer在查询字符串中传递产品编号(这是IIS的一个局限),因此必须通过Session对象来传递它。
< %
Session("Id") = lProductId
Server.Transfer("/product.asp")
% >
执行这个页面时,浏览器地址栏中的内容如下:
http://www.myserver.com/applicances/dishwashers/kenmore/Model3809.htm
由于使用了Server.Transfer,浏览器地址栏中的URL不会改变,同样浏览器也不需要与服务器再交互一次,这与Response.Redirect是不同的。
另外也请注意URL中的目录是根本不存在的,事实上在这里URL中除了服务器名字之外的其余内容根本不起什么作用。例如,下面的几个URL都将返回同一页面。
http://www.myserver.com/Model3809.htm
http://www.myserver.com/trucks/ford/Model3809.htm
那么为什么要加上这么多目录呢?这些目录将提高搜索引擎对网站的评价。一些搜索引擎认为URL中的单词是比页面标题和正文更重要的搜索关键词,所以目录名字是非常重要的。
调用不存在的页面
我们已经讨论了将并不存在的URL转换为有效动态URL的技术。然而,要让搜索引擎能够索引这些页面,我们还需要链接这些并不存在的URL。换句话说,只有当我们链接了Model3809.htm页面后搜索引擎才会发现它。
以前链接这种页面时我们只需按照如下方式给出产品编号:“product.asp?Id=4”。现在我们就来构造一个以产品编号为参数返回恰当URL的函数。
< %
Function CreateProductURL(lProductId)

strSQL = "SELECT Product_Model FROM Product " _ & "WHERE Product_Id =" & lProductId

Set oRS = oConn.Execute(strSQL)
If (Not oRS.EOF) Then
strModel = oRS("Product_Model")
End If

CreateProductURL = "/" & strModel & ".htm"

End Function
% >
现在如果我们要加入URL,只需按照如下方式进行:
< A HREF="< %=CreateProductURL(4)% >" >洗碗机< /A >
本例我们假定不知道产品型号名称,必须查询数据库才能得知。但在现实中可能并非如此,我们知道产品的型号名称,可以直接创建URL而无需再次访问数据库。
性能问题
本文所介绍的方法会明显地影响性能。首先,为了创建静态风格的URL它需要一次数据库调用。其次,为了从产生404的URL出发得到正确的URL,它还要增加一次额外的数据库调用。最后,两次Server.Transfer需要较大的开销。
不过,有些性能问题可以用XCache(www.postpointsoft.com)来解决。XCache能够把出现404错误的URL转换到正确的页面,并缓存该信息以供后来的请求使用。
实例
请访问http://www.kulshan.com,这是一个应用本文技术的例子。Kulshan.com的大多数分支页面,如餐馆、饭店的评论,都为了在搜索引擎中获得更高的评价而使用了这种技术。Kulshan.com也使用了XCache。
小结
利用IIS 5.0的自定义错误信息功能控制404错误可以为动态页面制作出静态页面风格的URL。只要无需创建这些静态URL所用到的目录和文件,那么应该说创建这种既利于市场宣传、也利于搜索引擎排位的URL是相当简单的。

asp动态生成表格行和列

, , ,

有时候,需要在某个表格列内放一定数量的文字和图片,并需要随着记录数动态的显示一定的行数和列数,比如在一行内显示4张图片抑或是5张图片,用Table实现的时候有时候很难判断tr或者td的结束位置,这里我写了一段代码,能实时判断行列的结束位置,记录集中的数据不足时能自动添加空tr和td。

测试用表格
'Create Table Test(id int,sTitle varchar(50))


程序代码
'*************************************
'Coded By hooline 2006.7.4
'Email:hooline#gmail.com
'Msn:peace.zhou#msn.com
'功能:asp动态生成表格行和列
'**************************************
'测试每行排4列,排四行
dim i,j
dim iRsCount,iRows
dim perLines
perLines=4  '每行需显示的列数

set objRs=server.CreateObject("adodb.recordset")
objRs.open "select top 16 * from Test order by id",conn,3,1
if not objRs.eof then
   response.write "<table width=""100%"" cellpadding=""0"" cellspacing=""8"">"&vbcrlf
   iRsCount=objRs.recordcount  '取得实际的记录数
    iRows=int(iRsCount/perLines) '计算可得到的行数
    if iRows<1 then 
       iRows=1
     else       
        if iRsCount mod perLines=0 then
          iRows=int(iRsCount/perLines)
         else
          iRows=int(iRsCount/perLines)+1
        end if
    end if
   i=1
   while not objRs.eof
     for i=1 to iRows
      response.write "<tr>"&vbcrlf
      for j=1 to perLines
        If Not objRs.eof then
           response.write "<td width=""25%""><div align=""center"">"&objRs("sTitle")&"</div></td>"&vbcrlf
        Else
           response.write "<td>&nbsp;</td>"&vbcrlf
        End if
        if not objRs.eof then objRs.movenext
      next
      response.write "</tr>"&vbcrlf
    next
  Wend
  response.write "</table>"
end if
objRs.close
set objRs=nothing
December 2009
S M T W T F S
November 2009January 2010
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31