作者: 冲虚龙
1、为Web站点添加拼写检查功能
许多开发者都提出“如何对用户输入的内容进行拼写检查”的问题,这篇文章正好提供了一个有用的方法,讨论如何使用XDE拼写检查组件,它既可以当作拼写检查器,同时也可以做完一个字典。关于这个组件的一个好消息是:它能够在服务器端使用,或者做为一个Java Applet。但是有一点,这些方便之处不是免费的,它要花费大约100美元。然而,该组件提供了一个30天免费使用评估版本,所以在真正决定购买前,你可以仔细进行测试,认真考虑是否满足需要。
首先,访问http://mirrordns.com/download/站点,输入一些信息(名字、电子邮件,等等),下载并安装这个组件。下一步,从可供下载的XDE众多组件中选择 “Quick Spell Check Full Install”项目进行下载。下载完毕后,进行安装。在安装程序结束前,出现一个注册登记菜单,这时,简单地选择默认选择“Evaluation Period”。
注意,现在的程序还是BETA版本。如果你不希望发生潜在的错误,我建议等第一个正式版本出来后再下载进行试验。我已经发现了现有版本的一些错误。你要记住:这是一个BETA版本,不要在正式站点上应用。
接着,准备注册登记组件。现在决定一下你是否想要包含Word 97的字典和词典功能,如果需要,请先在Web服务器上安装Word 97或者Word 2000,然后参照http://mirrordns.com/spellchecker/server_installation.htm 的说明执行一套特殊的命令。如果不想使用整个Word 97的字典,就象注册其他组件一样接着进行:
拷贝DLL文件SpellCheckServer.dll到Windows的System或者System32目录
使用regsvr32注册组件:regsvr32 spellcheckserver.dll
现在安装完组件,可以在ASP代码中使用了。为了创建使用拼写检查对象的示例,仅仅简单的编写下面的代码:
Set objSpellCheck = Server.CreateObject("SpellCheck.ClsChecker")
如我前面提到的,这个组件提供了拼写检查和词典的功能。首先,来看看如何返回给定单词的一系列同义词。这要使用到LookupSynonym方法,该方法需要一个参数,就是需要寻找同义词的单词。执行后,拼写检查对象收集相关的单词到集合对象SynonymWords。执行下面的代码,将返回“Quick”单词的所有同义词:
< %
Dim objSpellChecker, iLoop
'Create an instance of the SpellChecker
Set objSpellCheck = Server.CreateObject("SpellCheck.ClsChecker")
objSpellChecker.UseMSWord = False 'We're not using MSWord
objSpellChecker.LookupSynonym "Quick" 'Lookup the synonym for "quick"
'Loop through the returned words:
Response.Write "The following synonyms for 'Quick' exist: "
For iLoop = 1 To objSpellChecker.SynonymWords("Quick").SuggestedWords.Count
Response.Write objSpellChecker.SynonymWords("Quick").SuggestedWords(iLoop).word
Response.Write " "
Next
%>
在服务器端执行拼写检查对于代码结构是非常紧凑的,但以我只见,要发挥强大的功能,必须依赖Java applet形式的拼写检查。以下将重点讨论如何应用这种方式,关于在服务器端使用组件的方法,请参见http://mirrordns.com/spellchecker/ 。
为了使用Java applet,需要将安装目录下的.class文件拷贝到一个web可访问目录。比如,这里将文件移动到/spellcheck目录下。然后,创建一个表单,包含一个文本框或者文本域,其中是要进行拼写检查的内容。
< HTML>
< BODY>
< FORM NAME="frmSpellCheckExample">
< textarea name="JavaTextArea" rows="8" cols="50">< P>
< INPUT TYPE="button" value="Start Spell Check" onclick="SpellCheck();">
接着,使用APPLET标记来引用Java applet:
< applet codebase ="/spellcheck/" code="SpellCheck.class"
height="1" name="spellcheck" width="1"
ALT="Applet not displayed">
< param name="foreground" value="FFFFFF">
< param name="background" value="008080">
< param name="label" value="This string was passed from the HTML host.">
注意:在APPLET标记中的codebase参数指向.class文件所在的目录。
最后,在客户端使用一段JavaScript代码来组装applet参数:
< script language="JavaScript">
function SpellCheck() {
document.spellcheck.ptexttocheck =
document.frmSpellCheckExample.JavaTextArea.value;
document.spellcheck.doDlg();
if (document.spellcheck.fixedtext!="") {
document.frmSpellCheckExample.JavaTextArea.value =
document.spellcheck.fixedtext;
}
}
这就完成了!如果想更多地了解如何使用该组件和Java Applet,一定来下面的地方看看:http://mirrordns.com/spellchecker/。
2、在Web上动态建立条形码
这篇文章讨论的是如何根据数据库的字段在web上动态地建立条形码的问题,这在如下的情况下非常有用:用户输入信息到系统中,然后显示一个总结页面“这就是你所输入的”,这个页面可以被打印,并在日后可以用条形码进行跟踪。
实现这个功能的关键在于如何将数值比如“ABC”翻译为条形码。这里我们使用“代码39”,关于它的详细情况,请参阅有关定义。我想将产生的条形码显示在web页面上,这样用户就能打印包含条形码的这个页面,然后,再在图形系统的处理中使用它。许多用户都在系统中安装了“代码39”字体,所以我就能够在页面中改变它,但是我不想依赖它们。我想在页面中建立,并且独立于浏览器和计算机。
我的解决方法是:为Code39中每一个支持的字符创建GIF图形文件。我使用Microsoft Paint软件创建Code39字体大小的文本框,然后为每一个字符建立一个图形。接着,使用Microsoft Image Composer将它们转换为GIF格式。最后,使用扫描软件检查这些字符,看看是否能正确地解释。下面,你将看到A、B、C以及星号(*)的条形码:
Code for A
Code for B
Code for C
Code for Asterisk
然后,为了在ASP页面中描绘数据库中数值的条形码,仅仅简单地遍历BarCodeText变量字符串中的每一个字符,然后建立< IMG SRC=“...” >标记以替换字符为相应条形码图形文件。这非常简单,不需要在客户端安装字体文件。相关代码如下:
'Code 39 barcodes require an asterisk as the start and stop characters
Response.write "< IMG SRC=http://www.programfan.com/article/"http://www.programfan.com/article/"asterisk.gif"" WIDTH=""30"" HEIGHT=""36"">"
For x = 1 to Len(Trim(rst("BarCodeText")))
Response.Write "< IMG SRC=""" & mid(rst("BarCodeText"),x,1) & _
".gif"" WIDTH=""30"" HEIGHT=""36"">"
Next
'Code 39 barcodes require an asterisk as the start and stop characters
Response.write "< IMG SRC=http://www.programfan.com/article/"http://www.programfan.com/article/"asterisk.gif"" WIDTH=""30"" HEIGHT=""36"">"
如果在记录集当前记录中BarCodeText的数值是“ABC”,那么执行上述代码后,HTML的结果是:
< IMG SRC=http://www.programfan.com/article/"asterisk.gif" WIDTH="30" HEIGHT="36">
< IMG SRC=http://www.programfan.com/article/"A.gif" WIDTH="30" HEIGHT="36">
< IMG SRC=http://www.programfan.com/article/"B.gif" WIDTH="30" HEIGHT="36">
< IMG SRC=http://www.programfan.com/article/"C.gif" WIDTH="30" HEIGHT="36">
< IMG SRC=http://www.programfan.com/article/"asterisk.gif" WIDTH="30" HEIGHT="36">
然后,将显示如下图形:
现在,将该页面打印后,就可以被条形码扫描器所跟踪了。
有2点关于条形码的注意事项:不是所有的条形码都能支持所有的字符集。Code39是很好而且很简单的一种。它具备可变长度,支持所有的大写字符、数字、星号以及7个特殊字符。对于每个字符,它使用风格一致的5线(2宽3窄)4空(指间隙,1宽3窄)形式。另外的字符集支持更多的,使用不同的解码方案。确认对每个字符都建立了GIF图形文件,同时,你可以修改图形的宽度和高度属性,从而在页面上显示稍大的或者稍小的条形码。
另外,如果遇到特殊的字符,上面的遍历循环代码将不会工作,因为,不能将GIF文件命名为+.gif。这时,就要编写一个接受字符Ascii数值的函数,然后使用CASE语句返回等价于文件名的字符串。如果数据库字段的数值是整型或者仅仅包含字符或者数字,上面的遍历代码就已经很好了!
以上介绍的方法不是很复杂,但是在某些方面却是很简单,而且很好用。
3、如何隐藏页面以防被搜索
在网络上为我们导航的搜索引擎使用一些小程序 --- 例如我们所知道的'robots'、'bots'、 'crawlers'和'spiders' --- 来对页面进行索引。然而,当开发一个站点,尤其是使用ASP进行开发时,做到防止页面被索引却是非常有用的。当这些搜索引擎正在回顾它们对所创建的web 页面进行动态索引的方案时,例如ASP页面,本文将帮助你学习一些重要的技巧来避免robots 跟踪那些你不情愿被它们索引的页面。
这为什么与你有关?
比方说现在你访问了XYZ公司的Web 站点,用你所熟悉的搜索引擎对'XYZ Corp.' 进行搜索。如果你发现你的管理页面也在相关的链接表中的话就会有点担心了。如果你有一个电子商务站点,你会不愿意在用户结束前面的页面之前,得到这个站点的定单部分最后一页的url 。不仅仅是网管人员不希望发生的。对于用户来说,有些页面不能正常运行也是烦恼的事,或者是因为他们没有适当的权限,或者因为他们没有按照设定的顺序访问页面。这样也不利于你的站点的声誉。这与那些商业搜索引擎的经营者自身也有关系。因为他们想要提供准确的链接来改善服务。
那么,如何防止这些程序对你的站点的某些页面进行索引呢?有两种方法可供选择,一是在根目录下包含一个名为robots.txt 的文件,或者是使用< META > 标记。
包含一个robots.txt 文件
早在1994年,一个自动邮件发送列表就联合提出了一个防止robots 拖拽站点的协定。但是这并不是一个正式的标准,它不能提供执行的保证,但是却为许多robot 作者所使用。
创建一个robots.txt 文件非常简单,它表明网管人员所希望的robot 行为标准。注意文件名必须用小写字母,而且必须放在站点的根文件夹中,例如http://xyzcorp/robots.txt ,这样一个文件就能带出整个站点的全部细节。
一个robots.txt 文件中有什么?
每个robots.txt 文件包含一条或多条记录。一条记录由robot 的用户代理字符串组成,即你愿意遵循的指示和应用于它的指示。不用担心你需要知道在web中漫游的所有robot的用户代理字符串,因为你可以用通配符* 来应用所有的robots。以下是一个记录的例子:
User-agent: *
Disallow: /XYZfinances.asp
Disallow: /admin
Disallow: /news/update.asp
除了用户代理字符串/通配符,只需要包含一个disallow 命令。这一个简单的例子就显示了你将会需要的全部可能性。它表明没有用户代理字符串能够进入 XYZfinances.asp ,用这一行表示:
Disallow: /XYZfinances.asp
或者说用户代理字符串不能进入管理文件夹及其下面的所有文件夹:
Disallow: /admin
或者是新闻文件夹中的update.asp文件,如果新闻文件夹中所有其它内容都可以被索引的话。
在一条记录中你愿意包含多少用户代理字符串的名字都可以。同样在任何一个robots.txt 文件中,你愿意包含多少条记录都可以(只要用一个或多个空行分隔开这些记录就可以)。
每一条单独的记录都可以为一个或多个robots提供不同的指示。但是为那些没有用用户代理字符串所命名的引擎增加一个通配符规则是明智的。最流行的选择是维护用一条记录和一个代表用户代理字符串的通配符所表示一个方案。一个有196个用户代理的清单可参考
http://info.webcrawler.com/mak/projects/robots/robots.html。
普遍认为,robots应该忽略大小写和版本号。要记住这是大多数商业搜索引擎的robots作者们的意见,因为你不想用那些没用的页面来使用户感到苦恼。但是,虽然在命令行中你可以不必考虑大小写,但是必须保证在键入URL时是准确无误的。虽然Windows NT 对文件名和路径名的大小写无所谓,但并不是所有的平台都如此。
你希望包含进去的其它东西就只有注释了,这些使用UNIX bourne shell 协定,如用#符号表示在hash 符号前面空白,和一行中可以被忽略的剩余部分。如果一行中只包含一个注释的话,它就可以完全被忽略,虽然它在记录之间的作用与空行并不相同。
现在来看看两个最终的例子。
例1
# Don't come to this site
User-agent: *
Disallow: / # Disallows anything
例2
# robots.txt for XYZcorp
# webmaster: John Doe contact JohnD@xyzcorp.com
User-agent: * # Applies to all robots except next record
Disallow: /store/order/ # No robot should visit any URL starting with
/store/order/
Disallow: /admin/ # Disallow any pages in the admin folder
Disallow: /world_domination.asp # Disallow world_domination.asp
好,这就是有关robot.txt文件的全部内容。下面介绍如何使用 < META >标记 。
使用一个< META > robot 标记
同样,你还是不能保证一个robot 会完全遵守< META >标记中的指示,但是对商业搜索引擎来说还是十分有效的。< META >标记必须包含在一个文件的< HEAD > 部分。他们工作的原理是告诉robot 是否可以对其中有这个标记的页面进行索引,是否可以跟随页面上或其下的文件夹中的任何链接。
同样,语法非常简单。第一个例子是:
< META NAME="robots" CONTENT="noindex" >
这行代码告诉 robot不要索引这一页。
下一个例子:
< META NAME="robots" CONTENT="nofollow" >
允许robot索引这一页,但是规定它不能够跟随这一页上的任何链接。如果你想将二者都禁止,可以使用:
< META NAME="robots" CONTENT="noindex, nofollow" >
这表示不要索引这一页,也不要跟随这页上的任何链接。但是,还有一个更简单的方法:
< META NAME="robots" CONTENT="none" >
还是表示不要索引这一页,或跟随这页上的任何链接。
不幸的是,如果你有一个名为admin.asp的文件与 update.asp相链接,在admin.asp中使用< META >
标记来防止robot 对admin.asp 或 update.asp 进行索引,却忘记在另一个与update.asp 相链接的
页面中也做同样的处理,那么robot 还是可以通过这个漏掉< META > 标记的第二页而到达update.asp。
另外,你还可以使用值索引。但由于它们被忽略时是默认值,因此这是没有必要的,而且这样做没有意义。
如果你使用的是IIS,那么应该总是使用定制的 HTTP 头文件来执行< META > 标记方法。从理论上讲,一个robot 对以这种方式创建的< META > 标记的反应应该是完全一样的,看起来是这样:
< META HTTP-EQUIV="robots" CONTENT="noindex" >
从理论上讲,现在我们就可以对所有的文件夹或文件夹中的文件或虚拟路径使用IIS创建的定制头文件。但是到目前为止,这种方法的测试并不成功。这些方法都不能完全保证将你的页面藏起来。确实,如果有人故意写一个robot 去找到你的私用页面的话,他们反而成了指向作者想要保护的页面的指针。但是,对于防止商业站点索引页面来说,这些方法还是奏效的,也只有在这方面是有意义的。
……