<?xml version="1.0" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="css/rss.xslt"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>完美生活 - ASP技术</title><link>http://blog.hnce.net/</link><description>专注于网站技术与网络营销的博客 - </description><generator>RainbowSoft Studio Z-Blog 1.8 Arwen Build 81206</generator><language>zh-CN</language><copyright>Copyright 2005 - 2009, 完美生活(专注于网站技术与网络营销的博客). Some Rights Reserved. </copyright><pubDate>Thu, 09 Sep 2010 09:59:49 +0800</pubDate><item><title>HTML和ASP中禁止网页缓存的办法</title><author>a@b.com (slick)</author><link>http://blog.hnce.net/post/308.html</link><pubDate>Tue, 12 Dec 2006 16:37:00 +0800</pubDate><guid>http://blog.hnce.net/post/308.html</guid><description><![CDATA[<br /><br />1、在Asp页面首部加入&nbsp;<br />Response.Buffer&nbsp;=&nbsp;True&nbsp;<br />Response.ExpiresAbsolute&nbsp;=&nbsp;Now()&nbsp;-&nbsp;1&nbsp;<br />Response.Expires&nbsp;=&nbsp;0&nbsp;<br />Response.CacheControl&nbsp;=&nbsp;&quot;no-cache&quot;&nbsp;<br />Response.AddHeader&nbsp;&quot;Pragma&quot;,&nbsp;&quot;No-Cache&quot;&nbsp;<br /><br />2、在HtML代码中加入&nbsp;<br />&lt;HEAD&gt;&nbsp;<br />&lt;META&nbsp;HTTP-EQUIV=&quot;Pragma&quot;&nbsp;CONTENT=&quot;no-cache&quot;&gt;&nbsp;<br />&lt;META&nbsp;HTTP-EQUIV=&quot;Cache-Control&quot;&nbsp;CONTENT=&quot;no-cache&quot;&gt;&nbsp;<br />&lt;META&nbsp;HTTP-EQUIV=&quot;Expires&quot;&nbsp;CONTENT=&quot;0&quot;&gt;&nbsp;<br />&lt;/HEAD&gt;&nbsp;<br /><br />3、在重新调用原页面的时候在给页面传一个参数&nbsp;<br />Href=&quot;****.asp?random()&quot;&nbsp;<br />]]></description><category>ASP技术</category><comments>http://blog.hnce.net/post/308.html#comment</comments><wfw:comment>http://blog.hnce.net/</wfw:comment><wfw:commentRss>http://blog.hnce.net/feed.asp?cmt=308</wfw:commentRss><trackback:ping>http://blog.hnce.net/cmd.asp?act=tb&amp;id=308&amp;key=46d71a3a</trackback:ping></item><item><title>关于&amp;quot;因为配置类型不正确，系统无法开始服务器进程...&amp;quot;错误的处理</title><author>a@b.com (slick)</author><link>http://blog.hnce.net/post/306.html</link><pubDate>Thu, 07 Dec 2006 22:15:00 +0800</pubDate><guid>http://blog.hnce.net/post/306.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 前一段公司运行的业务突然偶尔会报出:错误是&#39;因为配置类型不正确，系统无法开始服务器进程。请检查用户名和密码。 &#39;。的信息提示,之前都一前运行的正常,又没有做过更改过程序,头痛之际驱IE上GOOLE上找了一番,看到一个完美的解决方案,解决了我的问题.<br /><br />主要是由于IWAM账号（在我的计算机即是IWAM_MYSERVER账号）的密码错误造成了HTTP 500内部错误。<br/><p>在详细分析HTTP500内部错误产生的原因之前，先对IWAM账号进行一下简要的介绍：IWAM账号是安装IIS5时系统自动建立的一个内置账号，主要用于启动进程之外的应用程序的I nternet信息服务。IWAM账号的名字会根据每台计算机NETBIOS名字的不同而有所不同，通用的格式是IWAM_MACHINE，即由&ldquo;IWAM&rdquo;前缀、连接线&ldquo;_ &rdquo;加上计算机的NETBIOS名字组成。我的计算机的NETBIOS名字是MYSERVER，因此我的计算机上IWAM账号的名字就是IWAM_MYSERVER，这一点与I IS匿名账号ISUR_MACHINE的命名方式非常相似。 </p><p><br />IWAM账号建立后被Active Directory、IIS metabase数据库和COM+应用程序三方共同使用，账号密码被三方分别保存，并由操作系统负责这三方保存的IWAM密码的同步工作。按常理说，由操作系统负责的工作我们大可放心，不必担心出错，但不知是B UG还是其它什么原因，系统的对IWAM账号的密码同步工作有时会失败，使三方IWAM账号所用密码不统一。当IIS或COM+应用程序使用错误I WAM的密码登录系统，启动IIS Out-Of-Process Pooled Applications时，系统会因密码错误而拒绝这一请求，导致IIS Out-Of-Process Pooled Applications启动失败，也就是我们在ID10004错误事件中看到的&ldquo;不能运行服务器{3D14228D-FBE1-11D0-995D-00C04FD919C1} &rdquo;（这里{3D14228D-FBE1-11D0-995D-00C04FD919C1} 是IIS Out-Of-Process Pooled Applications的KEY），不能转入IIS5应用程序，HTTP 500内部错误就这样产生了。 </p><p>知道了导致HTTP 500内部错误的原因，解决起来就比较简单了，那就是人工同步IWAM账号在Active Directory、IIS metabase数据库和COM+应用程序中的密码。 </p><p>具体操作分三步,均需要以管理员身份登录计算机以提供足够的操作权限（IWAM账号以IWAM_MYSERVER为例）。 </p><p><br />（一）更改Active Directory中IWAM_MYSERVER账号的密码 </p><p>因IWAM账号的密码由系统控制，随机产生，我们并不知道是什么，为完成下面两步的密码同步工作，我们必须将IWAM账号的密码设置为一个我们知道的值。 </p><p>1、选择&ldquo;开始&rdquo;-&gt;&ldquo;程序&rdquo;-&gt;&ldquo;管理工具&rdquo;-&gt;&quot;Active Directory用户和计算机&quot;，启动&ldquo;Active Directory用户和计算机&rdquo;管理单元。 </p><p>2、单击&ldquo;user&rdquo;，选中右面的&ldquo;IWAM_MYSERVER&rdquo;，右击选择&ldquo;重设密码(T)...&rdquo;，在跳出的重设密码对方框中给IWAM_MYSERVER设置新的密码，这儿我们设置成&ldquo;A boutnt2001&rdquo;（没有引号的），确定，等待密码修改成功。 </p><p><br />（二）同步IIS metabase中IWAM_MYSERVER账号的密码 </p><p>可能因为这项改动太敏感和重要，微软并没有为我们修改IIS metabase中IWAM_MYSERVER账号密码提供一个显式的用户接口，只随IIS5提供了一个管理脚本adsutil.vbs，这个脚本位于C:\inetpub\adm inscripts子目录下（位置可能会因你安装IIS5时设置的不同而有所变动）。 </p><p>adsutil.vbs脚本功能强大，参数非常多且用法复杂，这里只提供使用这个脚本修改IWAM_MYSERVER账号密码的方法: </p><p>adsutil SET w3svc/WAMUserPass Password </p><p>&quot;Password&quot;参数就是要设置的IWAM账号的新的密码。因此我们将IIS metabase中IWAM_MYSERVER账号的密码修改为&ldquo;Aboutnt2001&rdquo;的命令就是： </p><p>c:\Inetpub\AdminScripts&gt;adsutil SET w3svc/WAMUserPass &quot;Aboutnt2001&quot; </p><p>修改成功后，系统会有如下提示： </p><p>WAMUserPass: (String) &quot;Aboutnt2001&quot; </p><p><br />（三）同步COM+应用程序所用的IWAM_MYSERVER的密码 </p><p>同步COM+应用程序所用的IWAM_MYSERVER的密码，我们有两种方式可以选择:一种是使用组件服务MMC管理单元，另一种是使用IWAM账号同步脚本s ynciwam.vbs。 </p><p><br />1、使用组件服务MMC管理单元 </p><p>（1）启动组件服务管理单元：选择&ldquo;开始&rdquo;-&gt;&ldquo;运行&rdquo;-&gt;&ldquo;MMC&rdquo;，启动管理控制台,打开&ldquo;添加/删除管理单元&rdquo;对话框,将&ldquo;组件服务&rdquo;管理单元添加上。 </p><p>（2）找到&ldquo;组件服务&rdquo;-&gt;&ldquo;计算机&rdquo;-&gt;&ldquo;我的电脑&rdquo;-&gt;&ldquo;COM+应用程序&rdquo;-&gt;&ldquo;Out-Of-Process Pooled Applications&rdquo;，右击&ldquo;Out-Of-Process Pooled Applications&rdquo;-&gt;&ldquo;属性&rdquo;。 </p><p>（3）切换到&ldquo;Out-Of-Process Pooled Applications&rdquo;属性对话框的&ldquo;标志&rdquo;选项卡。&ldquo;此应用程序在下列账户下运行&rdquo;选择中&ldquo;此用户&rdquo;会被选中，用户名是&ldquo;IWAM_MYSERVE R&rdquo;。这些都是缺省的，不必改动。在下面的&ldquo;密码&rdquo;和&ldquo;确认密码&rdquo;文本框内输入正确的密码&ldquo;Aboutnt2001&rdquo;，确定退出。 </p><p>（4）系统如果提示&ldquo;应用程序被一个以上的外部产品创建。你确定要被这些产品支持吗？&rdquo;时确定即可。 </p><p>（5）如果我们在IIS中将其它一些Web的&ldquo;应用程序保护&rdquo;设置为&ldquo;高（独立的）&rdquo;,那么这个WEB所使用的COM+应用程序的IWAM账号密码也需要同步。重复（1 ）-（4）步，同步其它相应Out of process application的IWAM账号密码。 </p><p><br />2、使用IWAM账号同步脚本synciwam.vbs </p><p>实际上微软已经发现IWAM账号在密码同步方面存在问题，因此在IIS5的管理脚本中单独为IWAM账号密码同步编写了一个脚本synciwam.vbs ，这个脚本位于C:\inetpub\adminscripts子目录下（位置可能会因你安装IIS5时设置的不同而有所变动）。 </p><p>synciwam.vbs脚本用法比较简单： </p><p>cscript synciwam.vbs [-v|-h] </p><p>&ldquo;-v&rdquo;参数表示详细显示脚本执行的整个过程(建议使用)，&ldquo;-h&rdquo;参数用于显示简单的帮助信息。 </p><p><br />我们要同步IWAM_MYSERVER账号在COM+应用程序中的密码，只需要执行&ldquo;cscript synciwam.vbs -v&rdquo;即可，如下： </p><p>cscript c:\inetpub\adminscripts\synciwam.vbs -v </p><p>Microsoft (R) Windows Script Host Version 5.6 </p><p>版权所有(C) Microsoft Corporation 1996-2000。保留所有权利。 </p><p><br />WamUserName:IWAM_MYSERVER </p><p>WamUserPass:Aboutnt2001 </p><p>IIS Applications Defined: </p><p>Name, AppIsolated, Package ID </p><p>w3svc, 0, {3D14228C-FBE1-11d0-995D-00C04FD919C1} </p><p>Root, 2, </p><p>IISHelp, 2, </p><p>IISAdmin, 2, </p><p>IISSamples, 2, </p><p>MSADC, 2, </p><p>ROOT, 2, </p><p>IISAdmin, 2, </p><p>IISHelp, 2, </p><p>Root, 2, </p><p>Root, 2, </p><p><br />Out of process applications defined: </p><p>Count: 1 </p><p>{3D14228D-FBE1-11d0-995D-00C04FD919C1} </p><p><br />Updating Applications: </p><p>Name: IIS Out-Of-Process Pooled Applications Key: {3D14228D-FBE1-11D0-995D-00C04FD919C1} </p><p><br />从上面脚本的执行情况可以看出，使用synciwam.vbs脚本要比使用组件服务的方法更全面和快捷。它首先从IIS的metabase数据库找到IWA M账号&quot;IWAM_MYSERVER&quot;并取出对应的密码&ldquo;Aboutnt2001&rdquo;，然后查找所有已定义的IIS Applications和Out of process applications，并逐一同步每一个Out of process applications应用程序的IWAM账号密码。 </p><p>使用synciwam.vbs脚本时，要注意一个问题，那就是在你运行synciwam.vbs之前，必须保证IIS metabase数据库与Active Directory中的IWAM密码已经一致。因为synciwam.vbs脚本是从IIS metabase数据库而不是从Active Directory取得IWAM账号的密码，如果IIS metabase中的密码不正确，那synciwam.vbs取得的密码也会不正确，同步操作执行到&ldquo;Updating Applications&rdquo;系统就会报80110414错误，即&ldquo;找不到应用程序{3D14228D-FBE1-11D0-995D-00C04FD919C1}&rdquo;。 </p><p>好了，到现在为止，IWAM账号在Active Directory、IIS metabase数据库和COM+应用程序三处的密码已经同步成功，你的ASP程序又可以运行了！</p><p>&nbsp;</p><p>虽然是问题解决了,但是纳闷的是我从来没有更改过服务器上的帐号密码,怎么会出现这样的错误呢?难道IIS或WIN2K会自动定期修改密码?</p>]]></description><category>ASP技术</category><comments>http://blog.hnce.net/post/306.html#comment</comments><wfw:comment>http://blog.hnce.net/</wfw:comment><wfw:commentRss>http://blog.hnce.net/feed.asp?cmt=306</wfw:commentRss><trackback:ping>http://blog.hnce.net/cmd.asp?act=tb&amp;id=306&amp;key=9fe017e7</trackback:ping></item><item><title>XMLHTTP文档集</title><author>a@b.com (slick)</author><link>http://blog.hnce.net/post/231.html</link><pubDate>Mon, 06 Mar 2006 00:45:00 +0800</pubDate><guid>http://blog.hnce.net/post/231.html</guid><description><![CDATA[一、数据库远程管理技术<br/><p>基于互联网的广域网现代应用中的一个重要环节是数据库远程监控。首先简单回顾一下互联网上的数据库远程管理技术的发展过程和方式： <br />早期通过编写CGI-BIN程序模块进行数据库远程管理。但CGI-BIN的运行速度慢，维护很不方便，现在已经基本被弃用。 <br />这几年使用组件对象模型(Component Object Model, COM)的应用非常多，效果也很好。但如果使用的是第三方服务器(笔者的网站就是建立在第三方的虚拟主机上)，服务器方往往因为保密或其它商业原因不允许用户注册自己的组件。 <br /><br /></p><p>近年来由微软公司推出的.NET平台和SUN公司的J2EE平台都是非常高档的数据库远程管理与服务平台。都能提供优质的多层(n-Tier)应用服务。 <br />其中，.NET的简单对象访问协议(Simple Object Access Protocol, SOAP)使用超文本传输协议(Hypertext Transfer Protocol, HTTP)和扩展标记语言(Extensible Markup Language, XML)技术实现跨系统(例如Windows - Linux)的通讯服务方式已经广为开发商接受和使用。许多大型应用，例如企业资源计划(Enterprise resource planning, ERP)等都建立在这样的大型平台之上。 <br />但对于中小型应用，比如一个网站的建设和维护，这种大型应用平台就显得有些尾大不掉，开销也过于庞大。 </p><p>曾经在互联网技术和Java技术方面一度落后的微软公司在XML应用开发则走在了前头。她的XML解析器(MSXML)中的XMLHTTP协议是一个非常方便实用的客户/服务通讯管道。综合运用XMLHTTP以及ActiveX数据对象(ActiveX Data Objects, ADO/ADOX)可以简单方便地实现数据库远程管理。 </p><p>本文介绍如何综合运用XMLHTTP和ADO/ADOX进行远程数据库管理。 </p><p>二、数据库远程管理体系 </p><p>数据库远程管理的任务流程是： <br />1、客户端向服务端发出数据库结构和数据的查询或修改指令。 <br />2、服务端接受并执行有关指令并向客户端返回结果。 <br />3、客户端接受并显示服务端返回的指令执行结果。 </p><p>实现数据库远程管理的二个主要关键环节是： <br />1、客户端与服务端之间的指令上传和结果下传的数据通道，由XMLHTTP协议实现。 <br />2、服务端前沿与数据库之间的指令传送和结果返回，由起着中间层作用的ADO/ADOX接口完成。 <br />三、XMLHTTP的使用 </p><p>顾名思义，XMLHTTP是个传送XML格式数据的超文本传输协议。 </p><p>实际上，XMLHTTP的数据传输过程更为灵活一些： <br />它上传的指令可以是XML格式数据，也可以是字符串，流，或者一个无符号整数数组。还可以是URL的参数。 <br />它下达的结果可以是XML格式数据，也可以是字符串，流，或者一个无符号整数数组。 <br />详情可参阅文末链接。 </p><p>客户端调用XMLHTTP的过程很简单，只有5个步骤： <br />1、创建XMLHTTP对象 <br />2、打开与服务端的连接，同时定义指令发送方式，服务网页(URL)和请求权限等。 <br />&nbsp;&nbsp;&nbsp; 客户端通过Open命令打开与服务端的服务网页的连接。与普通HTTP指令传送一样，可以用&quot;GET&quot;方法或&quot;POST&quot;方法指向服务端的服务网页。 <br />3、发送指令。 <br />4、等待并接收服务端返回的处理结果。 <br />5、释放XMLHTTP对象 </p><p>XMLHTTP方法： <br />Open bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword <br />&nbsp;&nbsp;&nbsp; bstrMethod：数据传送方式，即GET或POST。 <br />&nbsp;&nbsp;&nbsp; bstrUrl：服务网页的URL。 <br />&nbsp;&nbsp;&nbsp; varAsync：是否同步执行。缺省为True，即同步执行，但只能在DOM中实施同步执行。 <br />&nbsp;&nbsp;&nbsp;&nbsp; 应用中一般将其置为False，即异步执行。 <br />&nbsp;&nbsp;&nbsp; bstrUser：用户名，可省略。 <br />&nbsp;&nbsp;&nbsp; bstrPassword：用户口令，可省略。 </p><p>Send varBody <br />&nbsp;&nbsp;&nbsp; varBody：指令集。可以是XML格式数据，也可以是字符串，流，或者一个无符号整数数组。也可以省略，让指令通过Open方法的URL参数代入。 <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />setRequestHeader bstrHeader, bstrValue <br />&nbsp;&nbsp;&nbsp; bstrHeader：HTTP 头(header) <br />&nbsp;&nbsp;&nbsp; bstrValue：HTTP 头(header)的值 <br />&nbsp;&nbsp;&nbsp; 如果Open方法定义为POST，可以定义表单方式上传： <br />&nbsp;&nbsp;&nbsp; xmlhttp.setRequestHeader &quot;Content-Type&quot;, &quot;application/x-www-form-urlencoded&quot; <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />XMLHTTP属性： <br />onreadystatechange：在同步执行方式下获得返回结果的事件句柄。只能在DOM中调用。 <br />responseBody：结果返回为无符号整数数组。 <br />responseStream：结果返回为IStream流。 <br />responseText ：结果返回为字符串。 <br />responseXML：结果返回为XML格式数据。 <br />&nbsp;&nbsp;&nbsp;&nbsp; </p><p>下面是本文附件源程序中的一个应用示例： <br />Function GetResult(urlStr) <br />&nbsp;&nbsp;&nbsp; Dim xmlHttp <br />&nbsp;&nbsp;&nbsp; Dim retStr <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; Set xmlHttp = CreateObject(&quot;Msxml2.XMLHTTP&quot;)&nbsp;&nbsp;&nbsp; &#39;创建对象 <br />&nbsp;&nbsp;&nbsp; On Error Resume Next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;出错处理 <br />&nbsp;&nbsp;&nbsp; xmlHttp.Open &quot;POST&quot;, urlStr, False&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;用POST方式打开连接，异步执行。 <br />&nbsp;&nbsp;&nbsp; xmlHttp.setRequestHeader &quot;Content-Type&quot;, &quot;application/x-www-form-urlencoded&quot; &#39;上传表单 <br />&nbsp;&nbsp;&nbsp; xmlHttp.Send&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;发送指令 </p><p>&nbsp;&nbsp;&nbsp; If Err.Number = 0 Then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;如果连接正确 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; retStr = xmlHttp.responseText&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;等待并获得服务端返回的结果字符串 <br />&nbsp;&nbsp;&nbsp; Else <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; retStr = &quot;Url not found&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;否则返回出错信息 <br />&nbsp;&nbsp;&nbsp; End If <br />&nbsp;&nbsp;&nbsp; Set xmlHttp = nothing&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;释放对象&nbsp;&nbsp;&nbsp; GetResult = retStr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;返回结果 <br />End Function </p><p>GetResult()函数带入一个服务网页的URL参数，把上传的指令安放在URL后面的参数上，如： <br />&nbsp;&nbsp;&nbsp; urlStr = &quot;server.asp?cmd=&quot; &amp; cmd &amp; &quot;&amp;db=&quot; &amp; db &amp; &quot;table=&quot; &amp; table <br />&nbsp;&nbsp;&nbsp; cmd：执行方式，例如查询，修改，删除等等。 <br />&nbsp;&nbsp;&nbsp; db：服务端数据库名 <br />&nbsp;&nbsp;&nbsp; table：服务端表名 <br />&nbsp;&nbsp;&nbsp;&nbsp; <br />然后提交指令，等待并接收返回的处理结果。结果以字符串方式返回。 </p><p>&nbsp;</p><p>-------------------------------------------------------------------</p><p>XMLHTTP对象及其方法</p><p>MSXML中提供了Microsoft.XMLHTTP对象，能够完成从数据包到Request对象的转换以及发送任务。 <br />创建XMLHTTP对象的语句如下： <br />Set objXML = CreateObject(&quot;Msxml2.XMLHTTP&quot;) 或 <br />Set objXML = CreateObject(&ldquo;Microsoft.XMLHTTP&rdquo;) <br />&#39; Or, for version 3.0 of XMLHTTP, use: <br />&#39; Set xml = Server.CreateObject(&quot;MSXML2.ServerXMLHTTP&quot;) <br />对象创建后调用Open方法对Request对象进行初始化，语法格式为： <br />poster.open http-method, url, async, userID, password <br />Open方法中包含了5个参数，前三个是必要的，后两个是可选的(在服务器需要进行身份验证时提供)。参数的含义如下所示： <br />http-method： HTTP的通信方式，比如GET或是 POST <br />url： 接收XML数据的服务器的URL地址。通常在URL中要指明 ASP或CGI程序 <br />async： 一个布尔标识，说明请求是否为异步的。如果是异步通信方式(true)，客户机就不等待服务器的响应；如果是同步方式(false)，客户机就要等到服务器返回消息后才去执行其他操作 <br />userID 用户ID，用于服务器身份验证 <br />password 用户密码，用于服务器身份验证 <br />XMLHTTP对象的Send方法 <br />用Open方法对Request对象进行初始化后，调用Send方法发送XML数据： <br />poster.send XML-data <br />Send方法的参数类型是Variant，可以是字符串、DOM树或任意数据流。发送数据的方式分为同步和异步两种。在异步方式下，数据包一旦发送完毕，就结束Send进程，客户机执行其他的操作；而在同步方式下，客户机要等到服务器返回确认消息后才结束Send进程。 <br />XMLHTTP对象中的readyState属性能够反映出服务器在处理请求时的进展状况。客户机的程序可以根据这个状态信息设置相应的事件处理方法。属性值及其含义如下表所示： <br />值 说明 <br />0 Response对象已经创建，但XML文档上载过程尚未结束 <br />1 XML文档已经装载完毕 <br />2 XML文档已经装载完毕，正在处理中 <br />3 部分XML文档已经解析 <br />4 文档已经解析完毕，客户端可以接受返回消息 <br />客户机处理响应信息 <br />客户机接收到返回消息后，进行简单的处理，基本上就完成了C/S之间的一个交互周期。客户机接收响应是通过XMLHTTP对象的属性实现的： <br />● responseTxt：将返回消息作为文本字符串； <br />● responseXML：将返回消息视为XML文档，在服务器响应消息中含有XML数据时使用； <br />● responseStream：将返回消息视为Stream对象。 </p><p>&nbsp;</p><p><br />下面的xml文件是动态生成的最后用xmlHTTP传送出去，这是一个在客户端JavaScript脚本里的内容，当然你也可以写在服务器，但是要相应的改一些东西：（仅供大家参考，了解它的用法） <br />var xmlDoc=new ActiveXObject(&quot;MSXML2.DOMDocument&quot;); <br />flag=xmlDoc.loadXML(&quot;&quot;); </p><p>newNode =xmlDoc.createElement(&quot;编码&quot;) <br />MarkNode=xmlDoc.documentElement.appendChild(newNode); <br />newNode =xmlDoc.createElement(&quot;StartMark&quot;) <br />newNode.text=StartMark; <br />MarkNode.appendChild(newNode) <br />newNode =xmlDoc.createElement(&quot;EndMark&quot;) <br />newNode.text=EndMark; <br />MarkNode.appendChild(newNode) </p><p>newNode =xmlDoc.createElement(&quot;日期&quot;) <br />DateNode=xmlDoc.documentElement.appendChild(newNode); <br />newNode =xmlDoc.createElement(&quot;StartDate&quot;); <br />newNode.text=StartDate; <br />DateNode.appendChild(newNode) <br />newNode =xmlDoc.createElement(&quot;EndDate&quot;) <br />newNode.text=EndDate; <br />DateNode.appendChild(newNode); </p><p>newNode =xmlDoc.createElement(&quot;数量&quot;) <br />SLNode =xmlDoc.documentElement.appendChild(newNode); <br />newNode =xmlDoc.createElement(&quot;StartSL&quot;) <br />newNode.text=StartShuL <br />SLNode.appendChild(newNode) <br />newNode =xmlDoc.createElement(&quot;EndSL&quot;); <br />newNode.text=EndShuL <br />SLNode.appendChild(newNode); </p><p>newNode =xmlDoc.createElement(&quot;单价&quot;) <br />DJNode =xmlDoc.documentElement.appendChild(newNode) <br />newNode =xmlDoc.createElement(&quot;StartDJ&quot;) <br />newNode.text=StartDanJ; <br />DJNode.appendChild(newNode); <br />newNode =xmlDoc.createElement(&quot;EndDJ&quot;) <br />newNode.text=EndDanJ; <br />DJNode.appendChild(newNode); </p><p>newNode =xmlDoc.createElement(&quot;金额&quot;) <br />JENode =xmlDoc.documentElement.appendChild(newNode) <br />newNode =xmlDoc.createElement(&quot;StartJE&quot;) <br />newNode.text=StartJinE <br />JENode.appendChild(newNode) <br />newNode =xmlDoc.createElement(&quot;EndJE&quot;) <br />newNode.text=EndJinE <br />JENode.appendChild(newNode) </p><p>newNode =xmlDoc.createElement(&quot;仓库代码&quot;) <br />newNode.text=CK; <br />xmlDoc.documentElement.appendChild(newNode) </p><p>newNode =xmlDoc.createElement(&quot;票号&quot;) <br />newNode.text=RKPH; <br />xmlDoc.documentElement.appendChild(newNode) </p><p>newNode =xmlDoc.createElement(&quot;单位代码&quot;) <br />newNode.text=CorpName; <br />xmlDoc.documentElement.appendChild(newNode) </p><p>newNode =xmlDoc.createElement(&quot;BiaoShi&quot;) <br />newNode.text=Biaoshi <br />xmlDoc.documentElement.appendChild(newNode) </p><p>newNode =xmlDoc.createElement(&quot;FindCate&quot;) <br />newNode.text=FindCate <br />xmlDoc.documentElement.appendChild(newNode) </p><p>var xh =new ActiveXObject(&quot;MSXML2.XMLHTTP&quot;) <br />xh.open(&quot;POST&quot;,&quot;Find.asp&quot;,false) <br />xh.setRequestHeader(&quot;Content-Type&quot;,&quot;text/xml&quot;) <br />xh.setRequestHeader(&quot;Content-Type&quot;,&quot;gb2312&quot;) <br />xh.send(xmlDoc); <br />我的每一个newNode的text值是一个变量，也就是我客户端form 中input的值</p><p>-------------------------------------------------------------------</p><p><br />ASP小偷程序如何利用XMLHTTP实现表单的提交<br />利用XMLHTTP来制作小偷的具体细节落伍很多人都发过和讨论过了，但是在制作ASP小偷的过程中，很多人就发现ASP小偷不如PHP小偷的那么强</p><p>大了。确实，如果在原网站如果存在表单提交或cookies的验证，对于ASP来说，不使用基于SOCKET的组件就难以完成，其实，XMLHTTP的另外两</p><p>个方法被我们忽略了，而这正是问题的关键。<br />下面首先来说说这个方法<br />1。.send()<br />由于流行的小偷是使用的GET而不是POST来传送数据，所以很多人忽略了这个方法，而使用SEND发送数据也很简单，就是SEND(&quot;内容&quot;)，可是，</p><p>发送表单就不是这么简单，因为你发送的表单如果是中文的话，就要牵扯到编码的问题了。<br />首先，你在OPEN 时要确定是用POST 即 .open(&quot;POST&quot;,地址,是否异步)<br />然后，在SEND里面加上你表单的内容，比如说，你要提交的表单有3个表单域，分别是A，B，C，对应的值分别是1，2，3，那么，你在SEND里这</p><p>样写就可以提交表单了，.send(&quot;A=1&amp;B=2&amp;C=3&quot;),怎么样，很简单吧，是不是没想到呢？但是别高兴的太早了，我前面说到了，如果表单的值是</p><p>中文的话，数据传输的就会出错了。这里我们借助一个函数escape(),熟悉JAVASCRIPT的朋友都应该知道这个函数的作用了，现在VBSCRIPT同样支持这个函数。.send(&quot;A=escape(&#39;值1&#39;)&amp;B=escape(&#39;值2&#39;)&amp;C=escape(&#39;值3&#39;)&quot;)<br />2。.setRequestHeader()<br />接着上面的所说，你的数据send出去了，对方却不会接收到，为什么了，其实，那是因为你的HTTP头少了一个东西，然后用这个函数把加上去就可以了，具体就是.setRequestHeader(&quot;CONTENT-TYPE&quot;,&quot;application/x-www-form-urlencoded&quot;), 告诉对方你是提交了一个urlencode编码的表单。</p><p>好的，说完了表单的提交来说怎么传送cookies和session</p><p><br />其实传送cookies也很简单了，同样利用这个函数在HTTP头里添加东西，比如，我当前在落伍的cookies是<br />cdb_sid=ybBiK0; cdb_cookietime=315360000; cdb_oldtopics=D869008D; cdb_visitedfid=1D45; cdb_auth=AQYHXVFDGERdsggVQA1VYUgxQDwFVV1dUAlwFAFRXVwU%2FbAIJB1lUCg; cdb_fid45=1113370145<br />现在我要发送这个cookies就直接是.setRequestHeader(&quot;Cookie&quot;,&quot;cdb_sid=ybBiK0; cdb_cookietime=315360000; cdb_oldtopics=D869008D; cdb_visitedfid=1D45; cdb_auth=AQYHXVFDGERdsggVQA1VYUgxQDwFVV1dUAlwFAFRXVwU%2FbAIJB1lUCg; cdb_fid45=1113370145&quot;)<br />当然，有些网站页面有页面判断功能，这个也不难，就是.setRequestHeader(&quot;Referer&quot;,&quot;来路的绝对地址&quot;)<br />这里还有个重要问题，就是这个方法由于是写HTTP头的，所以不能更改现有的HTTP头，对于怎么用asp获取对方页面的cookies或session并且发出去. <br /></p>]]></description><category>ASP技术</category><comments>http://blog.hnce.net/post/231.html#comment</comments><wfw:comment>http://blog.hnce.net/</wfw:comment><wfw:commentRss>http://blog.hnce.net/feed.asp?cmt=231</wfw:commentRss><trackback:ping>http://blog.hnce.net/cmd.asp?act=tb&amp;id=231&amp;key=176221d0</trackback:ping></item><item><title>出现“该目录不允许执行程序”如何解决</title><author>a@b.com (slick)</author><link>http://blog.hnce.net/post/211.html</link><pubDate>Tue, 17 Jan 2006 22:36:00 +0800</pubDate><guid>http://blog.hnce.net/post/211.html</guid><description><![CDATA[问题：运行程序时，出现下面的错误提示应该如何解决？<br/>该页无法显示<br/>您试图从目录中执行 CGI、ISAPI 或其他可执行程序，但该目录不允许执行程序。 <br/>--------------------------------------------------------------------------------<br/>请尝试以下操作：<br/>如果您认为该目录应该允许执行访问权限，请与网站管理员联系。 <br/>HTTP 错误 403.1 - 禁止访问：执行访问被拒绝。<br/>Internet 信息服务 (IIS)<br/>--------------------------------------------------------------------------------<br/>技术信息（为技术支持人员提供）<br/>转到 Microsoft 产品支持服务并搜索包括“HTTP”和“403”的标题。 <br/>打开“IIS 帮助”（可在 IIS 管理器 (inetmgr) 中访问），然后搜索标题为“配置 ISAPI 扩展”、“配置 CGI 应用程序”、“使用网站权限保护站点”和“关于自定义错误消息”的主题。 <br/>在 IIS 软件开发工具包 (SDK) 或 MSDN Online Library 中，搜索标题为“Developing ISAPI Extensions”、“ISAPI and CGI”和“Debugging ISAPI Extensions and Filters”的主题。 <br/><br/>解决方法：在位次单击操作系统的开始－－程序－－管理工具－－Interneter服务器管理，在IIS中选择您的站点然后右键－－属性，在主目录选项中，查看“执行权限”是否设置为“无”，这里改成“纯脚本”保存即可。<br/>]]></description><category>ASP技术</category><comments>http://blog.hnce.net/post/211.html#comment</comments><wfw:comment>http://blog.hnce.net/</wfw:comment><wfw:commentRss>http://blog.hnce.net/feed.asp?cmt=211</wfw:commentRss><trackback:ping>http://blog.hnce.net/cmd.asp?act=tb&amp;id=211&amp;key=16ff418e</trackback:ping></item><item><title>MsChart条形，饼形显示xml数据示例</title><author>a@b.com (slick)</author><link>http://blog.hnce.net/post/176.html</link><pubDate>Mon, 21 Nov 2005 22:48:00 +0800</pubDate><guid>http://blog.hnce.net/post/176.html</guid><description><![CDATA[<br /><br />[MoneyStatistics.xml]<br />&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt; <br />&lt;MoneyStatistics name=&quot;财务统计&quot;&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;Money value=&quot;1000&quot; name=&quot;总计额&quot;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;Money value=&quot;2000&quot; name=&quot;定金&quot;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;Money value=&quot;3000&quot; name=&quot;尾款&quot;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;Money value=&quot;4000&quot; name=&quot;结款&quot;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;Money value=&quot;5000&quot; name=&quot;收入总计&quot;/&gt;<br />&lt;/MoneyStatistics&gt;<br /><br />[MoneyStatistics.htm]<br />&lt;html&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;head&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;MoneyStatistics&lt;/title&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=gb2312&quot;&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;SCRIPT ID=&quot;clientEventHandlersJS&quot; LANGUAGE=&quot;javascript&quot;&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function DisplayPage(chartType) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var xmlDoc = new ActiveXObject(&quot;Msxml2.DOMDocument.4.0&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var nodeMoneyList;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var t=0,i=0,j=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlDoc.async = false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlDoc.load(&quot;MoneyStatistics.xml&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nodeMoneyList = xmlDoc.selectNodes(&quot;MoneyStatistics//Money&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mschart6.TitleText = &quot;&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mschart6.ShowLegend =true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mschart6.ColumnCount =nodeMoneyList.length;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mschart6.RowCount =1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i=0;i&lt;mschart6.RowCount;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (j=0;j&lt;mschart6.ColumnCount;j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mschart6.Row=i+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mschart6.Column=j+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mschart6.ColumnLabel = <br /><br />nodeMoneyList.item(j).getAttribute(&quot;name&quot;) +<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&quot;: &quot; + nodeMoneyList.item(j).getAttribute(&quot;value&quot;)+&quot; RMB&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ((mschart6.ColumnCount*mschart6.RowCount)&gt;1)&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mschart6.Data = <br /><br />nodeMoneyList.item(j).getAttribute(&quot;value&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mschart6.Data=&quot;&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (mschart6.RowCount&gt;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mschart6.RowLabel =&quot;&quot; ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var rootName = xmlDoc.selectSingleNode <br /><br />(&quot;MoneyStatistics&quot;).getAttribute(&quot;name&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mschart6.RowLabel =rootName;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mschart6.chartType =chartType;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mschart6.Plot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function switchType(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var type=14;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (switchPoint.value ==&quot;条形图&quot;){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switchPoint.value=&quot;饼状图&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switchPoint.value =&quot;条形图&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type=14;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DisplayPage(type);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/SCRIPT&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/head&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;body onload=&quot;return DisplayPage(14)&quot;&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div align=&quot;center&quot;&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;INPUT id=&quot;switchPoint&quot; type=&quot;button&quot; value=&quot;条形图&quot; <br /><br />onclick=&quot;switchType()&quot;&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;OBJECT id=&quot;mschart6&quot; style=&quot;WIDTH: 651px; HEIGHT: 326px&quot; <br /><br />codeBase=&quot;mschart.cab&quot;&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/body&gt;<br />&lt;/html&gt;]]></description><category>ASP技术</category><comments>http://blog.hnce.net/post/176.html#comment</comments><wfw:comment>http://blog.hnce.net/</wfw:comment><wfw:commentRss>http://blog.hnce.net/feed.asp?cmt=176</wfw:commentRss><trackback:ping>http://blog.hnce.net/cmd.asp?act=tb&amp;id=176&amp;key=e415e4fb</trackback:ping></item><item><title>谈谈MsChart在如何在ASP中使用</title><author>a@b.com (slick)</author><link>http://blog.hnce.net/post/175.html</link><pubDate>Mon, 21 Nov 2005 22:42:00 +0800</pubDate><guid>http://blog.hnce.net/post/175.html</guid><description><![CDATA[MsChart是微软制作的功能强大的图表工具，用它可以很方便的建立各种图表。制作各种3维2维的直方图，折线图。<br /><br />发送数据程序<br />&lt;HTML&gt;<br />&lt;HEAD&gt;<br />&lt;/HEAD&gt;<br />&lt;BODY&gt;<br />&lt;form&nbsp;&nbsp;method=post name=&quot;form1&quot;&nbsp;&nbsp;action=mschart.asp&gt;<br />&lt;INPUT type=&quot;submit&quot; value=&quot;发送&quot; id=submit1 name=submit1&gt;<br />&lt;!--<br />chtitle&nbsp;&nbsp;&nbsp;&nbsp;标题<br />rcount&nbsp;&nbsp;&nbsp;&nbsp;列数 <br />ccount&nbsp;&nbsp;&nbsp;&nbsp;行数 <br />rc_type 排列方式（1 以行方式，2以列方式）<br />rc_data 数据<br />rname&nbsp;&nbsp;&nbsp;&nbsp;列名数组<br />cname&nbsp;&nbsp;&nbsp;&nbsp;行名数组<br />--&gt;<br />&lt;input type=&quot;hidden&quot; value=&quot;CoolFatMan的成长里程&quot; name=chtitle&gt;<br />&lt;input type=&quot;hidden&quot; value=3&nbsp;&nbsp;name=rcount&gt;<br />&lt;input type=&quot;hidden&quot; value=2&nbsp;&nbsp;name=ccount&gt;<br />&lt;input type=&quot;hidden&quot; value=1&nbsp;&nbsp;name=rc_type&gt;<br />&lt;input type=&quot;hidden&quot; value=&quot;1993&quot; name=rname&gt;<br />&lt;input type=&quot;hidden&quot; value=&quot;1996&quot; name=rname&gt;<br />&lt;input type=&quot;hidden&quot; value=&quot;1999&quot; name=rname&gt;<br />&lt;input type=&quot;hidden&quot; value=&quot;身高&quot; name=cname&gt;<br />&lt;input type=&quot;hidden&quot; value=&quot;体重&quot; name=cname&gt;<br />&lt;input type=&quot;hidden&quot; value=179 name=rc_data&gt;<br />&lt;input type=&quot;hidden&quot; value=160 name=rc_data&gt;<br />&lt;input type=&quot;hidden&quot; value=180 name=rc_data&gt;<br />&lt;input type=&quot;hidden&quot; value=170 name=rc_data&gt;<br />&lt;input type=&quot;hidden&quot; value=182 name=rc_data&gt;<br />&lt;input type=&quot;hidden&quot; value=182 name=rc_data&gt;<br />&lt;/form&gt;<br />&lt;/BODY&gt;<br />&lt;/HTML&gt;<br /><br /><br />显示数据程序 mschart.asp<br />&lt;%@ Language=VBScript %&gt;<br />&lt;HTML&gt;<br />&lt;HEAD&gt;<br />&lt;SCRIPT ID=clientEventHandlersJS LANGUAGE=javascript&gt;<br />&lt;!--<br />function window_onload() {<br />t=0;<br />mschart1.TitleText = document.form1.chtitle.value;<br />mschart1.ShowLegend =true;<br />mschart1.ColumnCount =document.form1.ccount.value;<br />mschart1.RowCount =document.form1.rcount.value;<br />for (i=0;i&lt;document.form1.rcount.value;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{for (j=0;j&lt;document.form1.ccount.value;j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;mschart1.Row=i+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mschart1.Column=j+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (document.form1.ccount.value&gt;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mschart1.ColumnLabel =document.form1.cname(j).value;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mschart1.ColumnLabel =document.form1.cname.value;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ((document.form1.rcount.value*document.form1.ccount.value)&gt;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mschart1.Data=document.form1.rc_data(t).value;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mschart1.Data=document.form1.rc_data.value;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;if (document.form1.rcount.value&gt;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mschart1.RowLabel =document.form1.rname(i).value ;<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mschart1.RowLabel =document.form1.rname.value ;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />function select1_onchange() {<br />mschart1.chartType =select1.value <br />mschart1.Plot<br />}<br />//--&gt;<br />&lt;/SCRIPT&gt;<br />&lt;TITLE&gt;数据显示图&lt;/TITLE&gt;<br />&lt;/HEAD&gt;<br />&lt;BODY LANGUAGE=javascript onload=&quot;return window_onload()&quot;&gt;<br />&lt;object 此处插入mschart activex控件&gt;<br />&lt;BR&gt;<br />显示方式<br />&lt;SELECT id=select1 name=select1 LANGUAGE=javascript onchange=&quot;return select1_onchange()&quot;&gt;<br />&lt;OPTION value=1&gt;二维直方图&lt;/OPTION&gt;<br />&lt;OPTION value=0&gt;三维直方图&lt;/OPTION&gt;<br />&lt;OPTION value=3&gt;二维折线图&lt;/OPTION&gt;<br />&lt;OPTION value=2&gt;三维折线图&lt;/OPTION&gt;<br />&lt;OPTION value=5&gt;二维面积图&lt;/OPTION&gt;<br />&lt;OPTION value=4&gt;三维面积图&lt;/OPTION&gt;<br />&lt;OPTION value=14&gt;饼图&lt;/OPTION&gt;&lt;/SELECT&gt;<br />&lt;!<br />chtitle&nbsp;&nbsp;&nbsp;&nbsp;标题<br />rcount&nbsp;&nbsp;&nbsp;&nbsp;列数 <br />ccount&nbsp;&nbsp;&nbsp;&nbsp;行数 <br />rc_type 排列方式（1 以行方式，2以列方式）<br />rc_data 数据<br />rname&nbsp;&nbsp;&nbsp;&nbsp;列名数组<br />cname&nbsp;&nbsp;&nbsp;&nbsp;行名数组&gt;<br />&lt;form name=form1 id=form1&gt;<br />&lt;% for i=1 to Request.Form(&quot;rcount&quot;)%&gt;<br />&lt;input type=&quot;hidden&quot; name=rname id=rname value=&lt;%=Request.Form(&quot;rname&quot;)(i)%&gt;&gt;<br />&lt;%next%&gt;<br />&lt;% for i=1 to Request.Form(&quot;ccount&quot;)%&gt;<br />&lt;input type=&quot;hidden&quot; name=cname id=cname value=&lt;%=Request.Form(&quot;cname&quot;)(i)%&gt;&gt;<br />&lt;%next%&gt;<br />&lt;input type=&quot;hidden&quot; name=rcount id=rcount value=&lt;%=Request.Form(&quot;rcount&quot;)%&gt;&gt;<br />&lt;input type=&quot;hidden&quot; name=chtitle id=chtitle value=&lt;%=Request.Form(&quot;chtitle&quot;)%&gt;&gt;<br />&lt;input type=&quot;hidden&quot; name=ccount id=ccount value=&lt;%=Request.Form(&quot;ccount&quot;)%&gt;&gt;<br />&lt;%if Request.Form(&quot;rc_type&quot;)=1 then%&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;%for i=1 to Request.Form(&quot;rcount&quot;)*Request.Form(&quot;ccount&quot;)%&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input type=&quot;hidden&quot; name=rc_data id=rc_data value=&lt;%=Request.Form(&quot;rc_data&quot;)(i)%&gt;&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;%next%&gt;<br />&lt;%else%&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;%for j=1 to Request.Form(&quot;rcount&quot;)%&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;%for i=1 to Request.Form(&quot;ccount&quot;)%&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input type=&quot;hidden&quot; name=rc_data id=rc_data value=&lt;%=Request.Form(&quot;rc_data&quot;)((i-1)*Request.Form(&quot;rcount&quot;)+j)%&gt;&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;%next%&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;%next%&gt;<br />&lt;%end if%&gt;<br />&lt;/form&gt;&lt;/BODY&gt;&lt;/HTML&gt;<br />]]></description><category>ASP技术</category><comments>http://blog.hnce.net/post/175.html#comment</comments><wfw:comment>http://blog.hnce.net/</wfw:comment><wfw:commentRss>http://blog.hnce.net/feed.asp?cmt=175</wfw:commentRss><trackback:ping>http://blog.hnce.net/cmd.asp?act=tb&amp;id=175&amp;key=3b49e93d</trackback:ping></item><item><title>使用模板实现ASP代码与页面分离</title><author>a@b.com (slick)</author><link>http://blog.hnce.net/post/169.html</link><pubDate>Sun, 20 Nov 2005 12:11:00 +0800</pubDate><guid>http://blog.hnce.net/post/169.html</guid><description><![CDATA[　　每个进行过较大型的ASP-Web应用程序设计的开发人员大概都有如下的经历：ASP代码与页面HTML混淆难分，业务逻辑与显示方式绞合，使得代码难以理解、难以修改；程序编写必须在美工之后，成为项目瓶颈；整合的程序代码和HTML静态页面时，花费大量的时间才能得到理想的效果，兼作了美工。的确，用脚本语言开发Web应用不容易将数据的处理和数据的显示分开，但在多人合作的情况下，如果无法将数据和显示分开，将大大影响开发的效率，专业分工的发挥。<br /><br />　　其它的脚本语言，如JSP、PHP都有自己的解决方案，ASP的后一代产品ASP.NET也实现了代码与页面，似乎直接过渡到ASP是不错的选择。但是总有这样或那样的原因让我们不能或暂时不能放弃ASP直奔.NET大营。从公司角度来看，转换语言是一笔不少的投资，包括雇佣熟手.NET程序员、培训原有程序员、开发工具的转型、开发风格的转型、界面风格转变、接口风格、软件架构、文档、开发流程等等；这还意味着原有的代码必须在新语言环境里重写以实现最佳的效果和稳定性；同时将直接影响这段时间内项目的进度，更有可能导致个别程序员出走。由此看来在您决定转换语言之前，在原基础上寻求一种解决方案，才是最好的选择。<br />　　PHP通过模板实现代码与页面，可供选择的有FastTemplate、PHPLIB、Smarty等多种，其中PHPLIB的影响最大、使用最多。既然如此，我们直接把它搬到ASP来，对于同时使用PHP和ASP的公司还有很有好处：一、美工处理页面时，不管将要套用PHP还是ASP，处理方式是一样，无须经过培训；二、程序员编写代码时，两种语言间的思路接近或一致，相同功能在两种语言实现时，只需拷贝过来略作修改即可，保证了工作效率和项目进度。<br/><p><strong>1、模板类的设计</strong><br />　　实现代码封装成为模板类，即是为了与PHPLIB兼容，也使得代码方便管理与扩展。<br />　　模板类要实现的目标为：从模板文件中读入显示的HTML代码，将这些显示代码中需要动态数据的地方替换为ASP程序运算所得出的数据，然后按照一定的顺序输出。其中，替换的部分可以自由的设定。因此它必须完成如下任务：<br />&nbsp;&nbsp;&nbsp; &middot;从模板文件中读取显示用的HTML代码。<br />&nbsp;&nbsp;&nbsp; &middot;将模板文件和实际生成的数据结合，生成输出的结果。<br />&nbsp;&nbsp;&nbsp; &middot;允许同时处理多个模板。<br />&nbsp;&nbsp;&nbsp; &middot;允许模板的嵌套。<br />&nbsp;&nbsp;&nbsp; &middot;允许对模板中的某个单独的部分进行处理。</p><p><font color="#a52a2a">实现方法：<br /></font>&nbsp;&nbsp;&nbsp; 采用FSO读取模板文件<br />&nbsp;&nbsp;&nbsp; 采用正则替换实现模板文件和数据的结合<br />&nbsp;&nbsp;&nbsp; 处理多个模板用数组存储来实现。<br />&nbsp;&nbsp;&nbsp; 模板的嵌套的实现主要的想法是：将模板和输出（任何中间的分析结果）一视同仁，都可拿来做替换，即可实现。<br />&nbsp;&nbsp;&nbsp; 单独部分的处理的通过在模板文件中设定标注，然后在正则替换中结合标注来控制，实现部分替换。</p><p><strong>2、模板类的实现</strong><br />　　给出具体代码之前，先把主要函数列出，用过PHPLIB的朋友应该对此很熟悉了：<br />　　1）Public Sub set_root(ByVal Value)　设定模板默认目录<br />　　2）Public Sub set_file(ByVal handle,ByVal&nbsp; filename)　读取文件<br />　　3）Public Sub set_var(ByVal Name, ByVal Value, ByVal Append)　设置映射数据-替换变量<br />　　4）Public Sub unset_var(ByVal Name)　取消数据映射<br />　　5）Public Sub set_block(ByVal Parent, ByVal BlockTag, ByVal Name)　设置数据块<br />　　6）Public Sub set_unknowns(ByVal unknowns)　设定未指定映射的标记处理方式<br />　　7）Public Sub parse(ByVal Name, ByVal BlockTag, ByVal Append)　执行模板文件与数据的结合 <br />　　8）Public Sub p(ByVal Name)　输出处理结果</p><p><strong><font color="#a52a2a">实现代码：</font></strong><br />&lt;%<br /><font color="#003300">&#39;================================================================<br />&#39; CLASS NAME:&nbsp; kktTemplate ASP页面模板对象<br />&#39; DESIGN BY :&nbsp;&nbsp;&nbsp;&nbsp; 彭国辉<br />&#39; DATE:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2004-07-05<br />&#39; WEBSITE:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><font color="#003300">http://kacarton.yeah.net/</font><br /><font color="#003300">&#39; BLOG:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#003300">http://blog.csdn.net/nhconch</font><br /><font color="#003300">&#39; EMAIL:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </font><font color="#003300">kacarton@sohu.com</font><br /><font color="#003300">&#39;<br />&#39; 本对象中使用了set_var、set_block等命名方法是为了兼容phplib<br />&#39;文章为作者原创，转载前请先与本人联系，转载请注明文章出处、保留作者信息，谢谢支持！<br />&#39;================================================================</font></p><p>Class kktTemplate<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; Private m_FileName, m_Root, m_Unknowns, m_LastError, m_HaltOnErr<br />&nbsp;&nbsp;&nbsp; Private m_ValueList, m_BlockList<br />&nbsp;&nbsp;&nbsp; Private m_RegExp&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;<font color="#003300">&nbsp; &#39; 构造函数</font><br />&nbsp;&nbsp;&nbsp; Private Sub Class_Initialize<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set m_ValueList&nbsp;&nbsp;&nbsp;&nbsp; = CreateObject(&quot;Scripting.Dictionary&quot;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set m_BlockList&nbsp;&nbsp;&nbsp;&nbsp; = CreateObject(&quot;Scripting.Dictionary&quot;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set m_RegExp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = New RegExp<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_RegExp.IgnoreCase = True<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_RegExp.Global&nbsp;&nbsp;&nbsp;&nbsp; = True<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_FileName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = &quot;&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_Root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = &quot;&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_Unknowns&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = &quot;remove&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_LastError&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = &quot;&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_HaltOnErr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = true<br />&nbsp;&nbsp;&nbsp; End Sub<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; <font color="#003300">&#39; 析构函数</font><br />&nbsp;&nbsp;&nbsp; Private Sub Class_Terminate<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set m_RegExp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = Nothing<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set m_BlockMatches = Nothing<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set m_ValueMatches = nothing<br />&nbsp;&nbsp;&nbsp; End Sub<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; Public Property Get ClassName()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ClassName = &quot;kktTemplate&quot;<br />&nbsp;&nbsp;&nbsp; End Property<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; Public Property Get Version()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Version = &quot;1.0&quot;<br />&nbsp;&nbsp;&nbsp; End Property<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; Public Sub About()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Write(&quot;kktTemplate ASP页面模板类&lt;br&gt;&quot; &amp; vbCrLf &amp;_<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;程序设计：彭国辉 2004-07-05&lt;br&gt;&quot; &amp; vbCrLf &amp;_<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;个人网站：&lt;a href=&#39;http://kacarton.yeah.net&#39;&gt;http://kacarton.yeah.net&lt;/a&gt;&lt;br&gt;&quot; &amp; vbCrLf &amp;_<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;电子邮件：&lt;a href=&#39;mailto:kacarton@sohu.com&#39;&gt;kacarton@sohu.com&lt;/a&gt;&lt;br&gt;&quot;)<br />&nbsp;&nbsp;&nbsp; End Sub<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;<font color="#003300"> &#39;检查目录是否存在</font><br />&nbsp;&nbsp;&nbsp; Public Function FolderExist(ByVal path)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim fso<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set fso = CreateObject(&quot;Scripting.FileSystemObject&quot;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FolderExist = fso.FolderExists(Server.MapPath(path))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set fso = Nothing<br />&nbsp;&nbsp;&nbsp; End Function<br />&nbsp;&nbsp;&nbsp;<font color="#003300"> &#39;读取文件内容</font><br />&nbsp;&nbsp;&nbsp; Private Function LoadFile()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim Filename, fso, hndFile<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Filename = m_Root<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Right(Filename, 1)&lt;&gt;&quot;/&quot; And Right(Filename, 1)&lt;&gt;&quot;\&quot; Then Filename = Filename &amp; &quot;/&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Filename = Server.MapPath(Filename &amp; m_FileName)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set fso = CreateObject(&quot;Scripting.FileSystemObject&quot;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Not fso.FileExists(Filename) Then ShowError(&quot;模板文件&quot; &amp; m_FileName &amp; &quot;不存在!&quot;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set hndFile = fso.OpenTextFile(Filename)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LoadFile = hndFile.ReadAll<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set hndFile = Nothing<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set fso = Nothing<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If LoadFile = &quot;&quot; Then ShowError(&quot;不能读取模板文件&quot; &amp; m_FileName &amp; &quot;或文件为空!&quot;)<br />&nbsp;&nbsp;&nbsp; End Function<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;<font color="#003300"> &#39;处理错误信息</font><br />&nbsp;&nbsp;&nbsp; Private Sub ShowError(ByVal msg)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_LastError = msg<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Write &quot;&lt;font color=red style=&#39;font-size;14px&#39;&gt;&lt;b&gt;模板错误：&quot; &amp; msg &amp; &quot;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If m_HaltOnErr Then Response.End<br />&nbsp;&nbsp;&nbsp; End Sub<br />&nbsp;&nbsp;&nbsp; <br /><font color="#003300">&nbsp;&nbsp;&nbsp; &#39;设置模板文件默认目录<br />&nbsp;&nbsp;&nbsp; &#39;Ex: kktTemplate.set_root(&quot;/tmplate&quot;)<br />&nbsp;&nbsp;&nbsp; &#39;&nbsp;&nbsp;&nbsp; kktTemplate.Root = &quot;/tmplate&quot;<br />&nbsp;&nbsp;&nbsp; &#39;&nbsp;&nbsp;&nbsp; root = kktTemplate.get_root()<br />&nbsp;&nbsp;&nbsp; &#39;&nbsp;&nbsp;&nbsp; root = kktTemplate.Root<br />&nbsp;&nbsp;&nbsp; &#39;使用类似set_root这样的命名方法是为了兼容phplib，以下将不再重复说明</font><br />&nbsp;&nbsp;&nbsp; Public Sub set_root(ByVal Value)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Not FolderExist(Value) Then ShowError(Value &amp; &quot;不是有效目录或目录不存在!&quot;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_Root = Value<br />&nbsp;&nbsp;&nbsp; End Sub<br />&nbsp;&nbsp;&nbsp; Public Function get_root()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get_root = m_Root<br />&nbsp;&nbsp;&nbsp; End Function <br />&nbsp;&nbsp;&nbsp; Public Property Let Root(ByVal Value)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set_root(Value)<br />&nbsp;&nbsp;&nbsp; End Property<br />&nbsp;&nbsp;&nbsp; Public Property Get Root()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Root = m_Root<br />&nbsp;&nbsp;&nbsp; End Property<br />&nbsp;&nbsp;&nbsp; <br /><font color="#003300">&nbsp;&nbsp;&nbsp; &#39;设置模板文件<br />&nbsp;&nbsp;&nbsp; &#39;Ex: kktTemplate.set_file(&quot;hndTpl&quot;, &quot;index.htm&quot;)<br />&nbsp;&nbsp;&nbsp; &#39;本类不支持多模板文件，handle为兼容phplib而保留</font><br />&nbsp;&nbsp;&nbsp; Public Sub set_file(ByVal handle,ByVal&nbsp; filename)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_FileName = filename<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_BlockList.Add Handle, LoadFile()<br />&nbsp;&nbsp;&nbsp; End Sub<br />&nbsp;&nbsp;&nbsp; Public Function get_file()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get_file = m_FileName<br />&nbsp;&nbsp;&nbsp; End Function<br /><font color="#003300">&#39;&nbsp;&nbsp;&nbsp;&nbsp; Public Property Let File(handle, filename)<br />&#39;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set_file handle, filename<br />&#39;&nbsp;&nbsp;&nbsp;&nbsp; End Property<br />&#39;&nbsp;&nbsp;&nbsp;&nbsp; Public Property Get File()<br />&#39;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File = m_FileName<br />&#39;&nbsp;&nbsp;&nbsp;&nbsp; End Property<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &#39;设置对未指定的标记的处理方式，有keep、remove、comment三种</font><br />&nbsp;&nbsp;&nbsp; Public Sub set_unknowns(ByVal unknowns)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_Unknowns = unknowns<br />&nbsp;&nbsp;&nbsp; End Sub<br />&nbsp;&nbsp;&nbsp; Public Function get_unknowns()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get_unknowns = m_Unknowns<br />&nbsp;&nbsp;&nbsp; End Function<br />&nbsp;&nbsp;&nbsp; Public Property Let Unknowns(ByVal unknown)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_Unknowns = unknown<br />&nbsp;&nbsp;&nbsp; End Property<br />&nbsp;&nbsp;&nbsp; Public Property Get Unknowns()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Unknowns = m_Unknowns<br />&nbsp;&nbsp;&nbsp; End Property<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; Public Sub set_block(ByVal Parent, ByVal BlockTag, ByVal Name)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim Matches<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_RegExp.Pattern = &quot;&lt;!--\s+BEGIN &quot; &amp; BlockTag &amp; &quot;\s+--&gt;([\s\S.]*)&lt;!--\s+END &quot; &amp; BlockTag &amp; &quot;\s+--&gt;&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Not m_BlockList.Exists(Parent) Then ShowError(&quot;未指定的块标记&quot; &amp; Parent)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set Matches = m_RegExp.Execute(m_BlockList.Item(Parent))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For Each Match In Matches<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_BlockList.Add BlockTag, Match.SubMatches(0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_BlockList.Item(Parent) = Replace(m_BlockList.Item(Parent), Match.Value, &quot;{&quot; &amp; Name &amp; &quot;}&quot;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set Matches = nothing<br />&nbsp;&nbsp;&nbsp; End Sub<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; Public Sub set_var(ByVal Name, ByVal Value, ByVal Append)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim Val<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If IsNull(Value) Then Val = &quot;&quot; Else Val = Value<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If m_ValueList.Exists(Name) Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Append Then m_ValueList.Item(Name) = m_ValueList.Item(Name) &amp; Val _<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else m_ValueList.Item(Name) = Val<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_ValueList.Add Name, Value<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br />&nbsp;&nbsp;&nbsp; End Sub<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; Public Sub unset_var(ByVal Name)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If m_ValueList.Exists(Name) Then m_ValueList.Remove(Name)<br />&nbsp;&nbsp;&nbsp; End Sub<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; Private Function InstanceValue(ByVal BlockTag)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim keys, i<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InstanceValue = m_BlockList.Item(BlockTag)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; keys = m_ValueList.Keys<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For i=0 To m_ValueList.Count-1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InstanceValue = Replace(InstanceValue, &quot;{&quot; &amp; keys(i) &amp; &quot;}&quot;, m_ValueList.Item(keys(i)))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next<br />&nbsp;&nbsp;&nbsp; End Function<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; Public Sub parse(ByVal Name, ByVal BlockTag, ByVal Append)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Not m_BlockList.Exists(BlockTag) Then ShowError(&quot;未指定的 块标记&quot; &amp; Parent)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If m_ValueList.Exists(Name) Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Append Then m_ValueList.Item(Name) = m_ValueList.Item(Name) &amp; InstanceValue(BlockTag) _<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else m_ValueList.Item(Name) = InstanceValue(BlockTag)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_ValueList.Add Name, InstanceValue(BlockTag)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br />&nbsp;&nbsp;&nbsp; End Sub<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; Private Function finish(ByVal content)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Select Case m_Unknowns<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case &quot;keep&quot; finish = content<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case &quot;remove&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_RegExp.Pattern = &quot;\{[^ \t\r\n}]+\}&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finish = m_RegExp.Replace(content, &quot;&quot;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case &quot;comment&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_RegExp.Pattern = &quot;\{([^ \t\r\n}]+)\}&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finish = m_RegExp.Replace(content, &quot;&lt;!-- Template Variable $1 undefined --&gt;&quot;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Case Else finish = content<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End Select<br />&nbsp;&nbsp;&nbsp; End Function<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; Public Sub p(ByVal Name)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Not m_ValueList.Exists(Name) Then ShowError(&quot;不存在的标记&quot; &amp; Name)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Write(finish(m_ValueList.Item(Name)))<br />&nbsp;&nbsp;&nbsp; End Sub<br />End Class<br />%&gt;</p><p><strong>3、使用例子</strong><br />　　下面举三个例子进行说明。<br /><font color="#006400">1)简单的值替换</font><br /><font color="#a52a2a">模板文件为myTemple.tpl</font>，内容：<br /><font color="#000066">&lt;html&gt;&lt;title&gt;ASP模板简单替换&lt;/title&gt;&lt;body&gt;<br />祝贺！你赢了一辆{some_color}法拉利！<br />&lt;/body&gt;</font></p><p><font color="#a52a2a">下面是ASP代码</font>（kktTemplate.inc.asp就是上面给出的模板类）：<br />&lt;!--#INCLUDE VIRTUAL=&quot;kktTemplate.inc.asp&quot;--&gt;<br />&lt;%<br />dim my_color, kkt<br />my_color = &quot;红色的&quot;<br />set kkt = new kktTemplate&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;创建模板对象<br />kkt.set_file &quot;hndKktTemp&quot;, &quot;myTemple.tpl&quot; &#39;设置并读取模板文件myTemple.tpl<br />kkt.set_var &quot;some_color&quot;, my_color, false &#39;设置模板变量 some_color = my_color的值<br />kkt.parse &quot;out&quot;, &quot;hndKktTemp&quot;, false&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;模板变量 out = 处理后的文件<br />kkt.p &quot;out&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;输出out的内容<br />set kkt = nothing&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;销毁模板对象<br />%&gt;</p><p><font color="#a52a2a">执行后输出为：<br /></font><font color="#000066">&lt;html&gt;&lt;title&gt;ASP模板简单替换&lt;/title&gt;&lt;body&gt;<br />祝贺！你赢了一辆红色的法拉利！<br />&lt;/body&gt;</font></p><p><br /><font color="#006400">2)循环块演示例子</font><br /><font color="#a52a2a">模板文件myTemple2.tpl：</font><br /><font color="#000066">&lt;html&gt;&lt;title&gt;ASP模板－块的演示&lt;/title&gt;&lt;body&gt;<br />&lt;table cellspacing=&quot;2&quot; border=&quot;1&quot;&gt;&lt;tr&gt;&lt;td&gt;下面的动物您喜欢哪一种&lt;/td&gt;&lt;/tr&gt;<br />&lt;!-- BEGIN AnimalList --&gt;<br />&lt;tr&gt;&lt;td&gt;&lt;input type=&quot;radio&quot; name=&quot;chk&quot;&gt;{animal}&lt;/td&gt;&lt;/tr&gt;<br />&lt;!-- END AnimalList --&gt;<br />&lt;/table&gt;<br />&lt;/body&gt;</font></p><p><font color="#a52a2a">ASP代码：</font><br />&lt;!--#INCLUDE VIRTUAL=&quot;kktTemplate.inc.asp&quot;--&gt;<br />&lt;%<br />dim animal, kkt, i<br />animal = Array(&quot;小猪&quot;,&quot;小狗&quot;,&quot;小强&quot;)<br />set kkt = new kktTemplate<br />kkt.set_file &quot;hndKktTemp&quot;, &quot;myTemple2.tpl&quot;<br />kkt.set_block &quot;hndKktTemp&quot;, &quot;AnimalList&quot;, &quot;list&quot;<br />for i=0 to UBound(animal)<br />&nbsp;&nbsp;&nbsp; kkt.set_var &quot;animal&quot;, animal(i), false<br />&nbsp;&nbsp;&nbsp; kkt.parse &quot;list&quot;, &quot;AnimalList&quot;, true<br />next<br />kkt.parse &quot;out&quot;, &quot;hndKktTemp&quot;, false<br />kkt.p &quot;out&quot;<br />set kkt = nothing<br />%&gt;<br />&nbsp; <br /><font color="#a52a2a">执行结果：</font><br /><font color="#000066">&lt;html&gt;&lt;title&gt;ASP模板－块的演示&lt;/title&gt;&lt;body&gt;<br />&lt;table cellspacing=&quot;2&quot; border=&quot;1&quot;&gt;&lt;tr&gt;&lt;td&gt;下面的动物您喜欢哪一种&lt;/td&gt;&lt;/tr&gt;<br />&lt;tr&gt;&lt;td&gt;&lt;input type=&quot;radio&quot; name=&quot;chk&quot;&gt;小猪&lt;/td&gt;&lt;/tr&gt;<br />&lt;tr&gt;&lt;td&gt;&lt;input type=&quot;radio&quot; name=&quot;chk&quot;&gt;小狗&lt;/td&gt;&lt;/tr&gt;<br />&lt;tr&gt;&lt;td&gt;&lt;input type=&quot;radio&quot; name=&quot;chk&quot;&gt;小强&lt;/td&gt;&lt;/tr&gt;<br />&lt;/table&gt;<br />&lt;/body&gt;</font><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p><p><font color="#006400">3)嵌套块演示</font><br /><font color="#a52a2a">模板文件myTemple3.tpl：</font><br /><font color="#000066">&lt;html&gt;&lt;title&gt;ASP模板－嵌套块演示&lt;/title&gt;<br />&lt;body&gt;&lt;table width=&quot;400&quot; border=&quot;1&quot; bordercolor=&quot;#000000&quot;&gt;<br />&nbsp; &lt;tr&gt;&lt;td&gt;&lt;div align=&quot;center&quot;&gt;{myname}测试&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;<br />&nbsp; &lt;tr&gt;&lt;td&gt;我的动植物园：&lt;/td&gt; &lt;/tr&gt;<br />&lt;!-- BEGIN animalList --&gt;<br />&nbsp; &lt;tr&gt;&lt;td&gt;{animal}&lt;/td&gt;&lt;/tr&gt;<br />&nbsp; &lt;!-- BEGIN plantList --&gt;<br />&nbsp;&nbsp;&nbsp; &lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;{plant}&lt;/td&gt;&lt;/tr&gt;<br />&nbsp; &lt;!-- END plantList --&gt;<br />&lt;!-- END animalList --&gt;<br />&lt;/table&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</font></p><p><font color="#a52a2a">ASP代码：</font><br />&lt;!--#INCLUDE VIRTUAL=&quot;kktTemplate.inc.asp&quot;--&gt;<br />&lt;%<br />dim my_color, kkt, myname, animal, plant<br />set kkt = new kktTemplate <br />myname = &quot;kktTemplate block test...&quot;<br />animal = array(&quot;动物&quot;, &quot;植物&quot;)<br />plant&nbsp; = array(array(&quot;小猪&quot;,&quot;小白&quot;,&quot;小强&quot;), array(&quot;玫瑰&quot;,&quot;向日葵&quot;))</p><p>kkt.set_file &quot;hndKktTemp&quot;, &quot;myTemple3.tpl&quot;<br />kkt.set_var &quot;myname&quot;, myname, false<br />kkt.set_block &quot;hndKktTemp&quot;, &quot;animalList&quot;, &quot;a&quot;<br />kkt.set_block &quot;animalList&quot;, &quot;plantList&quot;, &quot;p&quot;</p><p>for i=0 to UBound(animal)<br />&nbsp;&nbsp; kkt.set_var &quot;animal&quot;, animal(i), False<br />&nbsp;&nbsp; kkt.unset_var &quot;p&quot;&nbsp; <br />&nbsp;&nbsp; &#39;kkt.set_var &quot;p&quot;, &quot;&quot;, false<br />&nbsp;&nbsp; for j=0 to UBound(plant(i))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; kkt.set_var &quot;plant&quot;, plant(i)(j), false<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; kkt.parse &quot;p&quot;, &quot;plantList&quot;, true<br />&nbsp;&nbsp; next<br />&nbsp;&nbsp; kkt.parse &quot;a&quot;, &quot;animalList&quot;, true<br />next<br />kkt.parse &quot;out&quot;, &quot;hndKktTemp&quot;, false<br />kkt.p &quot;out&quot;<br />%&gt;</p><p><font color="#a52a2a">执行结果：</font><br /><font color="#000066">&lt;html&gt;&lt;title&gt;ASP模板－嵌套块演示&lt;/title&gt;<br />&lt;body&gt;&lt;table width=&quot;400&quot; border=&quot;1&quot; bordercolor=&quot;#000000&quot;&gt;<br />&nbsp; &lt;tr&gt;&lt;td&gt;&lt;div align=&quot;center&quot;&gt;kktTemplate block test...测试&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;<br />&nbsp; &lt;tr&gt;&lt;td&gt;我的动植物园：&lt;/td&gt; &lt;/tr&gt;<br />&nbsp; &lt;tr&gt;&lt;td&gt;动物&lt;/td&gt;&lt;/tr&gt;<br />&nbsp;&nbsp;&nbsp; &lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;小猪&lt;/td&gt;&lt;/tr&gt;<br />&nbsp;&nbsp;&nbsp; &lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;小白&lt;/td&gt;&lt;/tr&gt;<br />&nbsp;&nbsp;&nbsp; &lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;小强&lt;/td&gt;&lt;/tr&gt;<br />&nbsp; &lt;tr&gt;&lt;td&gt;植物&lt;/td&gt;&lt;/tr&gt;<br />&nbsp;&nbsp;&nbsp; &lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;玫瑰&lt;/td&gt;&lt;/tr&gt;<br />&nbsp;&nbsp;&nbsp; &lt;tr&gt;&lt;td&gt;&amp;nbsp;&amp;nbsp;向日葵&lt;/td&gt;&lt;/tr&gt;<br />&lt;/table&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</font></p><p><br /><strong>4、小结<br /></strong>　　本文主要介绍了基于ASP利用模板类实现代码与页面分离的方法，当然还有其它更好的解决方案。本文旨在抛砖引玉各位读者、WEB开发参与进来，多提宝贵意见，多作交流，共同进步！</p>]]></description><category>ASP技术</category><comments>http://blog.hnce.net/post/169.html#comment</comments><wfw:comment>http://blog.hnce.net/</wfw:comment><wfw:commentRss>http://blog.hnce.net/feed.asp?cmt=169</wfw:commentRss><trackback:ping>http://blog.hnce.net/cmd.asp?act=tb&amp;id=169&amp;key=3507ee2e</trackback:ping></item><item><title>取得汉字字符串的首字母串</title><author>a@b.com (slick)</author><link>http://blog.hnce.net/post/168.html</link><pubDate>Sun, 20 Nov 2005 12:07:00 +0800</pubDate><guid>http://blog.hnce.net/post/168.html</guid><description><![CDATA[<p>此功能一般用来生成姓名的首字母简写，比如说我今天下午写程序的时候就要用，对于国标码的很简单，因为其ANSII编码是按汉字拼音首字母顺序排列的，只要查出汉字的ANSII值，再对比一下范围就可以了。但是问题是，我用的是UTF-8编码，而UNICODE的汉字编码毫无规则可言，这可愁坏人了，如果用中文的操作系统的话，装了MSSQL，可以从MSSQL的系统表里把这个对应关系select 出来，但是我现在用AC数据库，犯不着去为了查个字母就动MSSQL，所以最需要的还是一张UNICODE的汉字编码对照表。<br /><br />UNICODE汉字共收录了20901个，编码从19968到40869，下面是unicode版的函数，要注意的是查看汉字的UNICODE码在ASP里要用ascW()函数。其实，只要有了下面那张对照表，不管是什么语言，像asp,php,coldfusion,jsp,c#等都可能轻儿易举地查出汉字的拼音首字母了。<br />&lt;%<br /><br />&#39;//获得UNICODE单个汉字的首字母<br />&#39;Unicode共收录20901个汉字,编码从19968到40869<br />&#39;在ASP里,取汉字的UNICODE码要用ascW()函数来取<br />&#39;相反,用chrW来反解码,搞了下午才搞到这个对照表<br />function GetPy4utf(char)<br />if char=null or len(trim(char))=0 then exit function<br />dim strCHSfirstPY<br />strCHSfirstPY =&quot;YDYQSXMWZSSXJBYMGCCZQPSSQBYCDSCDQLDYLYBSSJGYZZJJFKCCLZDHWDWZJLJPFYYNWJJTMYHZWZHFLZPPQHGSCYYYNJQYXXGJ&quot;_<br />&amp;&quot;HHSDSJNKKTMOMLCRXYPSNQSECCQZGGLLYJLMYZZSECYKYYHQWJSSGGYXYZYJWWKDJHYCHMYXJTLXJYQBYXZLDWRDJRWYSRLDZJPC&quot;_<br />&amp;&quot;BZJJBRCFTLECZSTZFXXZHTRQHYBDLYCZSSYMMRFMYQZPWWJJYFCRWFDFZQPYDDWYXKYJAWJFFXYPSFTZYHHYZYSWCJYXSCLCXXWZ&quot;_<br />&amp;&quot;ZXNBGNNXBXLZSZSBSGPYSYZDHMDZBQBZCWDZZYYTZHBTSYYBZGNTNXQYWQSKBPHHLXGYBFMJEBJHHGQTJCYSXSTKZHLYCKGLYSMZ&quot;_<br />&amp;&quot;XYALMELDCCXGZYRJXSDLTYZCQKCNNJWHJTZZCQLJSTSTBNXBTYXCEQXGKWJYFLZQLYHYXSPSFXLMPBYSXXXYDJCZYLLLSJXFHJXP&quot;_<br />&amp;&quot;JBTFFYABYXBHZZBJYZLWLCZGGBTSSMDTJZXPTHYQTGLJSCQFZKJZJQNLZWLSLHDZBWJNCJZYZSQQYCQYRZCJJWYBRTWPYFTWEXCS&quot;_<br />&amp;&quot;KDZCTBZHYZZYYJXZCFFZZMJYXXSDZZOTTBZLQWFCKSZSXFYRLNYJMBDTHJXSQQCCSBXYYTSYFBXDZTGBCNSLCYZZPSAZYZZSCJCS&quot;_<br />&amp;&quot;HZQYDXLBPJLLMQXTYDZXSQJTZPXLCGLQTZWJBHCTSYJSFXYEJJTLBGXSXJMYJQQPFZASYJNTYDJXKJCDJSZCBARTDCLYJQMWNQNC&quot;_<br />&amp;&quot;LLLKBYBZZSYHQQLTWLCCXTXLLZNTYLNEWYZYXCZXXGRKRMTCNDNJTSYYSSDQDGHSDBJGHRWRQLYBGLXHLGTGXBQJDZPYJSJYJCTM&quot;_<br />&amp;&quot;RNYMGRZJCZGJMZMGXMPRYXKJNYMSGMZJYMKMFXMLDTGFBHCJHKYLPFMDXLQJJSMTQGZSJLQDLDGJYCALCMZCSDJLLNXDJFFFFJCZ&quot;_<br />&amp;&quot;FMZFFPFKHKGDPSXKTACJDHHZDDCRRCFQYJKQCCWJDXHWJLYLLZGCFCQDSMLZPBJJPLSBCJGGDCKKDEZSQCCKJGCGKDJTJDLZYCXK&quot;_<br />&amp;&quot;LQSCGJCLTFPCQCZGWPJDQYZJJBYJHSJDZWGFSJGZKQCCZLLPSPKJGQJHZZLJPLGJGJJTHJJYJZCZMLZLYQBGJWMLJKXZDZNJQSYZ&quot;_<br />&amp;&quot;MLJLLJKYWXMKJLHSKJGBMCLYYMKXJQLBMLLKMDXXKWYXYSLMLPSJQQJQXYXFJTJDXMXXLLCXQBSYJBGWYMBGGBCYXPJYGPEPFGDJ&quot;_<br />&amp;&quot;GBHBNSQJYZJKJKHXQFGQZKFHYGKHDKLLSDJQXPQYKYBNQSXQNSZSWHBSXWHXWBZZXDMNSJBSBKBBZKLYLXGWXDRWYQZMYWSJQLCJ&quot;_<br />&amp;&quot;XXJXKJEQXSCYETLZHLYYYSDZPAQYZCMTLSHTZCFYZYXYLJSDCJQAGYSLCQLYYYSHMRQQKLDXZSCSSSYDYCJYSFSJBFRSSZQSBXXP&quot;_<br />&amp;&quot;XJYSDRCKGJLGDKZJZBDKTCSYQPYHSTCLDJDHMXMCGXYZHJDDTMHLTXZXYLYMOHYJCLTYFBQQXPFBDFHHTKSQHZYYWCNXXCRWHOWG&quot;_<br />&amp;&quot;YJLEGWDQCWGFJYCSNTMYTOLBYGWQWESJPWNMLRYDZSZTXYQPZGCWXHNGPYXSHMYQJXZTDPPBFYHZHTJYFDZWKGKZBLDNTSXHQEEG&quot;_<br />&amp;&quot;ZZYLZMMZYJZGXZXKHKSTXNXXWYLYAPSTHXDWHZYMPXAGKYDXBHNHXKDPJNMYHYLPMGOCSLNZHKXXLPZZLBMLSFBHHGYGYYGGBHSC&quot;_<br />&amp;&quot;YAQTYWLXTZQCEZYDQDQMMHTKLLSZHLSJZWFYHQSWSCWLQAZYNYTLSXTHAZNKZZSZZLAXXZWWCTGQQTDDYZTCCHYQZFLXPSLZYGPZ&quot;_<br />&amp;&quot;SZNGLNDQTBDLXGTCTAJDKYWNSYZLJHHZZCWNYYZYWMHYCHHYXHJKZWSXHZYXLYSKQYSPSLYZWMYPPKBYGLKZHTYXAXQSYSHXASMC&quot;_<br />&amp;&quot;HKDSCRSWJPWXSGZJLWWSCHSJHSQNHCSEGNDAQTBAALZZMSSTDQJCJKTSCJAXPLGGXHHGXXZCXPDMMHLDGTYBYSJMXHMRCPXXJZCK&quot;_<br />&amp;&quot;ZXSHMLQXXTTHXWZFKHCCZDYTCJYXQHLXDHYPJQXYLSYYDZOZJNYXQEZYSQYAYXWYPDGXDDXSPPYZNDLTWRHXYDXZZJHTCXMCZLHP&quot;_<br />&amp;&quot;YYYYMHZLLHNXMYLLLMDCPPXHMXDKYCYRDLTXJCHHZZXZLCCLYLNZSHZJZZLNNRLWHYQSNJHXYNTTTKYJPYCHHYEGKCTTWLGQRLGG&quot;_<br />&amp;&quot;TGTYGYHPYHYLQYQGCWYQKPYYYTTTTLHYHLLTYTTSPLKYZXGZWGPYDSSZZDQXSKCQNMJJZZBXYQMJRTFFBTKHZKBXLJJKDXJTLBWF&quot;_<br />&amp;&quot;ZPPTKQTZTGPDGNTPJYFALQMKGXBDCLZFHZCLLLLADPMXDJHLCCLGYHDZFGYDDGCYYFGYDXKSSEBDHYKDKDKHNAXXYBPBYYHXZQGA&quot;_<br />&amp;&quot;FFQYJXDMLJCSQZLLPCHBSXGJYNDYBYQSPZWJLZKSDDTACTBXZDYZYPJZQSJNKKTKNJDJGYYPGTLFYQKASDNTCYHBLWDZHBBYDWJR&quot;_<br />&amp;&quot;YGKZYHEYYFJMSDTYFZJJHGCXPLXHLDWXXJKYTCYKSSSMTWCTTQZLPBSZDZWZXGZAGYKTYWXLHLSPBCLLOQMMZSSLCMBJCSZZKYDC&quot;_<br />&amp;&quot;ZJGQQDSMCYTZQQLWZQZXSSFPTTFQMDDZDSHDTDWFHTDYZJYQJQKYPBDJYYXTLJHDRQXXXHAYDHRJLKLYTWHLLRLLRCXYLBWSRSZZ&quot;_<br />&amp;&quot;SYMKZZHHKYHXKSMDSYDYCJPBZBSQLFCXXXNXKXWYWSDZYQOGGQMMYHCDZTTFJYYBGSTTTYBYKJDHKYXBELHTYPJQNFXFDYKZHQKZ&quot;_<br />&amp;&quot;BYJTZBXHFDXKDASWTAWAJLDYJSFHBLDNNTNQJTJNCHXFJSRFWHZFMDRYJYJWZPDJKZYJYMPCYZNYNXFBYTFYFWYGDBNZZZDNYTXZ&quot;_<br />&amp;&quot;EMMQBSQEHXFZMBMFLZZSRXYMJGSXWZJSPRYDJSJGXHJJGLJJYNZZJXHGXKYMLPYYYCXYTWQZSWHWLYRJLPXSLSXMFSWWKLCTNXNY&quot;_<br />&amp;&quot;NPSJSZHDZEPTXMYYWXYYSYWLXJQZQXZDCLEEELMCPJPCLWBXSQHFWWTFFJTNQJHJQDXHWLBYZNFJLALKYYJLDXHHYCSTYYWNRJYX&quot;_<br />&amp;&quot;YWTRMDRQHWQCMFJDYZMHMYYXJWMYZQZXTLMRSPWWCHAQBXYGZYPXYYRRCLMPYMGKSJSZYSRMYJSNXTPLNBAPPYPYLXYYZKYNLDZY&quot;_<br />&amp;&quot;JZCZNNLMZHHARQMPGWQTZMXXMLLHGDZXYHXKYXYCJMFFYYHJFSBSSQLXXNDYCANNMTCJCYPRRNYTYQNYYMBMSXNDLYLYSLJRLXYS&quot;_<br />&amp;&quot;XQMLLYZLZJJJKYZZCSFBZXXMSTBJGNXYZHLXNMCWSCYZYFZLXBRNNNYLBNRTGZQYSATSWRYHYJZMZDHZGZDWYBSSCSKXSYHYTXXG&quot;_<br />&amp;&quot;CQGXZZSHYXJSCRHMKKBXCZJYJYMKQHZJFNBHMQHYSNJNZYBKNQMCLGQHWLZNZSWXKHLJHYYBQLBFCDSXDLDSPFZPSKJYZWZXZDDX&quot;_<br />&amp;&quot;JSMMEGJSCSSMGCLXXKYYYLNYPWWWGYDKZJGGGZGGSYCKNJWNJPCXBJJTQTJWDSSPJXZXNZXUMELPXFSXTLLXCLJXJJLJZXCTPSWX&quot;_<br />&amp;&quot;LYDHLYQRWHSYCSQYYBYAYWJJJQFWQCQQCJQGXALDBZZYJGKGXPLTZYFXJLTPADKYQHPMATLCPDCKBMTXYBHKLENXDLEEGQDYMSAW&quot;_<br />&amp;&quot;HZMLJTWYGXLYQZLJEEYYBQQFFNLYXRDSCTGJGXYYNKLLYQKCCTLHJLQMKKZGCYYGLLLJDZGYDHZWXPYSJBZKDZGYZZHYWYFQYTYZ&quot;_<br />&amp;&quot;SZYEZZLYMHJJHTSMQWYZLKYYWZCSRKQYTLTDXWCTYJKLWSQZWBDCQYNCJSRSZJLKCDCDTLZZZACQQZZDDXYPLXZBQJYLZLLLQDDZ&quot;_<br />&amp;&quot;QJYJYJZYXNYYYNYJXKXDAZWYRDLJYYYRJLXLLDYXJCYWYWNQCCLDDNYYYNYCKCZHXXCCLGZQJGKWPPCQQJYSBZZXYJSQPXJPZBSB&quot;_<br />&amp;&quot;DSFNSFPZXHDWZTDWPPTFLZZBZDMYYPQJRSDZSQZSQXBDGCPZSWDWCSQZGMDHZXMWWFYBPDGPHTMJTHZSMMBGZMBZJCFZWFZBBZMQ&quot;_<br />&amp;&quot;CFMBDMCJXLGPNJBBXGYHYYJGPTZGZMQBQTCGYXJXLWZKYDPDYMGCFTPFXYZTZXDZXTGKMTYBBCLBJASKYTSSQYYMSZXFJEWLXLLS&quot;_<br />&amp;&quot;ZBQJJJAKLYLXLYCCTSXMCWFKKKBSXLLLLJYXTYLTJYYTDPJHNHNNKBYQNFQYYZBYYESSESSGDYHFHWTCJBSDZZTFDMXHCNJZYMQW&quot;_<br />&amp;&quot;SRYJDZJQPDQBBSTJGGFBKJBXTGQHNGWJXJGDLLTHZHHYYYYYYSXWTYYYCCBDBPYPZYCCZYJPZYWCBDLFWZCWJDXXHYHLHWZZXJTC&quot;_<br />&amp;&quot;ZLCDPXUJCZZZLYXJJTXPHFXWPYWXZPTDZZBDZCYHJHMLXBQXSBYLRDTGJRRCTTTHYTCZWMXFYTWWZCWJWXJYWCSKYBZSCCTZQNHX&quot;_<br />&amp;&quot;NWXXKHKFHTSWOCCJYBCMPZZYKBNNZPBZHHZDLSYDDYTYFJPXYNGFXBYQXCBHXCPSXTYZDMKYSNXSXLHKMZXLYHDHKWHXXSSKQYHH&quot;_<br />&amp;&quot;CJYXGLHZXCSNHEKDTGZXQYPKDHEXTYKCNYMYYYPKQYYYKXZLTHJQTBYQHXBMYHSQCKWWYLLHCYYLNNEQXQWMCFBDCCMLJGGXDQKT&quot;_<br />&amp;&quot;LXKGNQCDGZJWYJJLYHHQTTTNWCHMXCXWHWSZJYDJCCDBQCDGDNYXZTHCQRXCBHZTQCBXWGQWYYBXHMBYMYQTYEXMQKYAQYRGYZSL&quot;_<br />&amp;&quot;FYKKQHYSSQYSHJGJCNXKZYCXSBXYXHYYLSTYCXQTHYSMGSCPMMGCCCCCMTZTASMGQZJHKLOSQYLSWTMXSYQKDZLJQQYPLSYCZTCQ&quot;_<br />&amp;&quot;QPBBQJZCLPKHQZYYXXDTDDTSJCXFFLLCHQXMJLWCJCXTSPYCXNDTJSHJWXDQQJSKXYAMYLSJHMLALYKXCYYDMNMDQMXMCZNNCYBZ&quot;_<br />&amp;&quot;KKYFLMCHCMLHXRCJJHSYLNMTJZGZGYWJXSRXCWJGJQHQZDQJDCJJZKJKGDZQGJJYJYLXZXXCDQHHHEYTMHLFSBDJSYYSHFYSTCZQ&quot;_<br />&amp;&quot;LPBDRFRZTZYKYWHSZYQKWDQZRKMSYNBCRXQBJYFAZPZZEDZCJYWBCJWHYJBQSZYWRYSZPTDKZPFPBNZTKLQYHBBZPNPPTYZZYBQN&quot;_<br />&amp;&quot;YDCPJMMCYCQMCYFZZDCMNLFPBPLNGQJTBTTNJZPZBBZNJKLJQYLNBZQHKSJZNGGQSZZKYXSHPZSNBCGZKDDZQANZHJKDRTLZLSWJ&quot;_<br />&amp;&quot;LJZLYWTJNDJZJHXYAYNCBGTZCSSQMNJPJYTYSWXZFKWJQTKHTZPLBHSNJZSYZBWZZZZLSYLSBJHDWWQPSLMMFBJDWAQYZTCJTBNN&quot;_<br />&amp;&quot;WZXQXCDSLQGDSDPDZHJTQQPSWLYYJZLGYXYZLCTCBJTKTYCZJTQKBSJLGMGZDMCSGPYNJZYQYYKNXRPWSZXMTNCSZZYXYBYHYZAX&quot;_<br />&amp;&quot;YWQCJTLLCKJJTJHGDXDXYQYZZBYWDLWQCGLZGJGQRQZCZSSBCRPCSKYDZNXJSQGXSSJMYDNSTZTPBDLTKZWXQWQTZEXNQCZGWEZK&quot;_<br />&amp;&quot;SSBYBRTSSSLCCGBPSZQSZLCCGLLLZXHZQTHCZMQGYZQZNMCOCSZJMMZSQPJYGQLJYJPPLDXRGZYXCCSXHSHGTZNLZWZKJCXTCFCJ&quot;_<br />&amp;&quot;XLBMQBCZZWPQDNHXLJCTHYZLGYLNLSZZPCXDSCQQHJQKSXZPBAJYEMSMJTZDXLCJYRYYNWJBNGZZTMJXLTBSLYRZPYLSSCNXPHLL&quot;_<br />&amp;&quot;HYLLQQZQLXYMRSYCXZLMMCZLTZSDWTJJLLNZGGQXPFSKYGYGHBFZPDKMWGHCXMSGDXJMCJZDYCABXJDLNBCDQYGSKYDQTXDJJYXM&quot;_<br />&amp;&quot;SZQAZDZFSLQXYJSJZYLBTXXWXQQZBJZUFBBLYLWDSLJHXJYZJWTDJCZFQZQZZDZSXZZQLZCDZFJHYSPYMPQZMLPPLFFXJJNZZYLS&quot;_<br />&amp;&quot;JEYQZFPFZKSYWJJJHRDJZZXTXXGLGHYDXCSKYSWMMZCWYBAZBJKSHFHJCXMHFQHYXXYZFTSJYZFXYXPZLCHMZMBXHZZSXYFYMNCW&quot;_<br />&amp;&quot;DABAZLXKTCSHHXKXJJZJSTHYGXSXYYHHHJWXKZXSSBZZWHHHCWTZZZPJXSNXQQJGZYZYWLLCWXZFXXYXYHXMKYYSWSQMNLNAYCYS&quot;_<br />&amp;&quot;PMJKHWCQHYLAJJMZXHMMCNZHBHXCLXTJPLTXYJHDYYLTTXFSZHYXXSJBJYAYRSMXYPLCKDUYHLXRLNLLSTYZYYQYGYHHSCCSMZCT&quot;_<br />&amp;&quot;ZQXKYQFPYYRPFFLKQUNTSZLLZMWWTCQQYZWTLLMLMPWMBZSSTZRBPDDTLQJJBXZCSRZQQYGWCSXFWZLXCCRSZDZMCYGGDZQSGTJS&quot;_<br />&amp;&quot;WLJMYMMZYHFBJDGYXCCPSHXNZCSBSJYJGJMPPWAFFYFNXHYZXZYLREMZGZCYZSSZDLLJCSQFNXZKPTXZGXJJGFMYYYSNBTYLBNLH&quot;_<br />&amp;&quot;PFZDCYFBMGQRRSSSZXYSGTZRNYDZZCDGPJAFJFZKNZBLCZSZPSGCYCJSZLMLRSZBZZLDLSLLYSXSQZQLYXZLSKKBRXBRBZCYCXZZ&quot;_<br />&amp;&quot;ZEEYFGKLZLYYHGZSGZLFJHGTGWKRAAJYZKZQTSSHJJXDCYZUYJLZYRZDQQHGJZXSSZBYKJPBFRTJXLLFQWJHYLQTYMBLPZDXTZYG&quot;_<br />&amp;&quot;BDHZZRBGXHWNJTJXLKSCFSMWLSDQYSJTXKZSCFWJLBXFTZLLJZLLQBLSQMQQCGCZFPBPHZCZJLPYYGGDTGWDCFCZQYYYQYSSCLXZ&quot;_<br />&amp;&quot;SKLZZZGFFCQNWGLHQYZJJCZLQZZYJPJZZBPDCCMHJGXDQDGDLZQMFGPSYTSDYFWWDJZJYSXYYCZCYHZWPBYKXRYLYBHKJKSFXTZJ&quot;_<br />&amp;&quot;MMCKHLLTNYYMSYXYZPYJQYCSYCWMTJJKQYRHLLQXPSGTLYYCLJSCPXJYZFNMLRGJJTYZBXYZMSJYJHHFZQMSYXRSZCWTLRTQZSST&quot;_<br />&amp;&quot;KXGQKGSPTGCZNJSJCQCXHMXGGZTQYDJKZDLBZSXJLHYQGGGTHQSZPYHJHHGYYGKGGCWJZZYLCZLXQSFTGZSLLLMLJSKCTBLLZZSZ&quot;_<br />&amp;&quot;MMNYTPZSXQHJCJYQXYZXZQZCPSHKZZYSXCDFGMWQRLLQXRFZTLYSTCTMJCXJJXHJNXTNRZTZFQYHQGLLGCXSZSJDJLJCYDSJTLNY&quot;_<br />&amp;&quot;XHSZXCGJZYQPYLFHDJSBPCCZHJJJQZJQDYBSSLLCMYTTMQTBHJQNNYGKYRQYQMZGCJKPDCGMYZHQLLSLLCLMHOLZGDYYFZSLJCQZ&quot;_<br />&amp;&quot;LYLZQJESHNYLLJXGJXLYSYYYXNBZLJSSZCQQCJYLLZLTJYLLZLLBNYLGQCHXYYXOXCXQKYJXXXYKLXSXXYQXCYKQXQCSGYXXYQXY&quot;_<br />&amp;&quot;GYTQOHXHXPYXXXULCYEYCHZZCBWQBBWJQZSCSZSSLZYLKDESJZWMYMCYTSDSXXSCJPQQSQYLYYZYCMDJDZYWCBTJSYDJKCYDDJLB&quot;_<br />&amp;&quot;DJJSODZYSYXQQYXDHHGQQYQHDYXWGMMMAJDYBBBPPBCMUUPLJZSMTXERXJMHQNUTPJDCBSSMSSSTKJTSSMMTRCPLZSZMLQDSDMJM&quot;_<br />&amp;&quot;QPNQDXCFYNBFSDQXYXHYAYKQYDDLQYYYSSZBYDSLNTFQTZQPZMCHDHCZCWFDXTMYQSPHQYYXSRGJCWTJTZZQMGWJJTJHTQJBBHWZ&quot;_<br />&amp;&quot;PXXHYQFXXQYWYYHYSCDYDHHQMNMTMWCPBSZPPZZGLMZFOLLCFWHMMSJZTTDHZZYFFYTZZGZYSKYJXQYJZQBHMBZZLYGHGFMSHPZF&quot;_<br />&amp;&quot;ZSNCLPBQSNJXZSLXXFPMTYJYGBXLLDLXPZJYZJYHHZCYWHJYLSJEXFSZZYWXKZJLUYDTMLYMQJPWXYHXSKTQJEZRPXXZHHMHWQPW&quot;_<br />&amp;&quot;QLYJJQJJZSZCPHJLCHHNXJLQWZJHBMZYXBDHHYPZLHLHLGFWLCHYYTLHJXCJMSCPXSTKPNHQXSRTYXXTESYJCTLSSLSTDLLLWWYH&quot;_<br />&amp;&quot;DHRJZSFGXTSYCZYNYHTDHWJSLHTZDQDJZXXQHGYLTZPHCSQFCLNJTCLZPFSTPDYNYLGMJLLYCQHYSSHCHYLHQYQTMZYPBYWRFQYK&quot;_<br />&amp;&quot;QSYSLZDQJMPXYYSSRHZJNYWTQDFZBWWTWWRXCWHGYHXMKMYYYQMSMZHNGCEPMLQQMTCWCTMMPXJPJJHFXYYZSXZHTYBMSTSYJTTQ&quot;_<br />&amp;&quot;QQYYLHYNPYQZLCYZHZWSMYLKFJXLWGXYPJYTYSYXYMZCKTTWLKSMZSYLMPWLZWXWQZSSAQSYXYRHSSNTSRAPXCPWCMGDXHXZDZYF&quot;_<br />&amp;&quot;JHGZTTSBJHGYZSZYSMYCLLLXBTYXHBBZJKSSDMALXHYCFYGMQYPJYCQXJLLLJGSLZGQLYCJCCZOTYXMTMTTLLWTGPXYMZMKLPSZZ&quot;_<br />&amp;&quot;ZXHKQYSXCTYJZYHXSHYXZKXLZWPSQPYHJWPJPWXQQYLXSDHMRSLZZYZWTTCYXYSZZSHBSCCSTPLWSSCJCHNLCGCHSSPHYLHFHHXJ&quot;_<br />&amp;&quot;SXYLLNYLSZDHZXYLSXLWZYKCLDYAXZCMDDYSPJTQJZLNWQPSSSWCTSTSZLBLNXSMNYYMJQBQHRZWTYYDCHQLXKPZWBGQYBKFCMZW&quot;_<br />&amp;&quot;PZLLYYLSZYDWHXPSBCMLJBSCGBHXLQHYRLJXYSWXWXZSLDFHLSLYNJLZYFLYJYCDRJLFSYZFSLLCQYQFGJYHYXZLYLMSTDJCYHBZ&quot;_<br />&amp;&quot;LLNWLXXYGYYHSMGDHXXHHLZZJZXCZZZCYQZFNGWPYLCPKPYYPMCLQKDGXZGGWQBDXZZKZFBXXLZXJTPJPTTBYTSZZDWSLCHZHSLT&quot;_<br />&amp;&quot;YXHQLHYXXXYYZYSWTXZKHLXZXZPYHGCHKCFSYHUTJRLXFJXPTZTWHPLYXFCRHXSHXKYXXYHZQDXQWULHYHMJTBFLKHTXCWHJFWJC&quot;_<br />&amp;&quot;FPQRYQXCYYYQYGRPYWSGSUNGWCHKZDXYFLXXHJJBYZWTSXXNCYJJYMSWZJQRMHXZWFQSYLZJZGBHYNSLBGTTCSYBYXXWXYHXYYXN&quot;_<br />&amp;&quot;SQYXMQYWRGYQLXBBZLJSYLPSYTJZYHYZAWLRORJMKSCZJXXXYXCHDYXRYXXJDTSQFXLYLTSFFYXLMTYJMJUYYYXLTZCSXQZQHZXL&quot;_<br />&amp;&quot;YYXZHDNBRXXXJCTYHLBRLMBRLLAXKYLLLJLYXXLYCRYLCJTGJCMTLZLLCYZZPZPCYAWHJJFYBDYYZSMPCKZDQYQPBPCJPDCYZMDP&quot;_<br />&amp;&quot;BCYYDYCNNPLMTMLRMFMMGWYZBSJGYGSMZQQQZTXMKQWGXLLPJGZBQCDJJJFPKJKCXBLJMSWMDTQJXLDLPPBXCWRCQFBFQJCZAHZG&quot;_<br />&amp;&quot;MYKPHYYHZYKNDKZMBPJYXPXYHLFPNYYGXJDBKXNXHJMZJXSTRSTLDXSKZYSYBZXJLXYSLBZYSLHXJPFXPQNBYLLJQKYGZMCYZZYM&quot;_<br />&amp;&quot;CCSLCLHZFWFWYXZMWSXTYNXJHPYYMCYSPMHYSMYDYSHQYZCHMJJMZCAAGCFJBBHPLYZYLXXSDJGXDHKXXTXXNBHRMLYJSLTXMRHN&quot;_<br />&amp;&quot;LXQJXYZLLYSWQGDLBJHDCGJYQYCMHWFMJYBMBYJYJWYMDPWHXQLDYGPDFXXBCGJSPCKRSSYZJMSLBZZJFLJJJLGXZGYXYXLSZQYX&quot;_<br />&amp;&quot;BEXYXHGCXBPLDYHWETTWWCJMBTXCHXYQXLLXFLYXLLJLSSFWDPZSMYJCLMWYTCZPCHQEKCQBWLCQYDPLQPPQZQFJQDJHYMMCXTXD&quot;_<br />&amp;&quot;RMJWRHXCJZYLQXDYYNHYYHRSLSRSYWWZJYMTLTLLGTQCJZYABTCKZCJYCCQLJZQXALMZYHYWLWDXZXQDLLQSHGPJFJLJHJABCQZD&quot;_<br />&amp;&quot;JGTKHSSTCYJLPSWZLXZXRWGLDLZRLZXTGSLLLLZLYXXWGDZYGBDPHZPBRLWSXQBPFDWOFMWHLYPCBJCCLDMBZPBZZLCYQXLDOMZB&quot;_<br />&amp;&quot;LZWPDWYYGDSTTHCSQSCCRSSSYSLFYBFNTYJSZDFNDPDHDZZMBBLSLCMYFFGTJJQWFTMTPJWFNLBZCMMJTGBDZLQLPYFHYYMJYLSD&quot;_<br />&amp;&quot;CHDZJWJCCTLJCLDTLJJCPDDSQDSSZYBNDBJLGGJZXSXNLYCYBJXQYCBYLZCFZPPGKCXZDZFZTJJFJSJXZBNZYJQTTYJYHTYCZHYM&quot;_<br />&amp;&quot;DJXTTMPXSPLZCDWSLSHXYPZGTFMLCJTYCBPMGDKWYCYZCDSZZYHFLYCTYGWHKJYYLSJCXGYWJCBLLCSNDDBTZBSCLYZCZZSSQDLL&quot;_<br />&amp;&quot;MQYYHFSLQLLXFTYHABXGWNYWYYPLLSDLDLLBJCYXJZMLHLJDXYYQYTDLLLBUGBFDFBBQJZZMDPJHGCLGMJJPGAEHHBWCQXAXHHHZ&quot;_<br />&amp;&quot;CHXYPHJAXHLPHJPGPZJQCQZGJJZZUZDMQYYBZZPHYHYBWHAZYJHYKFGDPFQSDLZMLJXKXGALXZDAGLMDGXMWZQYXXDXXPFDMMSSY&quot;_<br />&amp;&quot;MPFMDMMKXKSYZYSHDZKXSYSMMZZZMSYDNZZCZXFPLSTMZDNMXCKJMZTYYMZMZZMSXHHDCZJEMXXKLJSTLWLSQLYJZLLZJSSDPPMH&quot;_<br />&amp;&quot;NLZJCZYHMXXHGZCJMDHXTKGRMXFWMCGMWKDTKSXQMMMFZZYDKMSCLCMPCGMHSPXQPZDSSLCXKYXTWLWJYAHZJGZQMCSNXYYMMPML&quot;_<br />&amp;&quot;KJXMHLMLQMXCTKZMJQYSZJSYSZHSYJZJCDAJZYBSDQJZGWZQQXFKDMSDJLFWEHKZQKJPEYPZYSZCDWYJFFMZZYLTTDZZEFMZLBNP&quot;_<br />&amp;&quot;PLPLPEPSZALLTYLKCKQZKGENQLWAGYXYDPXLHSXQQWQCQXQCLHYXXMLYCCWLYMQYSKGCHLCJNSZKPYZKCQZQLJPDMDZHLASXLBYD&quot;_<br />&amp;&quot;WQLWDNBQCRYDDZTJYBKBWSZDXDTNPJDTCTQDFXQQMGNXECLTTBKPWSLCTYQLPWYZZKLPYGZCQQPLLKCCYLPQMZCZQCLJSLQZDJXL&quot;_<br />&amp;&quot;DDHPZQDLJJXZQDXYZQKZLJCYQDYJPPYPQYKJYRMPCBYMCXKLLZLLFQPYLLLMBSGLCYSSLRSYSQTMXYXZQZFDZUYSYZTFFMZZSMZQ&quot;_<br />&amp;&quot;HZSSCCMLYXWTPZGXZJGZGSJSGKDDHTQGGZLLBJDZLCBCHYXYZHZFYWXYZYMSDBZZYJGTSMTFXQYXQSTDGSLNXDLRYZZLRYYLXQHT&quot;_<br />&amp;&quot;XSRTZNGZXBNQQZFMYKMZJBZYMKBPNLYZPBLMCNQYZZZSJZHJCTZKHYZZJRDYZHNPXGLFZTLKGJTCTSSYLLGZRZBBQZZKLPKLCZYS&quot;_<br />&amp;&quot;SUYXBJFPNJZZXCDWXZYJXZZDJJKGGRSRJKMSMZJLSJYWQSKYHQJSXPJZZZLSNSHRNYPZTWCHKLPSRZLZXYJQXQKYSJYCZTLQZYBB&quot;_<br />&amp;&quot;YBWZPQDWWYZCYTJCJXCKCWDKKZXSGKDZXWWYYJQYYTCYTDLLXWKCZKKLCCLZCQQDZLQLCSFQCHQHSFSMQZZLNBJJZBSJHTSZDYSJ&quot;_<br />&amp;&quot;QJPDLZCDCWJKJZZLPYCGMZWDJJBSJQZSYZYHHXJPBJYDSSXDZNCGLQMBTSFSBPDZDLZNFGFJGFSMPXJQLMBLGQCYYXBQKDJJQYRF&quot;_<br />&amp;&quot;KZTJDHCZKLBSDZCFJTPLLJGXHYXZCSSZZXSTJYGKGCKGYOQXJPLZPBPGTGYJZGHZQZZLBJLSQFZGKQQJZGYCZBZQTLDXRJXBSXXP&quot;_<br />&amp;&quot;ZXHYZYCLWDXJJHXMFDZPFZHQHQMQGKSLYHTYCGFRZGNQXCLPDLBZCSCZQLLJBLHBZCYPZZPPDYMZZSGYHCKCPZJGSLJLNSCDSLDL&quot;_<br />&amp;&quot;XBMSTLDDFJMKDJDHZLZXLSZQPQPGJLLYBDSZGQLBZLSLKYYHZTTNTJYQTZZPSZQZTLLJTYYLLQLLQYZQLBDZLSLYYZYMDFSZSNHL&quot;_<br />&amp;&quot;XZNCZQZPBWSKRFBSYZMTHBLGJPMCZZLSTLXSHTCSYZLZBLFEQHLXFLCJLYLJQCBZLZJHHSSTBRMHXZHJZCLXFNBGXGTQJCZTMSFZ&quot;_<br />&amp;&quot;KJMSSNXLJKBHSJXNTNLZDNTLMSJXGZJYJCZXYJYJWRWWQNZTNFJSZPZSHZJFYRDJSFSZJZBJFZQZZHZLXFYSBZQLZSGYFTZDCSZX&quot;_<br />&amp;&quot;ZJBQMSZKJRHYJZCKMJKHCHGTXKXQGLXPXFXTRTYLXJXHDTSJXHJZJXZWZLCQSBTXWXGXTXXHXFTSDKFJHZYJFJXRZSDLLLTQSQQZ&quot;_<br />&amp;&quot;QWZXSYQTWGWBZCGZLLYZBCLMQQTZHZXZXLJFRMYZFLXYSQXXJKXRMQDZDMMYYBSQBHGZMWFWXGMXLZPYYTGZYCCDXYZXYWGSYJYZ&quot;_<br />&amp;&quot;NBHPZJSQSYXSXRTFYZGRHZTXSZZTHCBFCLSYXZLZQMZLMPLMXZJXSFLBYZMYQHXJSXRXSQZZZSSLYFRCZJRCRXHHZXQYDYHXSJJH&quot;_<br />&amp;&quot;ZCXZBTYNSYSXJBQLPXZQPYMLXZKYXLXCJLCYSXXZZLXDLLLJJYHZXGYJWKJRWYHCPSGNRZLFZWFZZNSXGXFLZSXZZZBFCSYJDBRJ&quot;_<br />&amp;&quot;KRDHHGXJLJJTGXJXXSTJTJXLYXQFCSGSWMSBCTLQZZWLZZKXJMLTMJYHSDDBXGZHDLBMYJFRZFSGCLYJBPMLYSMSXLSZJQQHJZFX&quot;_<br />&amp;&quot;GFQFQBPXZGYYQXGZTCQWYLTLGWSGWHRLFSFGZJMGMGBGTJFSYZZGZYZAFLSSPMLPFLCWBJZCLJJMZLPJJLYMQDMYYYFBGYGYZMLY&quot;_<br />&amp;&quot;ZDXQYXRQQQHSYYYQXYLJTYXFSFSLLGNQCYHYCWFHCCCFXPYLYPLLZYXXXXXKQHHXSHJZCFZSCZJXCPZWHHHHHAPYLQALPQAFYHXD&quot;_<br />&amp;&quot;YLUKMZQGGGDDESRNNZLTZGCHYPPYSQJJHCLLJTOLNJPZLJLHYMHEYDYDSQYCDDHGZUNDZCLZYZLLZNTNYZGSLHSLPJJBDGWXPCDU&quot;_<br />&amp;&quot;TJCKLKCLWKLLCASSTKZZDNQNTTLYYZSSYSSZZRYLJQKCQDHHCRXRZYDGRGCWCGZQFFFPPJFZYNAKRGYWYQPQXXFKJTSZZXSWZDDF&quot;_<br />&amp;&quot;BBXTBGTZKZNPZZPZXZPJSZBMQHKCYXYLDKLJNYPKYGHGDZJXXEAHPNZKZTZCMXCXMMJXNKSZQNMNLWBWWXJKYHCPSTMCSQTZJYXT&quot;_<br />&amp;&quot;PCTPDTNNPGLLLZSJLSPBLPLQHDTNJNLYYRSZFFJFQWDPHZDWMRZCCLODAXNSSNYZRESTYJWJYJDBCFXNMWTTBYLWSTSZGYBLJPXG&quot;_<br />&amp;&quot;LBOCLHPCBJLTMXZLJYLZXCLTPNCLCKXTPZJSWCYXSFYSZDKNTLBYJCYJLLSTGQCBXRYZXBXKLYLHZLQZLNZCXWJZLJZJNCJHXMNZ&quot;_<br />&amp;&quot;ZGJZZXTZJXYCYYCXXJYYXJJXSSSJSTSSTTPPGQTCSXWZDCSYFPTFBFHFBBLZJCLZZDBXGCXLQPXKFZFLSYLTUWBMQJHSZBMDDBCY&quot;_<br />&amp;&quot;SCCLDXYCDDQLYJJWMQLLCSGLJJSYFPYYCCYLTJANTJJPWYCMMGQYYSXDXQMZHSZXPFTWWZQSWQRFKJLZJQQYFBRXJHHFWJJZYQAZ&quot;_<br />&amp;&quot;MYFRHCYYBYQWLPEXCCZSTYRLTTDMQLYKMBBGMYYJPRKZNPBSXYXBHYZDJDNGHPMFSGMWFZMFQMMBCMZZCJJLCNUXYQLMLRYGQZCY&quot;_<br />&amp;&quot;XZLWJGCJCGGMCJNFYZZJHYCPRRCMTZQZXHFQGTJXCCJEAQCRJYHPLQLSZDJRBCQHQDYRHYLYXJSYMHZYDWLDFRYHBPYDTSSCNWBX&quot;_<br />&amp;&quot;GLPZMLZZTQSSCPJMXXYCSJYTYCGHYCJWYRXXLFEMWJNMKLLSWTXHYYYNCMMCWJDQDJZGLLJWJRKHPZGGFLCCSCZMCBLTBHBQJXQD&quot;_<br />&amp;&quot;SPDJZZGKGLFQYWBZYZJLTSTDHQHCTCBCHFLQMPWDSHYYTQWCNZZJTLBYMBPDYYYXSQKXWYYFLXXNCWCXYPMAELYKKJMZZZBRXYYQ&quot;_<br />&amp;&quot;JFLJPFHHHYTZZXSGQQMHSPGDZQWBWPJHZJDYSCQWZKTXXSQLZYYMYSDZGRXCKKUJLWPYSYSCSYZLRMLQSYLJXBCXTLWDQZPCYCYK&quot;_<br />&amp;&quot;PPPNSXFYZJJRCEMHSZMSXLXGLRWGCSTLRSXBZGBZGZTCPLUJLSLYLYMTXMTZPALZXPXJTJWTCYYZLBLXBZLQMYLXPGHDSLSSDMXM&quot;_<br />&amp;&quot;BDZZSXWHAMLCZCPJMCNHJYSNSYGCHSKQMZZQDLLKABLWJXSFMOCDXJRRLYQZKJMYBYQLYHETFJZFRFKSRYXFJTWDSXXSYSQJYSLY&quot;_<br />&amp;&quot;XWJHSNLXYYXHBHAWHHJZXWMYLJCSSLKYDZTXBZSYFDXGXZJKHSXXYBSSXDPYNZWRPTQZCZENYGCXQFJYKJBZMLJCMQQXUOXSLYXX&quot;_<br />&amp;&quot;LYLLJDZBTYMHPFSTTQQWLHOKYBLZZALZXQLHZWRRQHLSTMYPYXJJXMQSJFNBXYXYJXXYQYLTHYLQYFMLKLJTMLLHSZWKZHLJMLHL&quot;_<br />&amp;&quot;JKLJSTLQXYLMBHHLNLZXQJHXCFXXLHYHJJGBYZZKBXSCQDJQDSUJZYYHZHHMGSXCSYMXFEBCQWWRBPYYJQTYZCYQYQQZYHMWFFHG&quot;_<br />&amp;&quot;ZFRJFCDPXNTQYZPDYKHJLFRZXPPXZDBBGZQSTLGDGYLCQMLCHHMFYWLZYXKJLYPQHSYWMQQGQZMLZJNSQXJQSYJYCBEHSXFSZPXZ&quot;_<br />&amp;&quot;WFLLBCYYJDYTDTHWZSFJMQQYJLMQXXLLDTTKHHYBFPWTYYSQQWNQWLGWDEBZWCMYGCULKJXTMXMYJSXHYBRWFYMWFRXYQMXYSZTZ&quot;_<br />&amp;&quot;ZTFYKMLDHQDXWYYNLCRYJBLPSXCXYWLSPRRJWXHQYPHTYDNXHHMMYWYTZCSQMTSSCCDALWZTCPQPYJLLQZYJSWXMZZMMYLMXCLMX&quot;_<br />&amp;&quot;CZMXMZSQTZPPQQBLPGXQZHFLJJHYTJSRXWZXSCCDLXTYJDCQJXSLQYCLZXLZZXMXQRJMHRHZJBHMFLJLMLCLQNLDXZLLLPYPSYJY&quot;_<br />&amp;&quot;SXCQQDCMQJZZXHNPNXZMEKMXHYKYQLXSXTXJYYHWDCWDZHQYYBGYBCYSCFGPSJNZDYZZJZXRZRQJJYMCANYRJTLDPPYZBSTJKXXZ&quot;_<br />&amp;&quot;YPFDWFGZZRPYMTNGXZQBYXNBUFNQKRJQZMJEGRZGYCLKXZDSKKNSXKCLJSPJYYZLQQJYBZSSQLLLKJXTBKTYLCCDDBLSPPFYLGYD&quot;_<br />&amp;&quot;TZJYQGGKQTTFZXBDKTYYHYBBFYTYYBCLPDYTGDHRYRNJSPTCSNYJQHKLLLZSLYDXXWBCJQSPXBPJZJCJDZFFXXBRMLAZHCSNDLBJ&quot;_<br />&amp;&quot;DSZBLPRZTSWSBXBCLLXXLZDJZSJPYLYXXYFTFFFBHJJXGBYXJPMMMPSSJZJMTLYZJXSWXTYLEDQPJMYGQZJGDJLQJWJQLLSJGJGY&quot;_<br />&amp;&quot;GMSCLJJXDTYGJQJQJCJZCJGDZZSXQGSJGGCXHQXSNQLZZBXHSGZXCXYLJXYXYYDFQQJHJFXDHCTXJYRXYSQTJXYEFYYSSYYJXNCY&quot;_<br />&amp;&quot;ZXFXMSYSZXYYSCHSHXZZZGZZZGFJDLTYLNPZGYJYZYYQZPBXQBDZTZCZYXXYHHSQXSHDHGQHJHGYWSZTMZMLHYXGEBTYLZKQWYTJ&quot;_<br />&amp;&quot;ZRCLEKYSTDBCYKQQSAYXCJXWWGSBHJYZYDHCSJKQCXSWXFLTYNYZPZCCZJQTZWJQDZZZQZLJJXLSBHPYXXPSXSHHEZTXFPTLQYZZ&quot;_<br />&amp;&quot;XHYTXNCFZYYHXGNXMYWXTZSJPTHHGYMXMXQZXTSBCZYJYXXTYYZYPCQLMMSZMJZZLLZXGXZAAJZYXJMZXWDXZSXZDZXLEYJJZQBH&quot;_<br />&amp;&quot;ZWZZZQTZPSXZTDSXJJJZNYAZPHXYYSRNQDTHZHYYKYJHDZXZLSWCLYBZYECWCYCRYLCXNHZYDZYDYJDFRJJHTRSQTXYXJRJHOJYN&quot;_<br />&amp;&quot;XELXSFSFJZGHPZSXZSZDZCQZBYYKLSGSJHCZSHDGQGXYZGXCHXZJWYQWGYHKSSEQZZNDZFKWYSSTCLZSTSYMCDHJXXYWEYXCZAYD&quot;_<br />&amp;&quot;MPXMDSXYBSQMJMZJMTZQLPJYQZCGQHXJHHLXXHLHDLDJQCLDWBSXFZZYYSCHTYTYYBHECXHYKGJPXHHYZJFXHWHBDZFYZBCAPNPG&quot;_<br />&amp;&quot;NYDMSXHMMMMAMYNBYJTMPXYYMCTHJBZYFCGTYHWPHFTWZZEZSBZEGPFMTSKFTYCMHFLLHGPZJXZJGZJYXZSBBQSCZZLZCCSTPGXM&quot;_<br />&amp;&quot;JSFTCCZJZDJXCYBZLFCJSYZFGSZLYBCWZZBYZDZYPSWYJZXZBDSYUXLZZBZFYGCZXBZHZFTPBGZGEJBSTGKDMFHYZZJHZLLZZGJQ&quot;_<br />&amp;&quot;ZLSFDJSSCBZGPDLFZFZSZYZYZSYGCXSNXXCHCZXTZZLJFZGQSQYXZJQDCCZTQCDXZJYQJQCHXZTDLGSCXZSYQJQTZWLQDQZTQCHQ&quot;_<br />&amp;&quot;QJZYEZZZPBWKDJFCJPZTYPQYQTTYNLMBDKTJZPQZQZZFPZSBNJLGYJDXJDZZKZGQKXDLPZJTCJDQBXDJQJSTCKNXBXZMSLYJCQMT&quot;_<br />&amp;&quot;JQWWCJQNJNLLLHJCWQTBZQYDZCZPZZDZYDDCYZZZCCJTTJFZDPRRTZTJDCQTQZDTJNPLZBCLLCTZSXKJZQZPZLBZRBTJDCXFCZDB&quot;_<br />&amp;&quot;CCJJLTQQPLDCGZDBBZJCQDCJWYNLLZYZCCDWLLXWZLXRXNTQQCZXKQLSGDFQTDDGLRLAJJTKUYMKQLLTZYTDYYCZGJWYXDXFRSKS&quot;_<br />&amp;&quot;TQTENQMRKQZHHQKDLDAZFKYPBGGPZREBZZYKZZSPEGJXGYKQZZZSLYSYYYZWFQZYLZZLZHWCHKYPQGNPGBLPLRRJYXCCSYYHSFZF&quot;_<br />&amp;&quot;YBZYYTGZXYLXCZWXXZJZBLFFLGSKHYJZEYJHLPLLLLCZGXDRZELRHGKLZZYHZLYQSZZJZQLJZFLNBHGWLCZCFJYSPYXZLZLXGCCP&quot;_<br />&amp;&quot;ZBLLCYBBBBUBBCBPCRNNZCZYRBFSRLDCGQYYQXYGMQZWTZYTYJXYFWTEHZZJYWLCCNTZYJJZDEDPZDZTSYQJHDYMBJNYJZLXTSST&quot;_<br />&amp;&quot;PHNDJXXBYXQTZQDDTJTDYYTGWSCSZQFLSHLGLBCZPHDLYZJYCKWTYTYLBNYTSDSYCCTYSZYYEBHEXHQDTWNYGYCLXTSZYSTQMYGZ&quot;_<br />&amp;&quot;AZCCSZZDSLZCLZRQXYYELJSBYMXSXZTEMBBLLYYLLYTDQYSHYMRQWKFKBFXNXSBYCHXBWJYHTQBPBSBWDZYLKGZSKYHXQZJXHXJX&quot;_<br />&amp;&quot;GNLJKZLYYCDXLFYFGHLJGJYBXQLYBXQPQGZTZPLNCYPXDJYQYDYMRBESJYYHKXXSTMXRCZZYWXYQYBMCLLYZHQYZWQXDBXBZWZMS&quot;_<br />&amp;&quot;LPDMYSKFMZKLZCYQYCZLQXFZZYDQZPZYGYJYZMZXDZFYFYTTQTZHGSPCZMLCCYTZXJCYTJMKSLPZHYSNZLLYTPZCTZZCKTXDHXXT&quot;_<br />&amp;&quot;QCYFKSMQCCYYAZHTJPCYLZLYJBJXTPNYLJYYNRXSYLMMNXJSMYBCSYSYLZYLXJJQYLDZLPQBFZZBLFNDXQKCZFYWHGQMRDSXYCYT&quot;_<br />&amp;&quot;XNQQJZYYPFZXDYZFPRXEJDGYQBXRCNFYYQPGHYJDYZXGRHTKYLNWDZNTSMPKLBTHBPYSZBZTJZSZZJTYYXZPHSSZZBZCZPTQFZMY&quot;_<br />&amp;&quot;FLYPYBBJQXZMXXDJMTSYSKKBJZXHJCKLPSMKYJZCXTMLJYXRZZQSLXXQPYZXMKYXXXJCLJPRMYYGADYSKQLSNDHYZKQXZYZTCGHZ&quot;_<br />&amp;&quot;TLMLWZYBWSYCTBHJHJFCWZTXWYTKZLXQSHLYJZJXTMPLPYCGLTBZZTLZJCYJGDTCLKLPLLQPJMZPAPXYZLKKTKDZCZZBNZDYDYQZ&quot;_<br />&amp;&quot;JYJGMCTXLTGXSZLMLHBGLKFWNWZHDXUHLFMKYSLGXDTWWFRJEJZTZHYDXYKSHWFZCQSHKTMQQHTZHYMJDJSKHXZJZBZZXYMPAGQM&quot;_<br />&amp;&quot;STPXLSKLZYNWRTSQLSZBPSPSGZWYHTLKSSSWHZZLYYTNXJGMJSZSUFWNLSOZTXGXLSAMMLBWLDSZYLAKQCQCTMYCFJBSLXCLZZCL&quot;_<br />&amp;&quot;XXKSBZQCLHJPSQPLSXXCKSLNHPSFQQYTXYJZLQLDXZQJZDYYDJNZPTUZDSKJFSLJHYLZSQZLBTXYDGTQFDBYAZXDZHZJNHHQBYKN&quot;_<br />&amp;&quot;XJJQCZMLLJZKSPLDYCLBBLXKLELXJLBQYCXJXGCNLCQPLZLZYJTZLJGYZDZPLTQCSXFDMNYCXGBTJDCZNBGBQYQJWGKFHTNPYQZQ&quot;_<br />&amp;&quot;GBKPBBYZMTJDYTBLSQMPSXTBNPDXKLEMYYCJYNZCTLDYKZZXDDXHQSHDGMZSJYCCTAYRZLPYLTLKXSLZCGGEXCLFXLKJRTLQJAQZ&quot;_<br />&amp;&quot;NCMBYDKKCXGLCZJZXJHPTDJJMZQYKQSECQZDSHHADMLZFMMZBGNTJNNLGBYJBRBTMLBYJDZXLCJLPLDLPCQDHLXZLYCBLCXZZJAD&quot;_<br />&amp;&quot;JLNZMMSSSMYBHBSQKBHRSXXJMXSDZNZPXLGBRHWGGFCXGMSKLLTSJYYCQLTSKYWYYHYWXBXQYWPYWYKQLSQPTNTKHQCWDQKTWPXX&quot;_<br />&amp;&quot;HCPTHTWUMSSYHBWCRWXHJMKMZNGWTMLKFGHKJYLSYYCXWHYECLQHKQHTTQKHFZLDXQWYZYYDESBPKYRZPJFYYZJCEQDZZDLATZBB&quot;_<br />&amp;&quot;FJLLCXDLMJSSXEGYGSJQXCWBXSSZPDYZCXDNYXPPZYDLYJCZPLTXLSXYZYRXCYYYDYLWWNZSAHJSYQYHGYWWAXTJZDAXYSRLTDPS&quot;_<br />&amp;&quot;SYYFNEJDXYZHLXLLLZQZSJNYQYQQXYJGHZGZCYJCHZLYCDSHWSHJZYJXCLLNXZJJYYXNFXMWFPYLCYLLABWDDHWDXJMCXZTZPMLQ&quot;_<br />&amp;&quot;ZHSFHZYNZTLLDYWLSLXHYMMYLMBWWKYXYADTXYLLDJPYBPWUXJMWMLLSAFDLLYFLBHHHBQQLTZJCQJLDJTFFKMMMBYTHYGDCQRDD&quot;_<br />&amp;&quot;WRQJXNBYSNWZDBYYTBJHPYBYTTJXAAHGQDQTMYSTQXKBTZPKJLZRBEQQSSMJJBDJOTGTBXPGBKTLHQXJJJCTHXQDWJLWRFWQGWSH&quot;_<br />&amp;&quot;CKRYSWGFTGYGBXSDWDWRFHWYTJJXXXJYZYSLPYYYPAYXHYDQKXSHXYXGSKQHYWFDDDPPLCJLQQEEWXKSYYKDYPLTJTHKJLTCYYHH&quot;_<br />&amp;&quot;JTTPLTZZCDLTHQKZXQYSTEEYWYYZYXXYYSTTJKLLPZMCYHQGXYHSRMBXPLLNQYDQHXSXXWGDQBSHYLLPJJJTHYJKYPPTHYYKTYEZ&quot;_<br />&amp;&quot;YENMDSHLCRPQFDGFXZPSFTLJXXJBSWYYSKSFLXLPPLBBBLBSFXFYZBSJSSYLPBBFFFFSSCJDSTZSXZRYYSYFFSYZYZBJTBCTSBSD&quot;_<br />&amp;&quot;HRTJJBYTCXYJEYLXCBNEBJDSYXYKGSJZBXBYTFZWGENYHHTHZHHXFWGCSTBGXKLSXYWMTMBYXJSTZSCDYQRCYTWXZFHMYMCXLZNS&quot;_<br />&amp;&quot;DJTTTXRYCFYJSBSDYERXJLJXBBDEYNJGHXGCKGSCYMBLXJMSZNSKGXFBNBPTHFJAAFXYXFPXMYPQDTZCXZZPXRSYWZDLYBBKTYQP&quot;_<br />&amp;&quot;QJPZYPZJZNJPZJLZZFYSBTTSLMPTZRTDXQSJEHBZYLZDHLJSQMLHTXTJECXSLZZSPKTLZKQQYFSYGYWPCPQFHQHYTQXZKRSGTTSQ&quot;_<br />&amp;&quot;CZLPTXCDYYZXSQZSLXLZMYCPCQBZYXHBSXLZDLTCDXTYLZJYYZPZYZLTXJSJXHLPMYTXCQRBLZSSFJZZTNJYTXMYJHLHPPLCYXQJ&quot;_<br />&amp;&quot;QQKZZSCPZKSWALQSBLCCZJSXGWWWYGYKTJBBZTDKHXHKGTGPBKQYSLPXPJCKBMLLXDZSTBKLGGQKQLSBKKTFXRMDKBFTPZFRTBBR&quot;_<br />&amp;&quot;FERQGXYJPZSSTLBZTPSZQZSJDHLJQLZBPMSMMSXLQQNHKNBLRDDNXXDHDDJCYYGYLXGZLXSYGMQQGKHBPMXYXLYTQWLWGCPBMQXC&quot;_<br />&amp;&quot;YZYDRJBHTDJYHQSHTMJSBYPLWHLZFFNYPMHXXHPLTBQPFBJWQDBYGPNZTPFZJGSDDTQSHZEAWZZYLLTYYBWJKXXGHLFKXDJTMSZS&quot;_<br />&amp;&quot;QYNZGGSWQSPHTLSSKMCLZXYSZQZXNCJDQGZDLFNYKLJCJLLZLMZZNHYDSSHTHZZLZZBBHQZWWYCRZHLYQQJBEYFXXXWHSRXWQHWP&quot;_<br />&amp;&quot;SLMSSKZTTYGYQQWRSLALHMJTQJSMXQBJJZJXZYZKXBYQXBJXSHZTSFJLXMXZXFGHKZSZGGYLCLSARJYHSLLLMZXELGLXYDJYTLFB&quot;_<br />&amp;&quot;HBPNLYZFBBHPTGJKWETZHKJJXZXXGLLJLSTGSHJJYQLQZFKCGNNDJSSZFDBCTWWSEQFHQJBSAQTGYPQLBXBMMYWXGSLZHGLZGQYF&quot;_<br />&amp;&quot;LZBYFZJFRYSFMBYZHQGFWZSYFYJJPHZBYYZFFWODGRLMFTWLBZGYCQXCDJYGZYYYYTYTYDWEGAZYHXJLZYYHLRMGRXXZCLHNELJJ&quot;_<br />&amp;&quot;TJTPWJYBJJBXJJTJTEEKHWSLJPLPSFYZPQQBDLQJJTYYQLYZKDKSQJYYQZLDQTGJQYZJSUCMRYQTHTEJMFCTYHYPKMHYZWJDQFHY&quot;_<br />&amp;&quot;YXWSHCTXRLJHQXHCCYYYJLTKTTYTMXGTCJTZAYYOCZLYLBSZYWJYTSJYHBYSHFJLYGJXXTMZYYLTXXYPZLXYJZYZYYPNHMYMDYYL&quot;_<br />&amp;&quot;BLHLSYYQQLLNJJYMSOYQBZGDLYXYLCQYXTSZEGXHZGLHWBLJHEYXTWQMAKBPQCGYSHHEGQCMWYYWLJYJHYYZLLJJYLHZYHMGSLJL&quot;_<br />&amp;&quot;JXCJJYCLYCJPCPZJZJMMYLCQLNQLJQJSXYJMLSZLJQLYCMMHCFMMFPQQMFYLQMCFFQMMMMHMZNFHHJGTTHHKHSLNCHHYQDXTMMQD&quot;_<br />&amp;&quot;CYZYXYQMYQYLTDCYYYZAZZCYMZYDLZFFFMMYCQZWZZMABTBYZTDMNZZGGDFTYPCGQYTTSSFFWFDTZQSSYSTWXJHXYTSXXYLBYQHW&quot;_<br />&amp;&quot;WKXHZXWZNNZZJZJJQJCCCHYYXBZXZCYZTLLCQXYNJYCYYCYNZZQYYYEWYCZDCJYCCHYJLBTZYYCQWMPWPYMLGKDLDLGKQQBGYCHJ&quot;_<br />&amp;&quot;XY&quot;<br />&#39;如果不在汉字范围内,则直接返回内容<br />if ascw(char)&lt;19968 and ascw(char)&gt;40869 then<br />&nbsp;GetPy4Utf = char<br />else<br />&nbsp;&#39;查找对应首字母<br />&nbsp;GetPy4Utf = Mid(strCHSfirstPY,(ascw(char)-19967),1)<br />end if<br />end function <br />&#39;//生成汉字串首字母串<br />function getpy(str)<br />for i=1 to len(str)<br />&nbsp;getpy=getpy &amp; GetPy4Utf(mid(str,i,1))<br />next<br />end function<br />%&gt;<br />&nbsp;原理很简单，找对应位置的字母就行了，而相对来说，ANSII编码的就简单多了，看代码 </p><p>&nbsp;&#39;//获取汉字的首字母<br />function getpychar(char)<br />dim tmpp:tmpp=65536+asc(char)<br />&nbsp;if(tmpp&gt;=45217 and tmpp&lt;=45252) then <br />&nbsp;getpychar= &quot;A&quot;<br />elseif(tmpp&gt;=45253 and tmpp&lt;=45760) then<br />&nbsp;getpychar= &quot;B&quot;<br />elseif(tmpp&gt;=45761 and tmpp&lt;=46317) then<br />&nbsp;getpychar= &quot;C&quot;<br />elseif(tmpp&gt;=46318 and tmpp&lt;=46825) then<br />&nbsp;getpychar= &quot;D&quot;<br />elseif(tmpp&gt;=46826 and tmpp&lt;=47009) then <br />&nbsp;getpychar= &quot;E&quot;<br />elseif(tmpp&gt;=47010 and tmpp&lt;=47296) then <br />&nbsp;getpychar= &quot;F&quot;<br />elseif(tmpp&gt;=47297 and tmpp&lt;=47613) then <br />&nbsp;getpychar= &quot;G&quot;<br />elseif(tmpp&gt;=47614 and tmpp&lt;=48118) then<br />&nbsp;getpychar= &quot;H&quot;<br />elseif(tmpp&gt;=48119 and tmpp&lt;=49061) then<br />&nbsp;getpychar= &quot;J&quot;<br />elseif(tmpp&gt;=49062 and tmpp&lt;=49323) then <br />&nbsp;getpychar= &quot;K&quot;<br />elseif(tmpp&gt;=49324 and tmpp&lt;=49895) then <br />&nbsp;getpychar= &quot;L&quot;<br />elseif(tmpp&gt;=49896 and tmpp&lt;=50370) then <br />&nbsp;getpychar= &quot;M&quot;<br />elseif(tmpp&gt;=50371 and tmpp&lt;=50613) then <br />&nbsp;getpychar= &quot;N&quot;<br />elseif(tmpp&gt;=50614 and tmpp&lt;=50621) then <br />&nbsp;getpychar= &quot;O&quot;<br />elseif(tmpp&gt;=50622 and tmpp&lt;=50905) then<br />&nbsp;getpychar= &quot;P&quot;<br />elseif(tmpp&gt;=50906 and tmpp&lt;=51386) then <br />&nbsp;getpychar= &quot;Q&quot;<br />elseif(tmpp&gt;=51387 and tmpp&lt;=51445) then <br />&nbsp;getpychar= &quot;R&quot;<br />elseif(tmpp&gt;=51446 and tmpp&lt;=52217) then <br />&nbsp;getpychar= &quot;S&quot;<br />elseif(tmpp&gt;=52218 and tmpp&lt;=52697) then <br />&nbsp;getpychar= &quot;T&quot;<br />elseif(tmpp&gt;=52698 and tmpp&lt;=52979) then <br />&nbsp;getpychar= &quot;W&quot;<br />elseif(tmpp&gt;=52980 and tmpp&lt;=53640) then <br />&nbsp;getpychar= &quot;X&quot;<br />elseif(tmpp&gt;=53689 and tmpp&lt;=54480) then <br />&nbsp;getpychar= &quot;Y&quot;<br />elseif(tmpp&gt;=54481 and tmpp&lt;=62289) then<br />&nbsp;getpychar= &quot;Z&quot;<br />else &#39;如果不是中文，则不处理<br />&nbsp;getpychar=char<br />end if<br />end function <br />&#39;//生成汉字串首字母串<br />function getpy(str)<br />for i=1 to len(str)<br />&nbsp;getpy=getpy &amp; getpychar(mid(str,i,1))<br />next<br />end function<br /></p>]]></description><category>ASP技术</category><comments>http://blog.hnce.net/post/168.html#comment</comments><wfw:comment>http://blog.hnce.net/</wfw:comment><wfw:commentRss>http://blog.hnce.net/feed.asp?cmt=168</wfw:commentRss><trackback:ping>http://blog.hnce.net/cmd.asp?act=tb&amp;id=168&amp;key=398619b5</trackback:ping></item><item><title>vbscript中用正则时获得匹配串的心得</title><author>a@b.com (slick)</author><link>http://blog.hnce.net/post/165.html</link><pubDate>Sun, 20 Nov 2005 11:38:00 +0800</pubDate><guid>http://blog.hnce.net/post/165.html</guid><description><![CDATA[　　vbscript中用正则比在javascript中麻烦一些。javascript中不用创建RegExp对象就可以用正则，但是在vb中就不可以。还有javascript中可以利用RegExp.$1获得模式匹配，但是vb中就不行。需要用到另外一个对象和一个个集合：MatchCollection，Match<br /><br/><p>　　举一个例子如下：</p><p>　　假设有一个有这样一个串　</p><p>　　strNor=&quot;;northsnow:塞北的雪;csdn:中国最大的开发者网络;crc:长春轨道客车股份有限公司;&quot;</p><p>　　串中包含了很多子串，子串是用;(分号)分割开的，每个子串也分两个部分，前一部分为标识或英文名，后一个部分为中文名或说明。根据给定的标识查找后面的说明怎么做呢？这就是我们这个例子将要解决的问题：</p><p>　　代码如下：</p><p><table cellspacing="1" cellpadding="1" width="80%" border="0">    <tbody>        <tr>            <td bgcolor="#ffffff">&nbsp;<br/>            <p>dim oStr<br />oStr=&quot;;northsnow:塞北的雪;csdn:中国最大的开发者网络;crc:长春轨道客车股份有限公司;&quot;<br />function getName(ooID)<br />&nbsp;&nbsp;&nbsp;&nbsp; dim objRegExp ,reMatchCol,reMatch,reSubMatch<br />&nbsp;&nbsp;&nbsp;&nbsp; dim rValue<br />&nbsp;&nbsp;&nbsp;&nbsp; Set objRegExp=new RegExp<br />&nbsp;&nbsp;&nbsp;&nbsp; objRegExp.Pattern=&quot;;(&quot; &amp; ooID &amp; &quot;):([^;]*)&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp; objRegExp.IgnoreCase=true<br />&nbsp;&nbsp;&nbsp;&nbsp; objRegExp.Global=true <br />&nbsp;&nbsp;&nbsp;&nbsp; set reMatchCol= objRegExp.execute(oStr)&nbsp; &#39;执行查询，并返回匹配到一个匹配集合中<br />&nbsp;&nbsp;&nbsp;&nbsp; if reMatchCol.count&gt;0 then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;Set reMatch = reMatchCol(0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;将第一匹配串放到一个匹配对象中<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set reSubMatch = reMatch.SubMatches&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;返回子匹配集合<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if reSubMatch(0)=ooID then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;rValue=reSubMatch(1) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;rValue=&quot;&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end if<br />&nbsp;&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rValue=&quot;&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp; end if<br />&nbsp;&nbsp;&nbsp;&nbsp; getName=rValue<br />end function<br />response.Write getName(&quot;northsnow&quot;)</p>            </td>        </tr>    </tbody></table></p>]]></description><category>ASP技术</category><comments>http://blog.hnce.net/post/165.html#comment</comments><wfw:comment>http://blog.hnce.net/</wfw:comment><wfw:commentRss>http://blog.hnce.net/feed.asp?cmt=165</wfw:commentRss><trackback:ping>http://blog.hnce.net/cmd.asp?act=tb&amp;id=165&amp;key=20b12287</trackback:ping></item><item><title>asp + sqlserver 分页方法(不用存储过程)</title><author>a@b.com (slick)</author><link>http://blog.hnce.net/post/145.html</link><pubDate>Mon, 31 Oct 2005 22:16:00 +0800</pubDate><guid>http://blog.hnce.net/post/145.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个程序的特点就是指将当前页的纪录掉到页面上来。性能不错，而且不用存储过程，由于代码没有封装，所以很零散，要用到你的程序中，需要先简单读读。然后注意需要自己设置的地方的意思。有些是可以省略的。有些参数传递也是可以省略的。<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 代码如下：<br/><p>&#39;&#39;&#39;&#39;&nbsp; 塞北的雪&nbsp; 分页利器(sql server)&nbsp; 不用存储过程&nbsp;&nbsp; -------------------------</p><p>&#39;其中注释中有 ###的需要用户设置 <br />&#39;其中注释中有 参数传递 ** 的 说明要通过参数 传递。</p><p><br />&#39;定义变量<br />dim tOption&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;查询条件<br />dim tOrder&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;排序字符串&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />dim tOrderField&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;排序字段&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可通过参数获得：order_field<br />dim tOrderDirection&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;排序方向&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可通过参数获得：order_direction</p><p>dim tPageSize&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;页大小<br />dim tTotalCount&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;总记录数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可通过参数获得：t_count<br />dim tPageCount&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;页数<br />dim tCurPage&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;当前页号&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可通过参数获得：page</p><p>dim tTableName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;表或者视图名<br />dim tFieldAlias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;行号的别名<br />dim tFieldList&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;查询的字段列表<br />dim tPageField&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;用于分页的字段</p><p>dim r_count&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;查得的记录数</p><p><br />set rs=server.createobject(&quot;adodb.recordset&quot;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;记录集对象</p><p>&#39;排序处理<br />tOrderField=Request(&quot;order_field&quot;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;获得排序字段（参数传递 **）<br />tOrderDirection=Request(&quot;order_dir&quot;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;获得排序方向（参数传递 **）</p><p>if(tOrderField=&quot;&quot;) then tOrderField=&quot;item_code&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39; ### 设置默认排序字段<br />if(tOrderDirection=&quot;&quot;) then tOrderDirection=&quot;asc&quot;&nbsp;&nbsp;&nbsp;&nbsp; &#39; ### 设置默认排序方向</p><p>tOrder=&quot; order by &quot; &amp; tOrderField &amp; &quot; &quot; &amp; tOrderDirection &amp; &quot; &quot;&nbsp;&nbsp; &#39;生成排序字符串</p><p><br />&#39;定义参数<br />tPageSize=find_rs_count&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39; ### 设置页大小<br />tTableName=&quot;view_select1&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39; ### 设置与查询的表格或视图<br />tFieldList=&quot; * &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39; ### 欲查询的字段列表<br />tPageField=&quot;item_code&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39; ### 设置一个主键或唯一索引的字段 ，用于分页计算</p><p><br />&#39;页数处理<br />tCurPage=Request(&quot;page&quot;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;获得当前页（参数传递 **）<br />tTotalCount=Request(&quot;t_count&quot;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;获得总页数（参数传递 **）</p><p>if(tCurPage=&quot;&quot;) then tCurPage=1<br />if(cint(tCurPage)=0) then tCurPage=1<br />if(tPageCount=&quot;&quot;) then tPageCount =1<br />if(cint(tPageCount)=0) then tPageCount=1</p><p>&#39; 构造查询条件，根据具体的程序，肯定不一样。但是最后的条件必须是&ldquo; where ??? &rdquo;<br />tOption=&quot; issue_flag=&#39;Y&#39;&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39; ### 设置条件<br />if f_c&lt;&gt;&quot;&quot; then tOPtion= tOPtion &amp; f_c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39; ### 设置条件</p><p>if trim(tOption)=&quot;&quot; then <br />&nbsp;&nbsp;&nbsp;&nbsp; tOption = &quot; where 1=1 &quot;&nbsp;&nbsp; &#39;如果没有条件，就自己加一个。<br />else<br />&nbsp;&nbsp;&nbsp;&nbsp; tOption= &quot; where &quot; &amp; tOPtion <br />end if</p><p>&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; &#39;构造查询字符串，这个分页程序的核心，此查询串是我们只下载当前页所需的记录<br />&nbsp;if(tCurPage&gt;1) then<br />&nbsp;&nbsp;conStr=&quot;select top &quot; &amp; tPageSize &amp; &quot; &quot; &amp; tFieldList &amp; &quot;&nbsp; from&nbsp; &quot; &amp; tTableName &amp;&nbsp; tOption<br />&nbsp;&nbsp;conStr =conStr &amp; &quot; and &quot; &amp; tPageField &amp; &quot; not in(select top &quot; &amp; tPageSize*(tCurPage-1) &amp; &quot; &quot; &amp; tPageField &amp; &quot;&nbsp; from &quot; &amp; tTableName &amp;&nbsp; tOption &amp; &quot; &quot; &amp; tOrder &amp; &quot;) &quot; &amp; tOrder<br />&nbsp;else<br />&nbsp;&nbsp;conStr=&quot;select top &quot; &amp; tPageSize &amp; &quot; &quot; &amp; tFieldList &amp; &quot; from &quot; &amp; tTableName &amp; tOption &amp; &quot; &quot; &amp; tOrder<br />&nbsp;end if&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;&#39;执行主查询，获得相应记录集&nbsp;<br />&nbsp;Call ConnDataBase()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;&nbsp; ### 建立数据库连接<br />&nbsp;&nbsp;&nbsp; rs.cursorlocation=3<br />&nbsp;&nbsp;&nbsp; rs.open conStr,conn,3,1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;执行查询<br />&nbsp;&nbsp;&nbsp; r_count= rs.recordcount</p><p><br />&nbsp;&nbsp; &#39;当还没有查询过总记录数时 并且 总的记录数超过了页大小时 ，查询当前条件下的总的记录数<br />&nbsp;&nbsp; if(r_count&gt;=tPageSize or tCurPage&gt;1) and tTotalCount=0 then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set rr=conn.execute(&quot;select count(*) from &quot; &amp; tTableName &amp; &quot; &quot; &amp; tOption)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tTotalCount=rr(0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rr.close()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set rr=nothing<br />&nbsp;&nbsp; end if&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp; if(cint(tTotalCount)=0) then tTotalCount=r_count &#39;如果总记录为0，将当前差得的记录集的记录数设置为总记录数，说明当前的总记录数小于页大小<br />&nbsp;&nbsp; <br />&nbsp;&nbsp; &#39;利用页大小和总记录数 计算页数<br />&nbsp;&nbsp; if(cint(tTotalCount)&gt;cint(tPageSize)) then<br />&nbsp;&nbsp;tPageCount=cint((cint(tTotalCount) \ cint(tPageSize)))<br />&nbsp;&nbsp;if(cint(tTotalCount) mod cint(tPageSize))&gt;0 then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tPageCount =tPageCount +1<br />&nbsp;&nbsp;end if<br />&nbsp;&nbsp; end if<br />&nbsp;<br />&nbsp;&nbsp; tCurPage=cint(tCurPage)<br />&nbsp;&nbsp; tPageCount=cint(tPageCount)</p><p><br />&#39;&nbsp; ---------------------------------------------------------------------</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这就是全部代码，感兴趣的朋友，可以研究一下，或者将他封装起来，加上分页导航等方法。总之，希望此代码能对大家有用。</p>]]></description><category>ASP技术</category><comments>http://blog.hnce.net/post/145.html#comment</comments><wfw:comment>http://blog.hnce.net/</wfw:comment><wfw:commentRss>http://blog.hnce.net/feed.asp?cmt=145</wfw:commentRss><trackback:ping>http://blog.hnce.net/cmd.asp?act=tb&amp;id=145&amp;key=f7a6d892</trackback:ping></item></channel></rss>
