<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<feed xmlns="http://www.w3.org/2005/Atom">
   <title type="html">艾恩ASP学习BLOG</title>
   <subtitle type="html">艾恩ASP学习Blog,免费提供各种ASP学习资源，组件、源代码、学习手册、技术文章...</subtitle>
   <id>http://dev.mo.cn/</id>
   <link rel="alternate" type="text/html" href="http://dev.mo.cn/" />
   <link rel="self" type="application/atom+xml" href="http://dev.mo.cn/atom.asp" />
   <generator uri="http://dev.mo.cn/" version="1.0">Anlige</generator>
   <updated>2012-5-19 8:06:16</updated>
   <entry>
      <title type="html">艾恩无组件上传类配合FLASH实现多文件带进度条上传</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_329.html" />
      <updated>2012-4-11 17:27:58</updated>
      <published>2012-4-11 17:27:58</published>
      <id>http://dev.mo.cn/article_329.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;以前写过用Ajax来实现的无刷新上传，效果不是很理想，这里也不推荐再使用。最近对前段时间发布的Flash上传进行了更新，供大家参考。<br /><br />&nbsp;&nbsp;主要功能：<br />&nbsp;&nbsp;&nbsp;&nbsp;1、多文件带进度条上传<br />&nbsp;&nbsp;&nbsp;&nbsp;2、增加了回调函数，可以使用返回的文件名，例如图片预览等<br />&nbsp;&nbsp;&nbsp;&nbsp;3、对配置文件进行精简，尽可能简化配置，方便上传<br /><br />&nbsp;&nbsp;功能限制：建议使用UTF-8编码以保证中文不会乱码；无组件上传的限制仍然存在，对于大文件支持不好；<br /><br />&nbsp;&nbsp;如果有能力，可以自行研究下multiupload.js文件，实现功能的自定义。<br />&nbsp;&nbsp;配置如下，有说明，就不详解了。部分内容与upload.asp相对应<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">var&nbsp;Setting={<br />&nbsp; &nbsp; &nbsp; &nbsp; debug:false,<br />&nbsp; &nbsp; &nbsp; &nbsp; upload_url:&nbsp;"upload.asp",<br />&nbsp; &nbsp; &nbsp; &nbsp; file_post_name&nbsp;:&nbsp;"filedata",<br />&nbsp; &nbsp; &nbsp; &nbsp; file_types&nbsp;:&nbsp;"*.bmp;*.rar;*.iso;*.jpg;*.gif;*.png;*.exe;*.flv",//文件格式限制<br />&nbsp; &nbsp; &nbsp; &nbsp; file_types_description&nbsp;:&nbsp;"文件类型",//文件格式描述<br />&nbsp; &nbsp; &nbsp; &nbsp; file_size_limit&nbsp;:&nbsp;"100&nbsp;MB",&nbsp; &nbsp; &nbsp; &nbsp; //&nbsp;文件大小限制<br />&nbsp; &nbsp; &nbsp; &nbsp; file_upload_limit&nbsp;:&nbsp;5//上传文件总数<br />};<br /><br />//回调函数，this.name会返回服务器上的文件名字；如果不需要可以直接将本函数去掉，或者把函数内容留空<br />function&nbsp;CallBack(){<br />&nbsp; &nbsp; &nbsp; &nbsp; document.getElementById("fileUploaded").value&nbsp;+=&nbsp;"\n"&nbsp;+&nbsp;this.name;<br />}</div></div><br /><br />&nbsp;&nbsp;&nbsp;请转入<a href="http://dev.mo.cn/source_198.html" target="new">http://dev.mo.cn/source_198.html</a>进行代码下载]]>
      </summary>
      <category term="" label="无组件上传" scheme="http://dev.mo.cn/cat_diary_20.html" />
   </entry>
   <entry>
      <title type="html">第二个Sqlserver自定义函数-从url分理出域名(主机名)</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_328.html" />
      <updated>2012-4-1 14:10:43</updated>
      <published>2012-4-1 14:10:43</published>
      <id>http://dev.mo.cn/article_328.html</id>
      <summary type="html">
      <![CDATA[/*将域名从url中分离出来，第一次写，仅供参考*/<br />CREATE&nbsp;FUNCTION&nbsp;[dbo].[GetDomain]&nbsp;(@url&nbsp;varchar(1024))&nbsp;&nbsp;<br />RETURNS&nbsp;varchar(1024)&nbsp;AS&nbsp;&nbsp;<br />BEGIN&nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;@url=null<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;'';<br />&nbsp; &nbsp; &nbsp; &nbsp; declare&nbsp;@bindnum&nbsp;varchar(1024);<br />&nbsp; &nbsp; &nbsp; &nbsp; set&nbsp;@bindnum&nbsp;=&nbsp;'';<br />&nbsp; &nbsp; &nbsp; &nbsp; declare&nbsp;@p1&nbsp;int;<br />&nbsp; &nbsp; &nbsp; &nbsp; set&nbsp;@p1=charindex('//',@url,1);<br />&nbsp; &nbsp; &nbsp; &nbsp; set&nbsp;&nbsp;@bindnum&nbsp;=&nbsp;@url;<br />&nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;@p1&gt;0<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set&nbsp;&nbsp;@bindnum&nbsp;=&nbsp;substring(@url,@p1+2,len(@url)-@p1-1);<br />&nbsp; &nbsp; &nbsp; &nbsp; /*declare&nbsp;@domain&nbsp;varchar(255);*/<br />&nbsp; &nbsp; &nbsp; &nbsp; set&nbsp;@p1&nbsp;=&nbsp;charindex('/',@bindnum,1);<br />&nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;@p1&lt;=0<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;@bindnum;<br />&nbsp; &nbsp; &nbsp; &nbsp; set&nbsp;&nbsp;@bindnum&nbsp;=&nbsp;substring(@bindnum,1,@p1-1);<br />&nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;@bindnum;<br />END]]>
      </summary>
      <category term="" label="代码分享" scheme="http://dev.mo.cn/cat_diary_23.html" />
   </entry>
   <entry>
      <title type="html">简单模仿c#的string.format(asp,js均可用)</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_327.html" />
      <updated>2012-4-1 12:03:17</updated>
      <published>2012-4-1 12:03:17</published>
      <id>http://dev.mo.cn/article_327.html</id>
      <summary type="html">
      <![CDATA[function&nbsp;format(Str){<br />&nbsp; &nbsp; &nbsp; &nbsp; var&nbsp;arg&nbsp;=&nbsp;arguments;<br />&nbsp; &nbsp; &nbsp; &nbsp; if(arg.length&lt;=1){return&nbsp;Str;}<br />&nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;Str.replace(/\$(\d*)/igm,function(ma){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;arg[parseInt(ma.replace(/\$/igm,""))];&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }catch(ex){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;ma;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; });<br />}]]>
      </summary>
      <category term="" label="代码分享" scheme="http://dev.mo.cn/cat_diary_23.html" />
   </entry>
   <entry>
      <title type="html">'莫名的流泪'</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_326.html" />
      <updated>2012-3-27 21:14:59</updated>
      <published>2012-3-27 21:14:59</published>
      <id>http://dev.mo.cn/article_326.html</id>
      <summary type="html">
      <![CDATA[突然明白一个词：“莫名的流泪”。或许，是一种莫名的感动吧。<br />《陈奕迅&nbsp;-&nbsp;好久不见》]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">星外系统IIS日志分析常用的几个命令</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_325.html" />
      <updated>2012-2-2 18:00:23</updated>
      <published>2012-2-2 18:00:23</published>
      <id>http://dev.mo.cn/article_325.html</id>
      <summary type="html">
      <![CDATA[命令中的{0}代表源日志文件的路径，实际运行的时候请替换为真实路径<br />命令中的{1}代表日志导出到的文件的路径，实际运行的时候请替换为真实路径<br />例如：<br />7i24iislog.exe&nbsp;-i:BIN&nbsp;-o:W3C&nbsp;"select&nbsp;siteid,uristem,bytessent&nbsp;from&nbsp;'d:\iislog\w3svc\sss.ibl'&nbsp;to&nbsp;'d:\a.log'&nbsp;order&nbsp;by&nbsp;bytessent&nbsp;desc"<br /><br /><br />1、查询某IP访问某网站的某网页的次数，倒序排列<br />7i24iislog.exe&nbsp;-i:BIN&nbsp;-o:W3C&nbsp;"select&nbsp;clientipaddress,siteid,uristem,count(clientipaddress)&nbsp;from&nbsp;'{0}'&nbsp;to&nbsp;'{1}'&nbsp;group&nbsp;by&nbsp;clientipaddress,uristem,siteid&nbsp;order&nbsp;by&nbsp;count(clientipaddress)&nbsp;desc"<br /><br />2、某IP访问整个服务器网站的次数<br />7i24iislog.exe&nbsp;-i:BIN&nbsp;-o:W3C&nbsp;"select&nbsp;clientipaddress,count(clientipaddress)&nbsp;from&nbsp;'{0}'&nbsp;to&nbsp;'{1}'&nbsp;group&nbsp;by&nbsp;clientipaddress&nbsp;order&nbsp;by&nbsp;count(clientipaddress)&nbsp;desc"<br /><br />3、按照接收数据（用户上传）大小排列<br />7i24iislog.exe&nbsp;-i:BIN&nbsp;-o:W3C&nbsp;"select&nbsp;siteid,uristem,bytesreceived&nbsp;from&nbsp;'{0}'&nbsp;to&nbsp;'{1}'&nbsp;order&nbsp;by&nbsp;bytesreceived&nbsp;desc"<br /><br />4、按照发送数据（用户下载）大小排列<br />7i24iislog.exe&nbsp;-i:BIN&nbsp;-o:W3C&nbsp;"select&nbsp;siteid,uristem,bytessent&nbsp;from&nbsp;'{0}'&nbsp;to&nbsp;'{1}'&nbsp;order&nbsp;by&nbsp;bytessent&nbsp;desc"<br /><br />5、检测PHP发包<br />7i24iislog.exe&nbsp;-i:BIN&nbsp;-o:W3C&nbsp;"select&nbsp;siteid,uristem,uriquery&nbsp;from&nbsp;'{0}'&nbsp;to&nbsp;'{1}'&nbsp;where&nbsp;uriquery&nbsp;like&nbsp;'%port=%'&nbsp;and&nbsp;uriquery&nbsp;like&nbsp;'%ip=%'"]]>
      </summary>
      <category term="" label="代码分享" scheme="http://dev.mo.cn/cat_diary_23.html" />
   </entry>
   <entry>
      <title type="html">星外对接DNSPOD接口完整代码(ASP)[2012-3-20修改]</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_324.html" />
      <updated>2012-1-18 15:33:20</updated>
      <published>2012-1-18 15:33:20</published>
      <id>http://dev.mo.cn/article_324.html</id>
      <summary type="html">
      <![CDATA[下载地址：<a href="/upfiles/20120320110630306.rar" target="new">20120320110630306</a><br /><br />整合步骤：<br />1、解压下载到的文件夹，将文件夹内容复制到任何一个可以访问到的目录里，例如/dns/dnspod/<br />2、访问：http://你的主控域名/dns/dnspod/update.asp，执行本文件进行安装<br />3、在/dns/logininfo.asp中添加相应的链接，例如&lt;a&nbsp;href="dnspod/mydns.asp"&gt;MYDNS功能&lt;/a&gt;<br />4、完成<br /><br />注意：<br />1、安装过程仅创建配置文件以及增加5个数据库字段，无其他任何要求<br />2、创建配置文件需要写入权限，如果您担心网站安全问题，升级的时候可以只点击“仅升级”，然后自己手动配置config.asp<br />3、理论上支持任何版本的星外<br />4、可以手动同步本地DNS解析记录到DNSPOD接口（解析记录列表中，显示为红色的即本地未同步的记录）<br />5、如果帐户里面已经有域名了，安装后请先同步一下，否则解析时会出现“Domain&nbsp;is&nbsp;exists”错误]]>
      </summary>
      <category term="" label="代码分享" scheme="http://dev.mo.cn/cat_diary_23.html" />
   </entry>
   <entry>
      <title type="html">jquery实现select的美化</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_323.html" />
      <updated>2012-1-16 15:38:45</updated>
      <published>2012-1-16 15:38:45</published>
      <id>http://dev.mo.cn/article_323.html</id>
      <summary type="html">
      <![CDATA[jquery实现select的美化！<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;html&gt;<br />&nbsp;　&nbsp;&lt;head&gt;<br />&nbsp;　&nbsp;　　&lt;script&nbsp;src="jquery-1.2.js"&gt;&lt;/script&gt;<br />&nbsp;　&nbsp;　　&lt;script&gt;<br />&nbsp;　&nbsp;　　　　$(document).ready(<br />&nbsp;　&nbsp;　　　　　　function&nbsp;()&nbsp;{<br />&nbsp;　&nbsp;　　　　　　　　$("#select").click&nbsp;(<br />&nbsp;　&nbsp;　　　　　　　　　　function&nbsp;()&nbsp;{<br />&nbsp;　&nbsp;　　　　　　　　　　　　var&nbsp;original&nbsp;=this;<br />&nbsp;　&nbsp;　　　　　　　　　　　　$(original).blur();<br />&nbsp;　&nbsp;　　　　　　　　　　　　$(original).css("visibility",&nbsp;"hidden");<br />&nbsp;　&nbsp;　　　　　　　　　　　　var&nbsp;value&nbsp;=&nbsp;$(this).attr("value");<br />&nbsp;　&nbsp;　　　　　　　　　　　　var&nbsp;topOffset&nbsp;=&nbsp;0;<br />&nbsp;　&nbsp;　　　　　　　　　　　　var&nbsp;alternate&nbsp;=&nbsp;document.createElement("div");<br />&nbsp;　&nbsp;　　　　　　　　　　　　$(document.body).append(alternate);<br />&nbsp;　&nbsp;　　　　　　　　　　　　{<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　var&nbsp;alternate_select&nbsp;=&nbsp;document.createElement("div");<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　$(alternate).append(alternate_select);<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　$(alternate_select).css("position",&nbsp;"absolute");<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　$(alternate_select).css("width",&nbsp;original.offsetWidth&nbsp;+&nbsp;"px");<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　$(alternate_select).css("height",&nbsp;original.offsetHeight&nbsp;+&nbsp;"px");<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　$(alternate_select).css("top",&nbsp;"0px");<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　$(alternate_select).css("left",&nbsp;"0px");<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　$(alternate_select).css("cursor",&nbsp;"pointer");<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　$(alternate_select).text(<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　$($(original).children("option").filter(<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　　　function&nbsp;(index)&nbsp;{<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　　　　　return&nbsp;$(original).attr("value")&nbsp;===&nbsp;value;<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　　　}<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　)[0]<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　).text()<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　);<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　$(alternate_select).click(<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　function&nbsp;()&nbsp;{<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　$(original).css("visibility",&nbsp;"inherit");<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　document.body.removeChild(alternate);<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　}<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　);<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　$(alternate_select).hover(<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　function&nbsp;(event)&nbsp;{<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　$(this).css("background-color",&nbsp;"blue");<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　$(this).css("color",&nbsp;"white");<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　},<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　function&nbsp;(event)&nbsp;{<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　$(this).css("background-color",&nbsp;"inherit");<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　$(this).css("color",&nbsp;"inherit");<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　}<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　);<br />&nbsp;　&nbsp;　　　　　　　　　　　　}<br />&nbsp;　&nbsp;　　　　　　　　　　　　topOffset&nbsp;+=&nbsp;alternate_select.offsetHeight;<br />&nbsp;　&nbsp;　　　　　　　　　　　　{<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　$(original).children("option").each(<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　function&nbsp;(index,&nbsp;element)&nbsp;{<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　var&nbsp;alternate_option&nbsp;=&nbsp;document.createElement("div");<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　$(alternate).append(alternate_option);<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　$(alternate_option).css("position",&nbsp;"absolute");<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　$(alternate_option).css("width",&nbsp;element.offsetWidth&nbsp;+&nbsp;"px");<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　$(alternate_option).css("height",&nbsp;element.offsetHeight&nbsp;+&nbsp;"px");<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　$(alternate_option).css("top",&nbsp;topOffset&nbsp;+&nbsp;"px");<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　$(alternate_option).css("left",&nbsp;"0px");<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　$(alternate_option).css("cursor",&nbsp;"pointer");<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　$(alternate_option).text($(element).text());<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　var&nbsp;option_value&nbsp;=&nbsp;$(element).attr("value");<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　if&nbsp;(value&nbsp;===&nbsp;option_value)&nbsp;{<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　　　$(alternate_option).css("font-weight",&nbsp;"bold");<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　}<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　$(alternate_option).click(<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　　　function&nbsp;()&nbsp;{<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　　　　　$(original).attr("value",&nbsp;option_value);<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　　　　　$(original).css("visibility",&nbsp;"inherit");<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　　　　　document.body.removeChild(alternate);<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　　　}<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　);<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　$(alternate_option).hover(<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　　　function&nbsp;()&nbsp;{<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　　　　　$(this).css("background-color",&nbsp;"blue");<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　　　　　$(this).css("color",&nbsp;"white");<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　　　},<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　　　function&nbsp;()&nbsp;{<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　　　　　$(this).css("background-color",&nbsp;"inherit");<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　　　　　$(this).css("color",&nbsp;"inherit");<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　　　}<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　);<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　　　topOffset&nbsp;+=&nbsp;alternate_option.offsetHeight;<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　　　}<br />&nbsp;　&nbsp;　　　　　　　　　　　　　　);<br />&nbsp;　&nbsp;　　　　　　　　　　　　}<br />&nbsp;　&nbsp;　　　　　　　　　　　　$(alternate).css("position",&nbsp;"absolute");<br />&nbsp;　&nbsp;　　　　　　　　　　　　$(alternate).css("top",&nbsp;original.offsetTop&nbsp;+&nbsp;"px");<br />&nbsp;　&nbsp;　　　　　　　　　　　　$(alternate).css("left",&nbsp;original.offsetLeft&nbsp;+&nbsp;"px");<br />&nbsp;　&nbsp;　　　　　　　　　　　　$(alternate).css("width",&nbsp;alternate_select.offsetWidth&nbsp;+&nbsp;"px");<br />&nbsp;　&nbsp;　　　　　　　　　　　　$(alternate).css("height",&nbsp;topOffset&nbsp;+&nbsp;"px");<br />&nbsp;　&nbsp;　　　　　　　　　　　　$(alternate).css("background-image",&nbsp;"url(http://s.goumin.com/imgs/logo.gif)");<br />&nbsp;　&nbsp;　　　　　　　　　　}<br />&nbsp;　&nbsp;　　　　　　　　);<br />&nbsp;　&nbsp;　　　　　　}<br />&nbsp;　&nbsp;　　　　);<br />&nbsp;　&nbsp;　　&lt;/script&gt;<br />&nbsp;　&nbsp;&lt;/head&gt;<br />&nbsp;　&nbsp;&lt;body&gt;<br />&nbsp;　&nbsp;　　&lt;select&nbsp;id="select"&gt;<br />&nbsp;　&nbsp;　　　　&lt;option&nbsp;value="1"&gt;option&nbsp;1&lt;/option&gt;<br />&nbsp;　&nbsp;　　　　&lt;option&nbsp;value="2"&gt;option&nbsp;2&lt;/option&gt;<br />&nbsp;　&nbsp;　　　　&lt;option&nbsp;value="3"&gt;option&nbsp;3&lt;/option&gt;<br />&nbsp;　&nbsp;　　　　&lt;option&nbsp;value="4"&gt;option&nbsp;4&lt;/option&gt;<br />&nbsp;　&nbsp;　　&lt;/select&gt;<br />&nbsp;　&nbsp;&lt;/body&gt;<br />&lt;/html&gt;</div></div>]]>
      </summary>
      <category term="" label="AJAX" scheme="http://dev.mo.cn/cat_diary_2.html" />
   </entry>
   <entry>
      <title type="html">马上2012了,发今年最后一篇文章-使用C++开发IsapiFilter</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_322.html" />
      <updated>2011-12-31 20:54:38</updated>
      <published>2011-12-31 20:54:38</published>
      <id>http://dev.mo.cn/article_322.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;眼看要2012了，发现自己已经好几个月没有管自己的博客了，只能怪自己太懒。在2012来临之际，发篇关于用C++开发Isapi的文章，顺带将源码也发上来。<br />&nbsp;&nbsp;因为公司最近要开放免费主机，但是有个条件-在空间里面要强制加广告（但是可通过某些方式来取消），最初想的是去买一套别人的收费程序，直接放到服务器上使用，但是感觉成本太高（一套程序要1800，只能用在一台服务器上），因此有了自己开发的念头。<br />&nbsp;&nbsp;之前没有接触过C++，但是对它确实很是向往，于是就开始了边学边开发的过程，到目前为止，已经解决了所有问题，成功在客户网站上加入了自己指定的代码，达到了自己想要的效果，但是在这里就不发强制广告的源码了，现在发一个最基本的Isapi&nbsp;Filter的结构，用这个框架完全可以开发像IIS防盗链、URL重写等组件了。<br />&nbsp;&nbsp;MFC中已经实现了这些功能，最初的版本使用MFC做的，但是感觉太臃肿，最后抛弃MFC重新做了无MFC版本。<br />&nbsp;&nbsp;实现的功能：<br />&nbsp;&nbsp;1、获取Isapi&nbsp;Filter所在的目录。（没解决这个问题之前，用Isapi读取自己定义的配置文件很是麻烦-配置文件要放到固定目录）<br />&nbsp;&nbsp;2、已经实现的几个接口<br />DWORD&nbsp;OnUrlMap&nbsp;(PHTTP_FILTER_CONTEXT&nbsp;pfc,&nbsp;PHTTP_FILTER_URL_MAP&nbsp;pMapInfo)&nbsp;;&nbsp;&nbsp;<br />DWORD&nbsp;OnEndOfRequest(PHTTP_FILTER_CONTEXT&nbsp;pfc);&nbsp;&nbsp;&nbsp;&nbsp;<br />DWORD&nbsp;OnPreprocHeaders(PHTTP_FILTER_CONTEXT&nbsp;pfc,&nbsp;PHTTP_FILTER_PREPROC_HEADERS&nbsp;pHeaderInfo);<br />&nbsp;&nbsp;你可以根据自己需要来添加Isapi&nbsp;Filter感兴趣的通知，IIS支持如下通知：<br />#define&nbsp;SF_NOTIFY_SECURE_PORT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000001<br />#define&nbsp;SF_NOTIFY_NONSECURE_PORT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000002<br />#define&nbsp;SF_NOTIFY_READ_RAW_DATA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00008000<br />#define&nbsp;SF_NOTIFY_PREPROC_HEADERS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00004000<br />#define&nbsp;SF_NOTIFY_AUTHENTICATION&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00002000<br />#define&nbsp;SF_NOTIFY_URL_MAP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00001000<br />#define&nbsp;SF_NOTIFY_ACCESS_DENIED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000800<br />#define&nbsp;SF_NOTIFY_SEND_RESPONSE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000040<br />#define&nbsp;SF_NOTIFY_SEND_RAW_DATA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000400<br />#define&nbsp;SF_NOTIFY_LOG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000200<br />#define&nbsp;SF_NOTIFY_END_OF_REQUEST&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000080<br />#define&nbsp;SF_NOTIFY_END_OF_NET_SESSION&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000100<br /><br />这些通知可以在GetFilterVersion中添加，在HttpFilterProc添加相应的回调函数<br />&nbsp;&nbsp;3、提供一个最简单的向客户端输出文本的例子，hello程序：<br />&nbsp; &nbsp; &nbsp; &nbsp; char&nbsp;error_info[256]="HTTP/1.1&nbsp;200&nbsp;OK\r\nContent-Type:text/html\r\n\r\nHello,This&nbsp;is&nbsp;my&nbsp;first&nbsp;iis&nbsp;isapi&nbsp;filter!";<br />&nbsp; &nbsp; &nbsp; &nbsp; DWORD&nbsp;slen&nbsp;=&nbsp;strlen(error_info);<br />&nbsp; &nbsp; &nbsp; &nbsp; pfc-&gt;WriteClient(pfc,error_info,&slen,0);<br /><br />就这些，剩下的就看各位如何发挥了，网络上比较少见源码下载，这里就不掩藏了，下载地址如下<br /><a href="/upfiles/20111231204928222.rar" target="new">IIS_Filter_Example</a><br /><br />本代码在32位Windows&nbsp;2003、VC++6.0下编译通过，IIS6.0中的运行效果如下<br /><a onfocus="this.blur()" href="/upfiles/20111231205127231.JPG" target=new><img src="/upfiles/20111231205127231.JPG" border="0" alt="´ڴ" onload="javascript:if(this.width>560)this.width=560" /></a><br /><br />恭祝大家元旦快乐，给大家拜个早年咯！]]>
      </summary>
      <category term="" label="ISAPI相关" scheme="http://dev.mo.cn/cat_diary_26.html" />
   </entry>
   <entry>
      <title type="html">QQ登录ASP版(oauth1.0版本)</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_321.html" />
      <updated>2011-8-3 18:01:34</updated>
      <published>2011-8-3 18:01:34</published>
      <id>http://dev.mo.cn/article_321.html</id>
      <summary type="html">
      <![CDATA[QQ登录ASP版本，采用oauth1.0版本，配置简单，只要修改config.asp即可<br />将本文件所在的文件夹放在网站任何目录均可<br /><br /><a href="/source_201.html" target="new"><b><u><span style="font-size:18px;">下载地址</span></u></b></a><br /><br />=========================<br />1.配置文件config.asp<br /><br />'参数配置<br />'申请到的appid<br />const&nbsp;appid&nbsp;=&nbsp;"123456"<br />'申请到的appkey<br />const&nbsp;appkey&nbsp;=&nbsp;"76b8782476b8782476b8782476b87824"<br />'QQ登录成功后跳转的地址,请确保地址真实可用，否则会导致登录失败。<br />const&nbsp;callback&nbsp;=&nbsp;"http://XXXX.com/quickLogin/qq/returnAct.asp"<br /><br />申请地址：<a href="http://connect.opensns.qq.com/" target="new">http://connect.opensns.qq.com/</a><br /><br />示例地址：<a href="http://dev.mo.cn/quickLogin/qq/" target="new">http://dev.mo.cn/quickLogin/qq/</a>]]>
      </summary>
      <category term="" label="代码分享" scheme="http://dev.mo.cn/cat_diary_23.html" />
   </entry>
   <entry>
      <title type="html">艾恩ASP无组件上传+AspJpeg水印(图片和文字)</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_320.html" />
      <updated>2011-7-23 11:32:26</updated>
      <published>2011-7-23 11:32:26</published>
      <id>http://dev.mo.cn/article_320.html</id>
      <summary type="html">
      <![CDATA[艾恩ASP无组件上传+AspJpeg水印(图片和文字)<br />实例中同时包含了图片水印和文字水印功能<br />很久前就有人要，一直没整理出来，现在放出来供大家用<br />示例图片<br /><a onfocus="this.blur()" href="/upload_img/20110723113625954.jpg" target=new><img src="/upload_img/20110723113625954.jpg" border="0" alt="´ڴ" onload="javascript:if(this.width>560)this.width=560" /></a><br />下载地址：<a href="/upfiles/20110723113557690.rar" target="new"><b><span style="font-size:20px;">20110723113557690</span></b></a>]]>
      </summary>
      <category term="" label="无组件上传" scheme="http://dev.mo.cn/cat_diary_20.html" />
   </entry>
   <entry>
      <title type="html">【忍住】两部委：企业向个人赠送礼品三情形需缴个税</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_319.html" />
      <updated>2011-6-20 16:56:57</updated>
      <published>2011-6-20 16:56:57</published>
      <id>http://dev.mo.cn/article_319.html</id>
      <summary type="html">
      <![CDATA[中国经济网北京6月20日讯&nbsp;财政部和国家税务总局日前联合下发《关于企业促销展业赠送礼品有关个人所得税问题的通知》，通知中明确企业向个人赠送礼品，属于以下三种情形的，取得该项所得的个人应依法缴纳个人所得税，税款由赠送礼品的企业代扣代缴。<br /><br />这三种情形分别为：企业在业务宣传、广告等活动中，随机向本单位以外的个人赠送礼品，对个人取得的礼品所得，按照“其他所得”项目，全额适用20%的税率缴纳个人所得税。企业在年会、座谈会、庆典以及其他活动中向本单位以外的个人赠送礼品，对个人取得的礼品所得，按照“其他所得”项目，全额适用20%的税率缴纳个人所得税。企业对累积消费达到一定额度的顾客，给予额外抽奖机会，个人的获奖所得，按照“偶然所得”项目，全额适用20%的税率缴纳个人所得税。<br /><br />通知要求，企业赠送的礼品是自产产品（服务）的，按该产品（服务）的市场销售价格确定个人的应税所得；是外购商品（服务）的，按该商品（服务）的实际购置价格确定个人的应税所得。<br /><br />此外，通知还明确了企业在销售商品(产品)和提供服务过程中向个人赠送礼品，属于三种情形之一的，不征收个人所得税。这三种情形为：企业通过价格折扣、折让方式向个人销售商品(产品)和提供服务；企业在向个人销售商品(产品)和提供服务的同时给予赠品，如通信企业对个人购买手机赠话费、入网费，或者购话费赠手机等；企业对累积消费达到一定额度的个人按消费积分反馈礼品。<br />]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">SEO-新站关键词的几个布局技巧</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_318.html" />
      <updated>2011-6-17 18:04:33</updated>
      <published>2011-6-17 18:04:33</published>
      <id>http://dev.mo.cn/article_318.html</id>
      <summary type="html">
      <![CDATA[一个新站关键词的合理布局是十分重要的，特别是对于一个新手站长来说，对网站的关键词布局一直是一件头疼的事情，那么我们应该如何对一个新站进行关键词布局呢？下面我们就一起来探讨一下新站的关键词的布局。<br /><br />在我们进行关键词布局之前应该了解金字塔原理，金字塔原理是由一个总的核心，在由这个核心像下面依次递增。那么我们对关键词进行进行布局的时候也应该遵循这个原理，就是把最重要的关键词做为网站的核心关键词，然后把次一点的关键词或者竞争小一点的关键词作为目录也的关键词，最后把竞争极小或者长尾关键词作为内容页的关键词来进行优化。这样就形成一个最简单的金字塔远离。<br /><br /><b>一，网站核心关键词布局</b><br />一般对于网站的核心关键词（也就是网站的主关键词）设置2-4个即可，如果核心关键词设置过多不利其他关键词的权重集中，也就不利于排名。并且我们在选择网站的主关键词的时候应该考虑到网站的内容建设，或者网站的内容根本就是围绕这些关键词而进行开展。而在这之前我们应该都关键词进行一个大致分析，关键词的分析可以使用百度指数和一些关键词分析工具等。这样可以大致了解关键词热度以及竞争度。<br /><br /><b>二，栏目页（目录页）的关键词布局</b><br />首先网站的各个栏目的建立是根据网站的内容或者针对关键词进行用户需求分析之后而展开的。而不是盲目的，随便的建立的，一定要考虑的用户的需求。那么我们知道，一个网站的权重基本都集中的网站首页，网站的栏目页面是网站权重集中的第二个地方。<br /><br />栏目页的关键词一定要根据内容和用户需求而展开，要与栏目的内容具有充分的相关性，并且栏目页的关键词的热度应该小于首页关键词的热度，这样才有利于竞争和排名。栏目页的关键词一般布局2-4个即可。<br /><br /><b>三、文章页或者产品页关键词布局</b><br />栏目页或者产品页应该重复去挖掘网站的长尾关键词或者竞争相对较小的关键词来进行布局使用。那么我们就可以使用百度指数或者关键词挖掘工具等，大量的挖掘与网站相关的长尾关键词，并针对这些长尾关键词进行内容建设。并且在布局这些长尾关键词的时候不仅仅要与网站具有相关性，还应该与各个栏目具有充分的相关性。这样才有利于文章页（产品页）关键词排名和栏目页关键词排名。而且这样设置保证了文章页（产品页）的关键词与栏目也和首页的关键词环环相扣，与主题具有充分的相关性，还保证了长尾关键词的合理使用。<br /><br />总结：在关键词的布局过程中应该保持一个清晰的思维或者计划，不能胡乱设置，文章页，栏目页和主题的关键词保持环环相扣，并具有充分的相关性，这样有利于整站权重的分配，并且有利于关键词在搜索引擎中的排名。&nbsp;]]>
      </summary>
      <category term="" label="其他" scheme="http://dev.mo.cn/cat_diary_18.html" />
   </entry>
   <entry>
      <title type="html">网站SEO优化要把握的核心元素</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_317.html" />
      <updated>2011-6-17 16:54:26</updated>
      <published>2011-6-17 16:54:26</published>
      <id>http://dev.mo.cn/article_317.html</id>
      <summary type="html">
      <![CDATA[很多站长都在给自己的网站做SEO，都想竭尽全力的提升网站关键词的排名，但是这个过程是因不同的行业其困难程度是不同的，所以一些站长做起了以长尾词为关键词的网站，这类词的转化率较高，同时也较多人搜索，因此也不失为一种好办法。其实不论做什么类型的关键词，做SEO都必须把握其中几个最主要的元素，这些元素看似很简单，但是在实际中我们可能会疏忽或者忘记，下边一一和大家介绍。<br /><br /><b>文字与图片</b><br />文字多图片少并不是必须的，但是考虑到SEO的话，这个几乎是最好的选择。搜索引擎爬行的是文字而不是图片，用户搜索的词也是文字而不是图片，因此图片只是作为一个点缀（有些网站除外），有些网站在做站过程中不知不觉的就采用了大量的图片，这样其实并不友好搜索引擎，记得要把握这个大原则，尽量少用图片。<br /><br /><b>处理速度</b><br />Google已经明确表示了网站的打开速度会影响关键词排名，对于百度而言，我相信如果蜘蛛去爬行的话还要等半天的时间，那么肯定不会给予过高的权重。打开速度快另外一个好处就是对于用户，我们辛辛苦苦做推广，拉来一个客户的成本是非常高的，结果因为网速问题而把客户流失掉将是非常可惜的。<br /><br /><b>标签运用</b><br />标签的作用不容小觑，一个合理的标签对于搜索引擎而言就相当于一句温暖人心的话一样令人印象深刻，所以网站在各个位置使用标签产生的作用是非常大的，比如首页可以加粗，比如文章标题一定要使用H标签，比如一些长尾词记的使用斜体或者加深颜色，这样都可以一定程度上提醒用户和搜索引擎，这些词语的与众不同。虽然这是一个小小的细节，但整体上，意义非凡。<br /><br /><b>内链控制</b><br />这里为什么说是内链控制元素呢？因为对于一些不经常使用的链接要使用nofollow屏蔽掉，这样能有效的控制权重流失。如果是小型网站，那么问题不大，如果是稍有规模的大站，那么这些没有多大用出的全站链接是非常占用权重的。另外就是平时提的内部链接了，这是关键词优化的一个核心元素，一个页面优化一个关键词，在别的地方一旦出现这个关键词就回链到这个页面URL上，这就是一个非常经典凑效的内链优化。<br /><br /><b>静态化路径</b><br />网址URL一直以来都是收录时一个重要的格式，不同格式的URL对收录影响很大，虽然现在搜索引擎支持动态路径，但是如果参数过多，那么权重肯定降低，所以在有机会的条件下一定要把URL好好优化一下，即使自己不会，也可以请人来做，这个是必须的，当网站的内容越来越多，你就会体会到静态化的路径是多么有利。<br /><br /><b>核心外链</b><br />现在搜索引擎的算法虽然说一直在变化，但是万变不离其宗，在主要的方面，可以说还是以前大家所谈论的这些内容。外部链接就是其中相当重要的一个环节，道理也很简单，这是搜索引擎的核心算法之一，它暂时不会更新主要算法，即使更新，也是慢慢再变化。所以，我们的重点依旧还要放在外部链接上面。<br /><br />网站做SEO除了上边提到的几点之外，还有很重要的就是耐心，一个好的网站并不一定立马会有好的排名，等到一定的时候，搜索引擎信任你的时候，那么网站就是真正成熟的时候。所以，保持稳定的前提下，最重要的就是做好这几个核心元素。]]>
      </summary>
      <category term="" label="其他" scheme="http://dev.mo.cn/cat_diary_18.html" />
   </entry>
   <entry>
      <title type="html">第一次写SqlServer自定义函数IP2Long-将IP转换为整数</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_316.html" />
      <updated>2011-6-11 12:59:40</updated>
      <published>2011-6-11 12:59:40</published>
      <id>http://dev.mo.cn/article_316.html</id>
      <summary type="html">
      <![CDATA[第一次写Sqlserver自定义函数，呵呵，自己写的分割算法，肯定不是最好的方法，慢慢学习吧<br />调用方法:select&nbsp;dbo.IP2Long('211.87.139.21')<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />CREATE&nbsp;FUNCTION&nbsp;[dbo].[IP2Long]&nbsp;(@ip&nbsp;varchar(15))&nbsp;&nbsp;<br />RETURNS&nbsp;bigint&nbsp;AS&nbsp;&nbsp;<br />BEGIN&nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; declare&nbsp;@ip1&nbsp;int;<br />&nbsp; &nbsp; &nbsp; &nbsp; declare&nbsp;@ip2&nbsp;bigint;<br />&nbsp; &nbsp; &nbsp; &nbsp; declare&nbsp;@cindex&nbsp;int;<br />&nbsp; &nbsp; &nbsp; &nbsp; declare&nbsp;@i&nbsp;int;<br />&nbsp; &nbsp; &nbsp; &nbsp; set&nbsp;@ip1&nbsp;=&nbsp;0;<br />&nbsp; &nbsp; &nbsp; &nbsp; set&nbsp;@ip2&nbsp;=&nbsp;0;<br />&nbsp; &nbsp; &nbsp; &nbsp; set&nbsp;@cindex=charindex('.',@ip,1);<br />&nbsp; &nbsp; &nbsp; &nbsp; set&nbsp;@i=3;<br />&nbsp; &nbsp; &nbsp; &nbsp; if(@cindex&lt;=0)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;-1;<br />&nbsp; &nbsp; &nbsp; &nbsp; while(@cindex&gt;0)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; begin<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set&nbsp;@ip1&nbsp;=&nbsp;cast(substring(@ip,1,@cindex-1)&nbsp;as&nbsp;int);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set&nbsp;@ip2&nbsp;=&nbsp;@ip2&nbsp;+&nbsp;cast(@ip1&nbsp;as&nbsp;bigint)&nbsp;*&nbsp;power(256&nbsp;,@i);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set&nbsp;@ip&nbsp;=&nbsp;substring(@ip,@cindex+1,datalength(@ip)-@cindex+1);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set&nbsp;@cindex&nbsp;=&nbsp;charindex('.',@ip,1);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set&nbsp;@i=@i-1;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end<br />&nbsp; &nbsp; &nbsp; &nbsp; if(@i&lt;&gt;0)<br />&nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;-1;<br />&nbsp; &nbsp; &nbsp; &nbsp; set&nbsp;@ip1&nbsp;=&nbsp;cast(@ip&nbsp;as&nbsp;int);<br />&nbsp; &nbsp; &nbsp; &nbsp; set&nbsp;@ip2&nbsp;=&nbsp;@ip2&nbsp;+&nbsp;cast(@ip1&nbsp;as&nbsp;bigint)&nbsp;*&nbsp;power(256&nbsp;,@i);<br />return&nbsp;@ip2<br />END<br /></div></div>]]>
      </summary>
      <category term="" label="SQL" scheme="http://dev.mo.cn/cat_diary_24.html" />
   </entry>
   <entry>
      <title type="html">据说看了这两张图能减肥</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_315.html" />
      <updated>2011-6-11 1:06:49</updated>
      <published>2011-6-11 1:06:49</published>
      <id>http://dev.mo.cn/article_315.html</id>
      <summary type="html">
      <![CDATA[<a onfocus="this.blur()" href="/upload_img/20110611010546774.jpg" target=new><img src="/upload_img/20110611010546774.jpg" border="0" alt="´ڴ" onload="javascript:if(this.width>560)this.width=560" /></a><br /><a onfocus="this.blur()" href="/upload_img/20110611010558267.jpg" target=new><img src="/upload_img/20110611010558267.jpg" border="0" alt="´ڴ" onload="javascript:if(this.width>560)this.width=560" /></a><br />据说看了之后可以减肥啊！<br />不过心理学老师陆霭霞则表示，目前没有看过相关的研究，所以无法确定是否真的有其效果。&nbsp;网络上疯传的「减肥神图」号称是靠着色彩心理暗示瘦身法，让人看到后食欲降低达到减肥作用。&nbsp;其中一张图上画满密密麻麻的点，颜色鲜明缤纷，据说是可以镇定神经，促进肠胃蠕动；另外一张则是运用简单的黄橘色和黑色色块叠合，并且称黄色是对胃、黑色对肾，两种结合可以降低食欲！！！<br />]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">好久没发东西了，发布个Ajax类，类似jQuery的</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_314.html" />
      <updated>2011-6-10 22:30:02</updated>
      <published>2011-6-10 22:30:02</published>
      <id>http://dev.mo.cn/article_314.html</id>
      <summary type="html">
      <![CDATA[下载地址：<a href="http://dev.mo.cn/source_200.html" target="new">http://dev.mo.cn/source_200.html</a><br />其实这个东西写了很久了，自己一直在使用，我们公司的网站<a href="http://www.eb.com.cn" target="new">http://www.eb.com.cn</a>的Ajax全部是用的这个东西<br />压缩包里面包含了详细的说明和示例（里面有一个简洁的省市三级联动菜单哦）。<br />调用方法类似jQuery，可以绑定form表单提交<br />如果你只使用jQuery的Ajax功能的话，可以抛弃jQuery了<br /><br />Ajax&nbsp;Class&nbsp;of&nbsp;Aien<br />Author&nbsp;:&nbsp;Aien<br />homepage&nbsp;:&nbsp;http://dev.mo.cn<br />email&nbsp;:&nbsp;i@ruboy.com<br />QQ&nbsp;:&nbsp;1034555083&nbsp;<br />Thanks&nbsp;for&nbsp;using&nbsp;this&nbsp;class.&nbsp;You&nbsp;can&nbsp;visit&nbsp;my&nbsp;homepage&nbsp;for&nbsp;help&nbsp;.<br />You&nbsp;can&nbsp;use&nbsp;this&nbsp;class&nbsp;and&nbsp;don't&nbsp;need&nbsp;to&nbsp;change&nbsp;any&nbsp;code&nbsp;.<br /><br />]]>
      </summary>
      <category term="" label="AJAX" scheme="http://dev.mo.cn/cat_diary_2.html" />
   </entry>
   <entry>
      <title type="html">这就是男生…很犀利很现实…一语道破！！！（90%是真实的）</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_313.html" />
      <updated>2011-5-31 21:36:36</updated>
      <published>2011-5-31 21:36:36</published>
      <id>http://dev.mo.cn/article_313.html</id>
      <summary type="html">
      <![CDATA[1.每个男生都好色，不好色的男生我还没见过，只不过是色的程度不同。<br />　　2.在宿舍里，男生只聊两个话题，学习和女生。谈学习，就是骂老师骂学校骂班干部　　；谈女生，就会评比谁的脸蛋漂亮，谁的身材苗条。每个男生都喜欢美女，不管他嘴上是不是承认。不是男生犯贱，男人的天性如此。所以女同学必要的时候学会打扮一下吧，会减少被讽刺的机会。<br />　　3.男生都喜欢衣着得体、落落大方的女生，但是普遍对浓妆妖艳的女人感到恶心。<br />　　4.对你的身材不必太在意，男生基本上只羡慕明星的魔鬼身材，而大多数说不会找一个这样的老婆。<br />　　5.如果你气质够好的话，无论长相身材如何，都不必担心会被男生拿来开玩笑，女生的气质比脸蛋重要。如果都没有的话，那就学会微笑。<br />　　6.男生基本上都喜欢笨女孩（除了做饭洗衣服）。我不知道为什么，但事实如此，心眼太多的女孩男生或多或少都会反感。所以你即使不笨，还是要‘傻’一点好。但是记住，所有男生非常讨厌女人做作，非常非常非常地讨厌。<br />　　7.即使再花心的男生，在他内心深处也会有一个一直深爱的女孩，而且，只有一个。男生会认真的照顾，爱护自己的女朋友一生一世，但可能她并不是他心底深处爱的那个女孩，但是千万不要以为这是男生的不忠，因为男生知道什么是现实，知道什么才是应该做的。这个女孩是谁，除非他潜意识失控，否则谁也不知道。<br />　　8.男生是思维动物，靠理智生活，喜欢有步骤，有计划，有目的的行事。男生大部分喜欢会撒娇的女生，但是如果无理取闹的话，基本上离分手不远了。如果在唠唠叨叨，磨磨唧唧，不给男生自由思考的空间，哪明天就是末日。<br />　　9.不要以为男生没感觉，谁对他好，谁对他不好，男生能感觉出来，会记在心里。不过有例外，男生做错了，直接告诉他，别让他猜，一般靠思维生活的男生凭感觉猜不出来，而且反感。<br />　　10.女生追男生的话，是非常容易的。但是如果男生不愿意，放弃吧，肯定追不到。为什么？原因非常非常多。<br />　　11.男人有钱就变坏，尤其是商人。不信你会后悔。<br />　　12.男生主动和女生交往，尤其是漂亮的女生，基本上不只是只想交个朋友而已，差不多都没安什么好心。<br />　　13.大多数男生都爱面子，甚至面子比命都重要。如果是另一个男生不给他面子，结果可能会打一仗。而女生不给他面子，后果只有更严重。所以如果你不想跟他手的话，可以私下批评他，但不要当着他朋友的面给他难堪。如果想分手，没有比让他当众出丑更有效的了。对了，千万别给男朋友戴绿帽子。<br />　　14.如果一个男生喜欢一个女生：他会找借口送女生东西&nbsp;；女生有事求他,他会很乐<br />意去做,并且高效率完成；他会.给女生取外号；他会喜欢做一些事情吸引女生的注意；他会总盯着那个女生；他会捉弄自己喜欢的女生；他会摸女生的头；他会故意和那个女生斗嘴，惹女生生气。<br />　　15.如果一个男生从心底爱一个女生：单独在一起时，他会很尴尬，看到她的时候会害羞&nbsp;说话都说不连贯&nbsp;；不会很快回那个女生的短信，而是会改了又改才发出去；装作不在乎她,心里却总是挂念她；女生拜托他的事情,就算再难再艰巨，他也会答应，会做好；最重要的是，即使他和全世界都知道是这个女生错了，他还是会站在女生这边。<br />　　12.男生的忍耐也是有限的。<br />　　13.男生总会女生说：我一生中最爱的人是你。其实，就算不遇到你，他也会与其他的女人一见钟情。<br />　　14.男人，心里都曾梦想过自己的另一半是个什么样子。比如身高，身材，脸蛋，性格，甚至发型等等，但是这个人基本不存在。所以，如果和男生吵架时，他说对你的脸蛋，身材等等不满意。别在意，他是拿你和一个不存在的幻想比较呢，没有实际意义，过后他们并不会真的挑剔对方。<br />　　15.男生最怕女生说他没能力，没安全感，其实每一个男生都在或明或暗的努力着，　没有不知上进的男生，上进争强是所有雄性动物的天性。不要对男生要求的太过分，总说男生不如谁谁，从女生那里，男生需要的是更多的肯定。<br />　　14.男生普遍的认为，钱是挣不完的，富贵有命，挣多少花多少。所以你逼男生拼命地挣钱，男生会反感。<br />　　15.吃饭的时候，女生想点什么就点，别跟男生磨磨叽叽的，男生都讨厌这样的人。<br />　　16.男生对女生说的谎话比女生平时说的谎话还多，但有的时候是为了与女生更好的相处，有的时候是被女生逼的。<br />　　17.现在还有很多重视处女情结的男生，所以。。。。不要挥霍了青春，最后才想到把生活的　　责任交给另一个男生。大部分男生说不会再要这样的女人。<br />　　18.男生和女生上床不一定是爱她，我听到许多“再玩玩就把她踹了。”的话出自我认识的男生嘴里。人心不古是没办法的事.。<br />　　19.好男生还是有很多的，学会看他的眼睛。]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">精神病人知识广，弱智儿童欢乐多</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_312.html" />
      <updated>2011-5-27 21:14:26</updated>
      <published>2011-5-27 21:14:26</published>
      <id>http://dev.mo.cn/article_312.html</id>
      <summary type="html">
      <![CDATA[俗话说的好：精神病人知识广，弱智儿童欢乐多&nbsp;<br /><br />一篇帖子在疯人院引发了如下血案……<br /><br />如果你在长沙的同学很久没联系你了，请不要责怪他们，他们可能已经&nbsp;&nbsp;1.突然热死了，2.突然冷死了，3.被风吹走了。（悲惨的长沙亲）<br /><br />如果你一个名字第二个字是"jia"的同学很久没联系你了，请不要责怪他们，他们可能已经被枪毙了。&nbsp;（药家鑫，马加爵，杨佳……）<br /><br />如果你学新闻的同学很久没联系你了，请不要责怪他们，他们可能已经&nbsp;1.被假新闻残害了，2.被当事者棒击了，3.被真新闻和谐了。（）<br /><br />如果你在故宫工作的同学很久没联系你了，请不要责怪他们，他们可能已经&nbsp;被人偷走了。（不解释）<br /><br />如果你学设计的同学很久没联系你了，请不要责怪他们，他们可能已经&nbsp;1.被3D马克思带走了，2.被CAD逼死了，3.被FL闪死了。（学设计的伤不起）<br /><br />如果你一个玩人人小组的同学很久没联系你了，请不要责怪他们，他们可能已经&nbsp;1.当组长忙死了，2.当管理员被组长抓去做苦工了。（辛苦鸟）<br /><br />如果你在清华的同学很久没联系你了，请不要责怪他们，他们可能已经去真维斯楼了。（清华大学新闻学院院长李希光教授：“‘真维斯’是‘真理维护者居于斯’。”&nbsp;那么下回可以是杰士邦：“杰出人士居此邦”）<br /><br />如果你在长江中下游的同学很久没联系你了，请不要责怪他们，他们可能已经渴死了。（大旱）<br /><br />如果你一个玩摄影的同学很久没联系你了，请不要责怪他们，他们可能已经&nbsp;1.被别人的设备气死了，2.买设备攒钱饿死了，3.买完设备穷死了，4.买完后看到更好的设备愤懑而终。（单反穷三代）<br /><br />如果你一个姓奥的同学很久没联系你了，请不要责怪他们，他们可能已经被奥巴马干掉了！！！奥特曼你小心点！！！（奥萨马，奥马尔都挂了。大亮！！）<br /><br />如果你一个疯疯癫癫的同学很久没联系你了，请不要责怪他们，他们可能已经&nbsp;1.飞升了，2.渡劫失败了。（情何以堪，一个MM回复的）<br /><br />如果你刚刚结婚的同学很久没联系你了，请不要责怪他们，他们可能已经&nbsp;1.被老婆逼死了，2.被老婆耗死了，3.被老婆弄死了，4.把老婆弄死后自杀了。（婚姻是爱情的坟墓？）<br /><br />如果你做程序员的同学很久没联系你了，请不要责怪他们，他们可能已经&nbsp;1.被代码逼死了，2.被BUG吃了。（程序员更伤不起）<br /><br />如果你在人人疯人院群里的同学突然不说话了，请不要责怪他们，他们可能已经&nbsp;1.被院长抓来求队形回复了，2.还是被院长抓来求队形回复了。&nbsp;（院长，你……）<br /><br />如果你玩人人的同学很久没联系你了，请不要责怪他们，他们可能已经&nbsp;1.蛋疼疼死了，2.乳酸酸死了。<br /><br />如果你做城管的同学很久没联系你了，请不要责怪他们，他们可能已经被卖炸串的杀了。<br /><br />如果你有当幼教的同学很久没联系你了，请不要责怪他们，他们可能已经&nbsp;1.被小萝莉们萌死了，2.被小正太们萌死了。<br /><br />如果你餐饮的同学很久没联系你了，请不要责怪他们，他们可能已经喝了三聚氰胺或者吃了地沟油，永远的离开我们了。<br /><br />如果你学金融的同学很久没有联系你了，请不要责怪他们，他们可能已经1、爆仓了2、爆仓了3、彻底爆仓了。<br /><br />如果有一个学历史的同学很久没有联系你了，请不要责怪他们，他们可能已经穿越了！！<br /><br />大家的补充：<br /><br />如果有一个上军校的同学很久没有联系你了，请不要责怪他们，因为他们可能已经1、训练累死了2、唱红歌恶心死了3、寂寞死了！！！<br /><br />如果有一个立构作业要展览的同学很久没有联系你了，请不要责怪他们，他们可能已经丢人丢死了！！<br /><br />如果你有研究生同学很久没联系你了，请不要责怪他们，他们可能已经&nbsp;1.被老板加班累死了，2.被老板加班累死了，3.被老板加班累死了。<br /><br />回复于洪:如果你学声乐的同学很久没有联系你了，请不要责怪他们，他们可能1、练声累死了2、音乐会前紧张死了3、演唱滴太好被那些伟大的作曲家带走了。<br /><br />如果有一个学英语的同学很久没联系你了，请不要怪他们，他们可能：1、出国了；2、去新东方了；3、当了2N被收藏了；4、装B被打死了。。。。。<br /><br />如果你做网编的朋友很久没有联系你，1.他给站长给累死了。2.他被百度蜘蛛给弄死了。3，他被关键词彻底的吃掉了。<br />]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">我能想到最浪漫的事，就是和你一起慢慢变老</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_311.html" />
      <updated>2011-5-20 9:00:57</updated>
      <published>2011-5-20 9:00:57</published>
      <id>http://dev.mo.cn/article_311.html</id>
      <summary type="html">
      <![CDATA[我能想到最浪漫的事，就是和你一起慢慢变老；<br />20岁,40岁,60岁,80岁。。。。<br /><a onfocus="this.blur()" href="http://dev.mo.cn/upfiles/20110520085806011.jpg" target=new><img src="http://dev.mo.cn/upfiles/20110520085806011.jpg" border="0" alt="´ڴ" onload="javascript:if(this.width>560)this.width=560" /></a>]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">一道终身受用的测试题</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_310.html" />
      <updated>2011-5-17 9:12:57</updated>
      <published>2011-5-17 9:12:57</published>
      <id>http://dev.mo.cn/article_310.html</id>
      <summary type="html">
      <![CDATA[【一道终身受用的测试题】<br />你开着一辆车。在一个暴风雨的晚上。<br />你经过一个车站。<br />有三个人正在焦急的等公共汽车。　<br />一个是快要临死的老人，他需要马上去医院。<br />一个是医生，他曾救过你的命，你做梦都想报答他。<br />还有一个女人/男人，她/他是你做梦都想娶/嫁的人，也许错过就没有了。<br />但你的车只能在坐下一个人，你会如何选择？]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">SELECTINTO和INSERTINTOSELECT两种表复制语句</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_309.html" />
      <updated>2011-5-12 11:48:26</updated>
      <published>2011-5-12 11:48:26</published>
      <id>http://dev.mo.cn/article_309.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Insert是T-sql中常用语句，Insert&nbsp;INTO&nbsp;table(field1,field2,...)&nbsp;values(value1,value2,...)这种形式的在应用程序开发中必不可少。但我们在开发、测试过程中，经常会遇到需要表复制的情况，如将一个table1的数据的部分字段复制到table2中，或者将整个table1复制到table2中，这时候我们就要使用SELECT&nbsp;INTO&nbsp;和&nbsp;INSERT&nbsp;INTO&nbsp;SELECT&nbsp;表复制语句了。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.INSERT&nbsp;INTO&nbsp;SELECT语句<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;语句形式为：Insert&nbsp;into&nbsp;Table2(field1,field2,...)&nbsp;select&nbsp;value1,value2,...&nbsp;from&nbsp;Table1<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;要求目标表Table2必须存在，由于目标表Table2已经存在，所以我们除了插入源表Table1的字段外，还可以插入常量。示例如下：<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />--1.创建测试表<br />&nbsp;&nbsp;&nbsp;&nbsp;create&nbsp;TABLE&nbsp;Table1<br />&nbsp;&nbsp;&nbsp;&nbsp;(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;varchar(10),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;varchar(10),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;varchar(10),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CONSTRAINT&nbsp;[PK_Table1]&nbsp;PRIMARY&nbsp;KEY&nbsp;CLUSTERED<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;ASC<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;ON&nbsp;[PRIMARY]<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;create&nbsp;TABLE&nbsp;Table2<br />&nbsp;&nbsp;&nbsp;&nbsp;(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;varchar(10),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;varchar(10),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;int,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CONSTRAINT&nbsp;[PK_Table2]&nbsp;PRIMARY&nbsp;KEY&nbsp;CLUSTERED<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;ASC<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;ON&nbsp;[PRIMARY]<br />&nbsp;&nbsp;&nbsp;&nbsp;GO<br />&nbsp;&nbsp;&nbsp;&nbsp;--2.创建测试数据<br />&nbsp;&nbsp;&nbsp;&nbsp;Insert&nbsp;into&nbsp;Table1&nbsp;values('赵','asds','90')<br />&nbsp;&nbsp;&nbsp;&nbsp;Insert&nbsp;into&nbsp;Table1&nbsp;values('钱','asds','100')<br />&nbsp;&nbsp;&nbsp;&nbsp;Insert&nbsp;into&nbsp;Table1&nbsp;values('孙','asds','80')<br />&nbsp;&nbsp;&nbsp;&nbsp;Insert&nbsp;into&nbsp;Table1&nbsp;values('李','asds',null)<br />&nbsp;&nbsp;&nbsp;&nbsp;GO<br />&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;*&nbsp;from&nbsp;Table2<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;--3.INSERT&nbsp;INTO&nbsp;SELECT语句复制表数据<br />&nbsp;&nbsp;&nbsp;&nbsp;Insert&nbsp;into&nbsp;Table2(a,&nbsp;c,&nbsp;d)&nbsp;select&nbsp;a,c,5&nbsp;from&nbsp;Table1<br />&nbsp;&nbsp;&nbsp;&nbsp;GO<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;--4.显示更新后的结果<br />&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;*&nbsp;from&nbsp;Table2<br />&nbsp;&nbsp;&nbsp;&nbsp;GO<br />&nbsp;&nbsp;&nbsp;&nbsp;--5.删除测试表<br />&nbsp;&nbsp;&nbsp;&nbsp;drop&nbsp;TABLE&nbsp;Table1<br />&nbsp;&nbsp;&nbsp;&nbsp;drop&nbsp;TABLE&nbsp;Table2<br /></div></div><br /><br />2.SELECT&nbsp;INTO&nbsp;FROM语句<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;语句形式为：SELECT&nbsp;vale1,&nbsp;value2&nbsp;into&nbsp;Table2&nbsp;from&nbsp;Table1<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;要求目标表Table2不存在，因为在插入时会自动创建表Table2，并将Table1中指定字段数据复制到Table2中。示例如下：<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />--1.创建测试表<br />&nbsp;&nbsp;&nbsp;&nbsp;create&nbsp;TABLE&nbsp;Table1<br />&nbsp;&nbsp;&nbsp;&nbsp;(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;varchar(10),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;varchar(10),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;varchar(10),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CONSTRAINT&nbsp;[PK_Table1]&nbsp;PRIMARY&nbsp;KEY&nbsp;CLUSTERED<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;ASC<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;ON&nbsp;[PRIMARY]<br />&nbsp;&nbsp;&nbsp;&nbsp;GO<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;--2.创建测试数据<br />&nbsp;&nbsp;&nbsp;&nbsp;Insert&nbsp;into&nbsp;Table1&nbsp;values('赵','asds','90')<br />&nbsp;&nbsp;&nbsp;&nbsp;Insert&nbsp;into&nbsp;Table1&nbsp;values('钱','asds','100')<br />&nbsp;&nbsp;&nbsp;&nbsp;Insert&nbsp;into&nbsp;Table1&nbsp;values('孙','asds','80')<br />&nbsp;&nbsp;&nbsp;&nbsp;Insert&nbsp;into&nbsp;Table1&nbsp;values('李','asds',null)<br />&nbsp;&nbsp;&nbsp;&nbsp;GO<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;--3.SELECT&nbsp;INTO&nbsp;FROM语句创建表Table2并复制数据<br />&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;a,c&nbsp;INTO&nbsp;Table2&nbsp;from&nbsp;Table1<br />&nbsp;&nbsp;&nbsp;&nbsp;GO<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;--4.显示更新后的结果<br />&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;*&nbsp;from&nbsp;Table2<br />&nbsp;&nbsp;&nbsp;&nbsp;GO<br />&nbsp;&nbsp;&nbsp;&nbsp;--5.删除测试表<br />&nbsp;&nbsp;&nbsp;&nbsp;drop&nbsp;TABLE&nbsp;Table1<br />&nbsp;&nbsp;&nbsp;&nbsp;drop&nbsp;TABLE&nbsp;Table2<br /></div></div>]]>
      </summary>
      <category term="" label="SQL" scheme="http://dev.mo.cn/cat_diary_24.html" />
   </entry>
   <entry>
      <title type="html">PHP新手用的Insert和Update语句构造类</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_308.html" />
      <updated>2011-4-20 14:46:39</updated>
      <published>2011-4-20 14:46:39</published>
      <id>http://dev.mo.cn/article_308.html</id>
      <summary type="html">
      <![CDATA[PHP新手用的Insert和Update语句构造类，没多大功能，使用方法<br />$mysql&nbsp;=&nbsp;new&nbsp;sqlstr("table1");<br />$mysql-&gt;set("name","value");<br />$mysql-&gt;set("name","1",true);<br />echo&nbsp;$mysql-&gt;insertSql();<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />class&nbsp;sqlstr<br />{<br />&nbsp; &nbsp; &nbsp; &nbsp; private&nbsp;$param=array();<br />&nbsp; &nbsp; &nbsp; &nbsp; private&nbsp;$tablename;<br />&nbsp; &nbsp; &nbsp; &nbsp; function&nbsp;sqlstr($tablename)<br />&nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;tablename&nbsp;=&nbsp;$tablename;<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; public&nbsp;function&nbsp;set($name,$value,$isnum=false){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $value&nbsp;=&nbsp;str_replace("'","''",$value);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;param[$name]=array($value,$isnum);<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; public&nbsp;function&nbsp;insertSql(){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $keys="";<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $values="";<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; foreach($this-&gt;param&nbsp;as&nbsp;$key&nbsp;=&gt;$value){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $keys&nbsp;=&nbsp;$keys&nbsp;.&nbsp;$key&nbsp;.&nbsp;",";<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if($value[1]){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $values&nbsp;=&nbsp;$values&nbsp;.&nbsp;$value[0]&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; $values&nbsp;=&nbsp;$values&nbsp;.&nbsp;"'"&nbsp;.&nbsp;$value[0]&nbsp;.&nbsp;"',";<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if($keys!=""){$keys=substr($keys,0,strlen($keys)-1)&nbsp;;}<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if($values!=""){$values=substr($values,0,strlen($values)-1)&nbsp;;}<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;"insert&nbsp;into&nbsp;"&nbsp;.$this-&gt;tablename&nbsp;."($keys)&nbsp;values($values)";<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; public&nbsp;function&nbsp;updateSql($cond){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $group="";<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; foreach($this-&gt;param&nbsp;as&nbsp;$key&nbsp;=&gt;$value){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $group&nbsp;.=&nbsp;$key&nbsp;.&nbsp;"=";<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if($value[1]){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $group.=&nbsp;$value[0]&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; $group.=&nbsp;"'"&nbsp;.&nbsp;$value[0]&nbsp;.&nbsp;"',";<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if($group!=""){$group=substr($group,0,strlen($group)-1)&nbsp;;}<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;"update&nbsp;"&nbsp;.&nbsp;$this-&gt;tablename&nbsp;."&nbsp;set&nbsp;$group&nbsp;where&nbsp;"&nbsp;.&nbsp;$cond;<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />}<br /></div></div>]]>
      </summary>
      <category term="" label="代码分享" scheme="http://dev.mo.cn/cat_diary_23.html" />
   </entry>
   <entry>
      <title type="html">谷歌穿越搜索咆哮版</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_307.html" />
      <updated>2011-4-1 9:00:12</updated>
      <published>2011-4-1 9:00:12</published>
      <id>http://dev.mo.cn/article_307.html</id>
      <summary type="html">
      <![CDATA[亲，你想搜索“胡萝卜”有木有！！！想穿越并搜索“胡萝卜”有木有！！！有木有！！！！！！<br /><br />做穿越搜索的引擎你伤不起呀！！！！！！<br /><br />...<br /><br />你懂的谷歌最会搜索了有木有有木有！！！！！！<br /><br />四维时空那么大比大象都大要去哪里搜索“胡萝卜”呀！！！！！！<br /><br />亲你真的想穿越么！！！你真的觉得穿越是件必须做而且值得做的事吗！！！<br /><br />我好像见过又仿佛没见过要不我带你去个更有趣的地方！！！！！！<br /><br />你真不怕神马跨时空灵异事件发生呀！！！亲！！！！！！！！！<br /><br />亲你知不知道搜索“胡萝卜”好难呀！！！我都胃疼好几个礼拜了还没找到呢！！！！！！<br /><br />...<br /><br />好吧看你老激动老激动了就让你穿越一次吧亲！！！！！！<br /><br />搜索“胡萝卜”&nbsp;-&nbsp;穿越码生成&nbsp;-&nbsp;乙未丙戍戊寅己未己巳辛未甲申辛巳&nbsp;-&nbsp;引力场扭曲中<br /><br />...]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">最新ASP无组件上传DEMO分享-多文件上传</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_306.html" />
      <updated>2011-3-26 0:09:30</updated>
      <published>2011-3-26 0:09:30</published>
      <id>http://dev.mo.cn/article_306.html</id>
      <summary type="html">
      <![CDATA[<span style="font-size:14px;">上传过程中失败的文件不会影响后面的文件上传。应该是一种比较好的上传方式。代码原创。</span><br /><span style="font-size:14px;"><a href="/upfiles/20110326000710704.rar" target="new">代码下载：upload_demo_by_anlige</a></span><br /><br /><span style="font-size:14px;">上传前：</span><br /><a onfocus="this.blur()" href="/upfiles/20110326000455439.jpg" target=new><img src="/upfiles/20110326000455439.jpg" border="0" alt="´ڴ" onload="javascript:if(this.width>560)this.width=560" /></a><br /><span style="font-size:14px;">上传后：</span><br /><a onfocus="this.blur()" href="/upfiles/20110326000546737.jpg" target=new><img src="/upfiles/20110326000546737.jpg" border="0" alt="´ڴ" onload="javascript:if(this.width>560)this.width=560" /></a><br />]]>
      </summary>
      <category term="" label="无组件上传" scheme="http://dev.mo.cn/cat_diary_20.html" />
   </entry>
   <entry>
      <title type="html">我想你，你却不知道</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_305.html" />
      <updated>2011-3-17 19:54:55</updated>
      <published>2011-3-17 19:54:55</published>
      <id>http://dev.mo.cn/article_305.html</id>
      <summary type="html">
      <![CDATA[我问，你忙吗？在干嘛？吃了吗？&nbsp;<br /><br />你一一回答，不忙，看书，没吃。&nbsp;<br /><br />可我却发现自己笨笨地不知该再说些什么，再说什么都是多余，再说什么都只会让人厌烦。&nbsp;<br /><br />你生活在一个可以没有我的世界，我居住在一个只有你的天空。&nbsp;<br /><br />所以，我注定是个失败的人。&nbsp;<br /><br />可是，为什么聪明的你不能帮我想一想，我还可以和你说什么，我还能为你做什么？&nbsp;<br /><br />可是，为什么不忙的你不能试着回一些疑问句，让我们的对话更长？&nbsp;<br /><br />可是，为什么你从没有这样的时候，这样想念着我，想念着一个一直在等你的人？&nbsp;<br /><br />也许，你并不知道我在等你。]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">简易HttpRequest类(ASP)-SmartHTTP</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_304.html" />
      <updated>2011-3-11 1:37:37</updated>
      <published>2011-3-11 1:37:37</published>
      <id>http://dev.mo.cn/article_304.html</id>
      <summary type="html">
      <![CDATA[最简单的调用方法：<br />response.write&nbsp;SmartHttp("http://www.baidu.com/").send().gettext()<br /><br />复杂调用<br />例1：<br />set&nbsp;myhttp&nbsp;=&nbsp;SmartHttp("http://www.baidu.com/s","GET","wd=marthttp")<br />myhttp.send()<br />response.write&nbsp;myhttp.gettext("gbk")<br />或<br />response.write&nbsp;SmartHttp("http://www.baidu.com/s","GET","wd=marthttp").send().gettext("gbk")<br /><br />例2：<br />set&nbsp;myhttp&nbsp;=&nbsp;SmartHttp("http://www.baidu.com/s","POST")<br />myhttp.dataset.append&nbsp;"wd","smarthttp"<br />myhttp.send()<br />response.write&nbsp;myhttp.gettext("gbk")<br /><br /><br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;script&nbsp;language="jscript"&nbsp;runat="server"&gt;<br />/*<br />在VBS里面的调用方法<br />dim&nbsp;myhttp<br />set&nbsp;myhttp&nbsp;=&nbsp;SmartHttp(url,method,data,autoClearBuffer);&nbsp;//三个参数均可选<br />属性：<br />&nbsp; &nbsp; &nbsp; &nbsp; url：String，请求的URL地址<br />&nbsp; &nbsp; &nbsp; &nbsp; method：String，请求的方法<br />&nbsp; &nbsp; &nbsp; &nbsp; data：String，请求的数据<br />&nbsp; &nbsp; &nbsp; &nbsp; charset：String，请求的URL返回数据的编码<br />&nbsp; &nbsp; &nbsp; &nbsp; status：Int，请求返回的状态码<br />&nbsp; &nbsp; &nbsp; &nbsp; readyState：Int，同HTTP请求的当前通讯状态，1、2、3、4<br />&nbsp; &nbsp; &nbsp; &nbsp; autoClearBuffer：Boolean，默认为true-自动在url后加一个参数防止缓存<br />&nbsp; &nbsp; &nbsp; &nbsp; dataset：Object，请求的数据，如果增加了，会将这部分数据附加到data属性<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dataset属性：<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; charset：String，发送数据的编码<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dataset方法：<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; append(key,value,noencode)：添加数据<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; remove(key)：移除某个数据项<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isexists(key)：判断某个数据项是不是存在<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; clear：清除所有数据项<br />方法：<br />&nbsp; &nbsp; &nbsp; &nbsp; header(headstr)：设置请求头，项和值之间用:分开<br />&nbsp; &nbsp; &nbsp; &nbsp; timeout(t1,t2,t3,t4)：设置超时时间<br />&nbsp; &nbsp; &nbsp; &nbsp; send()：发送请求<br />&nbsp; &nbsp; &nbsp; &nbsp; getbinary：获取服务器返回的二进制数据<br />&nbsp; &nbsp; &nbsp; &nbsp; gettext(charset)：获取指定编码的文本<br />&nbsp; &nbsp; &nbsp; &nbsp; getjson(charset)：获取指定编码的json数据<br />&nbsp; &nbsp; &nbsp; &nbsp; getheader(key)：获取服务器返回的响应头<br />&nbsp; &nbsp; &nbsp; &nbsp; getxml(charset)：获取指定编码的xml数据<br />*/<br />function&nbsp;SmartHttp(url,method,data,autoClearBuffer){<br />&nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;new&nbsp;_SmartHttp(url,method,data,autoClearBuffer);<br />}<br /><br />function&nbsp;_SmartHttp(url,method,data,autoClearBuffer){<br />&nbsp; &nbsp; &nbsp; &nbsp; if(typeof&nbsp;method=="undefined")&nbsp;method="GET";<br />&nbsp; &nbsp; &nbsp; &nbsp; if(typeof&nbsp;data=="undefined")&nbsp;data="";<br />&nbsp; &nbsp; &nbsp; &nbsp; if(typeof&nbsp;autoClearBuffer=="undefined")&nbsp;autoClearBuffer=true;<br />&nbsp; &nbsp; &nbsp; &nbsp; if(method=="")method="GET";<br />&nbsp; &nbsp; &nbsp; &nbsp; method&nbsp;=&nbsp;method.toUpperCase();<br />&nbsp; &nbsp; &nbsp; &nbsp; this.timeout=[10000,10000,10000,10000];<br />&nbsp; &nbsp; &nbsp; &nbsp; this.method&nbsp;=&nbsp;method;<br />&nbsp; &nbsp; &nbsp; &nbsp; this.url=url;<br />&nbsp; &nbsp; &nbsp; &nbsp; this.data=data;<br />&nbsp; &nbsp; &nbsp; &nbsp; this.charset="gb2312";<br />&nbsp; &nbsp; &nbsp; &nbsp; this.http=null;<br />&nbsp; &nbsp; &nbsp; &nbsp; this.headers=[];<br />&nbsp; &nbsp; &nbsp; &nbsp; this.status=0;<br />&nbsp; &nbsp; &nbsp; &nbsp; this.readyState=0;<br />&nbsp; &nbsp; &nbsp; &nbsp; this.content=null;<br />&nbsp; &nbsp; &nbsp; &nbsp; this.msg="";<br />&nbsp; &nbsp; &nbsp; &nbsp; this.autoClearBuffer&nbsp;=&nbsp;autoClearBuffer;<br />&nbsp; &nbsp; &nbsp; &nbsp; this.dataset={<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; charset:"gb2312",<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; data:[],<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; append:function(key,value,noencode){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var&nbsp;fn=null;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(this.charset.toLowerCase()=="utf-8"){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fn&nbsp;=&nbsp;encodeURIComponent;<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; fn&nbsp;=&nbsp;function(_str){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;escape(_str).replace(/\+/igm,"%2B").replace(/\//igm,"%2F");<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; if(noencode==true){fn=function(_str){return&nbsp;_str;}}<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.data.push({"key":fn(key),"value":fn(value)});<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; remove:function(key){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(this.data.length&lt;=0)&nbsp;return&nbsp;false;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var&nbsp;_data=[];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for(var&nbsp;i=0;i&lt;this.data.length;i++){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(this.data[i].key!=key){1<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _data.push(this.data[i]);<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; this.data&nbsp;=&nbsp;_data;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isexists:function(key){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(this.data.length&lt;=0)&nbsp;return&nbsp;false;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for(var&nbsp;i=0;i&lt;this.data.length;i++){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(this.data[i].key==key){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;true;<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; return&nbsp;false;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; clear:function(){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.dataset.data=[];&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; };<br />}<br /><br />_SmartHttp.prototype.init=function(){<br />&nbsp; &nbsp; &nbsp; &nbsp; var&nbsp;datasetstr="";<br />&nbsp; &nbsp; &nbsp; &nbsp; if(this.dataset.data.length&gt;0){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;for(var&nbsp;i=0;i&lt;this.dataset.data.length;i++){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;datasetstr&nbsp;+=&nbsp;this.dataset.data[i].key&nbsp;+&nbsp;"="&nbsp;+&nbsp;this.dataset.data[i].value&nbsp;+&nbsp;"&";<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;}<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; if(datasetstr!="")&nbsp;datasetstr&nbsp;=&nbsp;datasetstr.substr(0,datasetstr.length-1);<br />&nbsp; &nbsp; &nbsp; &nbsp; if(this.data==""){this.data&nbsp;=&nbsp;datasetstr;}else{if(datasetstr!="")this.data+=&nbsp;"&"&nbsp;+&nbsp;datasetstr;}<br />&nbsp; &nbsp; &nbsp; &nbsp; if(this.data=="")this.data=null;<br />&nbsp; &nbsp; &nbsp; &nbsp; var&nbsp;sChar=((this.url.indexOf("?")&lt;0)&nbsp;?&nbsp;"?"&nbsp;:&nbsp;"&");<br />&nbsp; &nbsp; &nbsp; &nbsp; if(this.autoClearBuffer){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.url&nbsp;+=&nbsp;sChar&nbsp;+&nbsp;"jornd="&nbsp;+&nbsp;this.getrnd();<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(this.method=="GET"&nbsp;&&&nbsp;this.data!=null)&nbsp;this.url&nbsp;+=&nbsp;"&"&nbsp;+&nbsp;this.data;<br />&nbsp; &nbsp; &nbsp; &nbsp; }else{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(this.method=="GET"&nbsp;&&&nbsp;this.data!=null)&nbsp;this.url&nbsp;+=&nbsp;sChar&nbsp;+&nbsp;this.data;<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; if(this.method=="POST")&nbsp;this.headers.push("Content-Type:application/x-www-form-urlencoded");<br />&nbsp; &nbsp; &nbsp; &nbsp; if(!this.charset&nbsp;||&nbsp;this.charset=="")&nbsp;this.charset&nbsp;=&nbsp;"gb2312";&nbsp; &nbsp; &nbsp; &nbsp; <br />};<br /><br />_SmartHttp.prototype.header=function(headstr){<br />&nbsp; &nbsp; &nbsp; &nbsp; if(headstr.indexOf(":")&gt;=0)&nbsp;this.headers.push(headstr);<br />&nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;this;<br />};<br /><br />_SmartHttp.prototype.timeout=function(){<br />&nbsp; &nbsp; &nbsp; &nbsp; if(arguments.length&gt;4){return&nbsp;this;}<br />&nbsp; &nbsp; &nbsp; &nbsp; for(var&nbsp;i&nbsp;=0;i&lt;arguments.length;i++){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(!isNaN(arguments[i])){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.timeout[i]&nbsp;=&nbsp;parseInt(arguments[i]);&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;this;<br />};<br /><br />_SmartHttp.prototype.send=function(){<br />&nbsp; &nbsp; &nbsp; &nbsp; this.init();<br />&nbsp; &nbsp; &nbsp; &nbsp; var&nbsp;_http&nbsp;=&nbsp;this.getobj();<br />&nbsp; &nbsp; &nbsp; &nbsp; if(_http==null){return&nbsp;this;}<br />&nbsp; &nbsp; &nbsp; &nbsp; try{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _http.setOption(2)=13056;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _http.setTimeouts(this.timeout[0],&nbsp;this.timeout[1],&nbsp;this.timeout[2],&nbsp;this.timeout[3]);<br />&nbsp; &nbsp; &nbsp; &nbsp; }catch(ex){}<br />&nbsp; &nbsp; &nbsp; &nbsp; _http.open(this.method,this.url,false);<br />&nbsp; &nbsp; &nbsp; &nbsp; if(this.headers.length&gt;0){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for(var&nbsp;i=0;i&lt;this.headers.length;i++){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var&nbsp;Sindex&nbsp;=&nbsp;this.headers[i].indexOf(":");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var&nbsp;key&nbsp;=&nbsp;this.headers[i].substr(0,Sindex);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var&nbsp;value&nbsp;=&nbsp;this.headers[i].substr(Sindex+1);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _http.setRequestHeader(key,value);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; _http.send(this.data);<br />&nbsp; &nbsp; &nbsp; &nbsp; this.readyState&nbsp;=&nbsp;_http.readyState;<br />&nbsp; &nbsp; &nbsp; &nbsp; if(_http.readyState==4){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.status&nbsp;=&nbsp;parseInt(_http.status);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.http&nbsp;=&nbsp;_http;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.content&nbsp;=&nbsp;_http.responseBody;<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;this;<br />}<br /><br />_SmartHttp.prototype.getbinary=function(){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;this.content;<br />};<br /><br />_SmartHttp.prototype.gettext=function(charset){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;try{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;return&nbsp;this.b2s(this.content,charset&nbsp;?&nbsp;charset&nbsp;:&nbsp;this.charset);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;}catch(ex){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;this.msg&nbsp;=&nbsp;ex.description;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;return&nbsp;"";<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;}&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />};<br /><br />_SmartHttp.prototype.getjson=function(charset){<br />&nbsp; &nbsp; &nbsp; &nbsp; try{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var&nbsp;_json=null;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; eval("_json=("&nbsp;+&nbsp;this.gettext(charset)&nbsp;+&nbsp;");");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;_json;<br />&nbsp; &nbsp; &nbsp; &nbsp; }catch(ex){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.msg&nbsp;=&nbsp;ex.description;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;null;<br />&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; <br />};<br /><br />_SmartHttp.prototype.getheader=function(key){<br />&nbsp; &nbsp; &nbsp; &nbsp; if(key){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(key.toUpperCase()=="SET-COOKIE"){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; key&nbsp;=&nbsp;key.replace("-","\-");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var&nbsp;headers&nbsp;=&nbsp;this.http.getAllResponseHeaders();<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var&nbsp;regexp&nbsp;=&nbsp;new&nbsp;RegExp("\n"&nbsp;+&nbsp;key&nbsp;+&nbsp;"\:(.+?)\r","ig");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var&nbsp;resstr&nbsp;=&nbsp;"";<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; while((res&nbsp;=&nbsp;regexp.exec(headers))!=null){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var&nbsp;val&nbsp;=&nbsp;res[1].trim();<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; resstr&nbsp;=&nbsp;resstr&nbsp;+&nbsp;val.substr(0,val.indexOf(";"))&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; if(resstr!=""){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; resstr&nbsp;=&nbsp;resstr.substr(0,resstr.lastIndexOf(";"));<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; return&nbsp;resstr;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }else{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;this.http.getResponseHeader(key);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; }else{return&nbsp;this.http.getAllResponseHeaders();}<br />};<br /><br />_SmartHttp.prototype.getxml=function(charset){<br />&nbsp; &nbsp; &nbsp; &nbsp; try{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var&nbsp;_dom&nbsp;=&nbsp;new&nbsp;ActiveXObject("MSXML2.DOMDocument");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _dom.loadXML(this.gettext(charset));<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;_dom;<br />&nbsp; &nbsp; &nbsp; &nbsp; }catch(ex){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.msg&nbsp;=&nbsp;ex.description;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;null;&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />};<br />_SmartHttp.prototype.getobj&nbsp;=&nbsp;function&nbsp;(){<br />&nbsp; &nbsp; &nbsp; &nbsp; var&nbsp;b=null;<br />&nbsp; &nbsp; &nbsp; &nbsp; var&nbsp;httplist&nbsp;=&nbsp;["MSXML2.serverXMLHttp.3.0","MSXML2.serverXMLHttp","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp","Microsoft.XMLHttp"];<br />&nbsp; &nbsp; &nbsp; &nbsp; for(var&nbsp;i&nbsp;=&nbsp;0;i&lt;=httplist.length&nbsp;-1;i++){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b=&nbsp;new&nbsp;ActiveXObject(httplist[i]);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (function(o){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _SmartHttp.prototype.getobj&nbsp;=&nbsp;function(){return&nbsp;new&nbsp;ActiveXObject(o)};&nbsp;&nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; })(httplist[i]);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;b;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }catch(ex){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; eval("this.msg&nbsp;=&nbsp;ex.description;");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;b;<br />};<br /><br />_SmartHttp.prototype.getrnd&nbsp;=&nbsp;function&nbsp;(){return&nbsp;Math.random().toString().substr(2);};<br /><br />_SmartHttp.prototype.b2s&nbsp;=&nbsp;function(bytSource,&nbsp;Cset){&nbsp;//ef&nbsp;bb&nbsp;bf,c0&nbsp;fd<br />&nbsp;&nbsp;var&nbsp;Objstream,c1,c2,c3;<br />&nbsp;&nbsp;var&nbsp;byts;<br />&nbsp;&nbsp;Objstream&nbsp;=Server.CreateObject("ADODB.Stream");<br />&nbsp;&nbsp;Objstream.Type&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;Objstream.Mode&nbsp;=&nbsp;3;<br />&nbsp;&nbsp;Objstream.Open();<br />&nbsp;&nbsp;Objstream.Write(bytSource);<br />&nbsp;&nbsp;Objstream.Position&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;Objstream.Type&nbsp;=&nbsp;2;<br />&nbsp;&nbsp;Objstream.CharSet&nbsp;=&nbsp;Cset;<br />&nbsp;&nbsp;byts&nbsp;=&nbsp;Objstream.ReadText();<br />&nbsp;&nbsp;Objstream.Close();<br />&nbsp;&nbsp;Objstream&nbsp;=&nbsp;null;<br />&nbsp;&nbsp;return&nbsp;byts;<br />};<br />_SmartHttp.prototype.urlencode=function(str){&nbsp;&nbsp;return&nbsp;encodeURIComponent(str);};<br />_SmartHttp.prototype.urldecode=function(str){&nbsp;&nbsp;return&nbsp;decodeURIComponent(str);};<br />String.prototype.trim&nbsp;=&nbsp;function(){return&nbsp;this.replace(/(^(\s+)|(\s+)$)/igm,"");};<br />&lt;/script&gt;<br /></div></div>]]>
      </summary>
      <category term="" label="代码分享" scheme="http://dev.mo.cn/cat_diary_23.html" />
   </entry>
   <entry>
      <title type="html">一年多了，变了~</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_302.html" />
      <updated>2011-3-11 1:17:02</updated>
      <published>2011-3-11 1:17:02</published>
      <id>http://dev.mo.cn/article_302.html</id>
      <summary type="html">
      <![CDATA[　　有一天发现，自己突然由基层员工变成了二级主管，原来，两年马上就要过去了，简单谈来，一年多的时间里收获不小，也失去颇多。至少，两年来对得起自己、对得起公司，唯一对不起的就是家人，这也算是一个失败吧，算是我个人失败。尽管，自己完成了一个个的系统一个个的功能，在他人眼里看来：“XXX好厉害哦”，但是，他们永远无法读懂我的内心，一个需要别人理解和接受的人，更希望得到父母的认可和鼓励。也许是习惯了一个人的生活，从初中到现在，也过去十几年了，就是这十几年练就了一个现在的我，无需炫耀什么，做好自己，做好原则是最重要的，在别人眼里，我可能就是一个不起眼的角色，甚至被人鄙视的角色，通俗的人叫：“IT农民工”，但是，相信自己忠诚于自己才是最重要的，一个人没了原则、没了信心、没了信仰、没了目标，这才是最可怕的。闲暇时多返回到自己的身上，为自己做一个“自检”，让自己认识自己，自己在做什么，每天为什么而忙碌，为什么每天那么累，却没有什么满足感。<br /><br />　　无须抱怨，过去的点点滴滴塑造了现在的你，不管是好的事情还是坏的事情。我相信因果关系，果必出于因。安静下来的时候，自己就会想以前，如果初中的时候没有摔到胳膊，我现在会在哪里呢？如果花钱买高中上而不是复习一年，现在的我还是我吗？如果没有高中的她，我现在又是什么样？如果我大学没有提前离开学校，会不会还是领着那2000块钱的工资呢？是的，不必抱怨现在你怎么样，因为那都是你的选择决定的，认识自己，认清现在才是最重要的，世界上没有卖后悔药的，但是却有无数条指明你发展方向的道路，踏上这条路，迈开步子，往前走吧。。。当你沮丧的时候，当你失去信心的时候，当你感觉无助的时候，为什么不抛弃那些沮丧、无助，找回自己呢？消极不可怕，可怕的是你永远消极；积极也不代表什么，要看你是不是一时头脑发热。<br /><br />　　也送给所有认识的朋友一句话：“回望以前的你，认识现在的你，追求未来的你，加油”！<br />]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">编程的你----（仿照老狼《同桌的你》）</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_301.html" />
      <updated>2011-3-9 15:57:48</updated>
      <published>2011-3-9 15:57:48</published>
      <id>http://dev.mo.cn/article_301.html</id>
      <summary type="html">
      <![CDATA[明天你是否会想起<br />昨天你写的程序<br />明天你是否还惦记<br />曾经爱编程的你<br />领导们都已想不起<br />曾经加班的你<br />我也是偶然看程序<br />才想起同事的你<br />谁聘了牛B烘烘的你<br />谁安慰天天加班的你<br />谁把你的设计做起<br />谁给你做的升级<br /><br />你从前总是很小心<br />从不把离职的事提起<br />你也曾无意中说起<br />薪水实在太低<br />那时候屏幕总是在闪<br />日子总过得太慢<br />你总说离职遥遥无期<br />转眼就各奔东西<br />谁聘了牛B烘烘的你<br />谁安慰天天加班的你<br />谁看了我给你写的信<br />谁把它删在垃圾文件夹里<br /><br /><br />从前的日子都远去<br />我也将有我的新上司<br />我也会给他编程序<br />给他讲同事的你<br />谁聘了牛B烘烘的你<br />谁安慰天天加班的你<br />谁把你的设计做起<br />谁给你做的升级<br /><br />啦............]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">php发送邮件(mail)的类-classsmtp</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_300.html" />
      <updated>2011-3-1 0:51:09</updated>
      <published>2011-3-1 0:51:09</published>
      <id>http://dev.mo.cn/article_300.html</id>
      <summary type="html">
      <![CDATA[<div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;?php<br />class&nbsp;smtp<br />{<br />/*&nbsp;Public&nbsp;Variables&nbsp;*/<br />var&nbsp;$smtp_port;<br />var&nbsp;$time_out;<br />var&nbsp;$host_name;<br />var&nbsp;$log_file;<br />var&nbsp;$relay_host;<br />var&nbsp;$debug;<br />var&nbsp;$auth;<br />var&nbsp;$user;<br />var&nbsp;$pass;<br /><br />/*&nbsp;Private&nbsp;Variables&nbsp;*/<br />var&nbsp;$sock;<br /><br />/*&nbsp;Constractor&nbsp;*/<br />function&nbsp;smtp($relay_host&nbsp;=&nbsp;"",&nbsp;$smtp_port&nbsp;=&nbsp;25,$auth&nbsp;=&nbsp;false,$user,$pass)<br />{<br />$this-&gt;debug&nbsp;=&nbsp;FALSE;<br />$this-&gt;smtp_port&nbsp;=&nbsp;$smtp_port;<br />$this-&gt;relay_host&nbsp;=&nbsp;$relay_host;<br />$this-&gt;time_out&nbsp;=&nbsp;30;&nbsp;//is&nbsp;used&nbsp;in&nbsp;fsockopen()<br />#<br />$this-&gt;auth&nbsp;=&nbsp;$auth;//auth<br />$this-&gt;user&nbsp;=&nbsp;$user;<br />$this-&gt;pass&nbsp;=&nbsp;$pass;<br />#<br />$this-&gt;host_name&nbsp;=&nbsp;"localhost";&nbsp;//is&nbsp;used&nbsp;in&nbsp;HELO&nbsp;command<br />$this-&gt;log_file&nbsp;=&nbsp;"";<br /><br />$this-&gt;sock&nbsp;=&nbsp;FALSE;<br />}<br /><br />/*&nbsp;Main&nbsp;Function&nbsp;*/<br />function&nbsp;sendmail($to,&nbsp;$from,&nbsp;$subject&nbsp;=&nbsp;"",&nbsp;$body&nbsp;=&nbsp;"",&nbsp;$mailtype,&nbsp;$cc&nbsp;=&nbsp;"",&nbsp;$bcc&nbsp;=&nbsp;"",&nbsp;$additional_headers&nbsp;=&nbsp;"")<br />{<br />$mail_from&nbsp;=&nbsp;$this-&gt;get_address($this-&gt;strip_comment($from));<br />$body&nbsp;=&nbsp;ereg_replace("(^|(\r\n))(\\.)",&nbsp;"\\1.\\3",&nbsp;$body);<br />$header&nbsp;.=&nbsp;"MIME-Version:1.0\r\n";<br />if($mailtype=="HTML"){<br />$header&nbsp;.=&nbsp;"Content-Type:text/html\r\n";<br />}<br />$header&nbsp;.=&nbsp;"To:&nbsp;".$to."\r\n";<br />if&nbsp;($cc&nbsp;!=&nbsp;"")&nbsp;{<br />$header&nbsp;.=&nbsp;"Cc:&nbsp;".$cc."\r\n";<br />}<br />$header&nbsp;.=&nbsp;"From:&nbsp;$from&lt;".$from."&gt;;\r\n";<br />$header&nbsp;.=&nbsp;"Subject:&nbsp;".$subject."\r\n";<br />$header&nbsp;.=&nbsp;$additional_headers;<br />$header&nbsp;.=&nbsp;"Date:&nbsp;".date("r")."\r\n";<br />$header&nbsp;.=&nbsp;"X-Mailer:By&nbsp;Redhat&nbsp;(PHP/".phpversion().")\r\n";<br />list($msec,&nbsp;$sec)&nbsp;=&nbsp;explode("&nbsp;",&nbsp;microtime());<br />$header&nbsp;.=&nbsp;"Message-ID:&nbsp;&lt;".date("YmdHis",&nbsp;$sec).".".($msec*1000000).".".$mail_from."&gt;;\r\n";<br />$TO&nbsp;=&nbsp;explode(",",&nbsp;$this-&gt;strip_comment($to));<br /><br />if&nbsp;($cc&nbsp;!=&nbsp;"")&nbsp;{<br />$TO&nbsp;=&nbsp;array_merge($TO,&nbsp;explode(",",&nbsp;$this-&gt;strip_comment($cc)));<br />}<br /><br />if&nbsp;($bcc&nbsp;!=&nbsp;"")&nbsp;{<br />$TO&nbsp;=&nbsp;array_merge($TO,&nbsp;explode(",",&nbsp;$this-&gt;strip_comment($bcc)));<br />}<br /><br />$sent&nbsp;=&nbsp;TRUE;<br />foreach&nbsp;($TO&nbsp;as&nbsp;$rcpt_to)&nbsp;{<br />$rcpt_to&nbsp;=&nbsp;$this-&gt;get_address($rcpt_to);<br />if&nbsp;(!$this-&gt;smtp_sockopen($rcpt_to))&nbsp;{<br />$this-&gt;log_write("Error:&nbsp;Cannot&nbsp;send&nbsp;email&nbsp;to&nbsp;".$rcpt_to."\n");<br />$sent&nbsp;=&nbsp;FALSE;<br />continue;<br />}<br />if&nbsp;($this-&gt;smtp_send($this-&gt;host_name,&nbsp;$mail_from,&nbsp;$rcpt_to,&nbsp;$header,&nbsp;$body))&nbsp;{<br />$this-&gt;log_write("E-mail&nbsp;has&nbsp;been&nbsp;sent&nbsp;to&nbsp;&lt;".$rcpt_to."&gt;;\n");<br />}&nbsp;else&nbsp;{<br />$this-&gt;log_write("Error:&nbsp;Cannot&nbsp;send&nbsp;email&nbsp;to&nbsp;&lt;".$rcpt_to."&gt;;\n");<br />$sent&nbsp;=&nbsp;FALSE;<br />}<br />fclose($this-&gt;sock);<br />$this-&gt;log_write("Disconnected&nbsp;from&nbsp;remote&nbsp;host\n");<br />}<br />return&nbsp;$sent;<br />}<br /><br />/*&nbsp;Private&nbsp;Functions&nbsp;*/<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; function&nbsp;smtp_send($helo,&nbsp;$from,&nbsp;$to,&nbsp;$header,&nbsp;$body&nbsp;=&nbsp;"")<br />&nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;(!$this-&gt;smtp_putcmd("HELO",&nbsp;$helo))&nbsp;{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;$this-&gt;smtp_error("sending&nbsp;HELO&nbsp;command");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #auth<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if($this-&gt;auth){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;(!$this-&gt;smtp_putcmd("AUTH&nbsp;LOGIN",&nbsp;base64_encode($this-&gt;user)))&nbsp;{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;$this-&gt;smtp_error("sending&nbsp;HELO&nbsp;command");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;(!$this-&gt;smtp_putcmd("",&nbsp;base64_encode($this-&gt;pass)))&nbsp;{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;$this-&gt;smtp_error("sending&nbsp;HELO&nbsp;command");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;(!$this-&gt;smtp_putcmd("MAIL",&nbsp;"FROM:&lt;".$from."&gt;;"))&nbsp;{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;$this-&gt;smtp_error("sending&nbsp;MAIL&nbsp;FROM&nbsp;command");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;(!$this-&gt;smtp_putcmd("RCPT",&nbsp;"TO:&lt;".$to."&gt;;"))&nbsp;{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;$this-&gt;smtp_error("sending&nbsp;RCPT&nbsp;TO&nbsp;command");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;(!$this-&gt;smtp_putcmd("DATA"))&nbsp;{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;$this-&gt;smtp_error("sending&nbsp;DATA&nbsp;command");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;(!$this-&gt;smtp_message($header,&nbsp;$body))&nbsp;{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;$this-&gt;smtp_error("sending&nbsp;message");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;(!$this-&gt;smtp_eom())&nbsp;{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;$this-&gt;smtp_error("sending&nbsp;&lt;CR&gt;;&lt;LF&gt;;.&lt;CR&gt;;&lt;LF&gt;;&nbsp;[EOM]");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;(!$this-&gt;smtp_putcmd("QUIT"))&nbsp;{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;$this-&gt;smtp_error("sending&nbsp;QUIT&nbsp;command");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;TRUE;<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; function&nbsp;smtp_sockopen($address)<br />&nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;($this-&gt;relay_host&nbsp;==&nbsp;"")&nbsp;{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;$this-&gt;smtp_sockopen_mx($address);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp;else&nbsp;{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;$this-&gt;smtp_sockopen_relay();<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; function&nbsp;smtp_sockopen_relay()<br />&nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;log_write("Trying&nbsp;to&nbsp;".$this-&gt;relay_host.":".$this-&gt;smtp_port."\n");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;sock&nbsp;=&nbsp;@fsockopen($this-&gt;relay_host,&nbsp;$this-&gt;smtp_port,&nbsp;$errno,&nbsp;$errstr,&nbsp;$this-&gt;time_out);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;(!($this-&gt;sock&nbsp;&&&nbsp;$this-&gt;smtp_ok()))&nbsp;{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;log_write("Error:&nbsp;Cannot&nbsp;connenct&nbsp;to&nbsp;relay&nbsp;host&nbsp;".$this-&gt;relay_host."\n");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;log_write("Error:&nbsp;".$errstr."&nbsp;(".$errno.")\n");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;FALSE;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;log_write("Connected&nbsp;to&nbsp;relay&nbsp;host&nbsp;".$this-&gt;relay_host."\n");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;TRUE;<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; function&nbsp;smtp_sockopen_mx($address)<br />&nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $domain&nbsp;=&nbsp;ereg_replace("^.+@([^@]+)$",&nbsp;"\\1",&nbsp;$address);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;(!@getmxrr($domain,&nbsp;$MXHOSTS))&nbsp;{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;log_write("Error:&nbsp;Cannot&nbsp;resolve&nbsp;MX&nbsp;\"".$domain."\"\n");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;FALSE;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; foreach&nbsp;($MXHOSTS&nbsp;as&nbsp;$host)&nbsp;{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;log_write("Trying&nbsp;to&nbsp;".$host.":".$this-&gt;smtp_port."\n");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;sock&nbsp;=&nbsp;@fsockopen($host,&nbsp;$this-&gt;smtp_port,&nbsp;$errno,&nbsp;$errstr,&nbsp;$this-&gt;time_out);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;(!($this-&gt;sock&nbsp;&&&nbsp;$this-&gt;smtp_ok()))&nbsp;{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;log_write("Warning:&nbsp;Cannot&nbsp;connect&nbsp;to&nbsp;mx&nbsp;host&nbsp;".$host."\n");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;log_write("Error:&nbsp;".$errstr."&nbsp;(".$errno.")\n");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; continue;<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; $this-&gt;log_write("Connected&nbsp;to&nbsp;mx&nbsp;host&nbsp;".$host."\n");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;TRUE;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;log_write("Error:&nbsp;Cannot&nbsp;connect&nbsp;to&nbsp;any&nbsp;mx&nbsp;hosts&nbsp;(".implode(",&nbsp;",&nbsp;$MXHOSTS).")\n");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;FALSE;<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; function&nbsp;smtp_message($header,&nbsp;$body)<br />&nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fputs($this-&gt;sock,&nbsp;$header."\r\n".$body);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;smtp_debug("&gt;;&nbsp;".str_replace("\r\n",&nbsp;"\n"."&gt;;&nbsp;",&nbsp;$header."\n&gt;;&nbsp;".$body."\n&gt;;&nbsp;"));<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;TRUE;<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; function&nbsp;smtp_eom()<br />&nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fputs($this-&gt;sock,&nbsp;"\r\n.\r\n");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;smtp_debug(".&nbsp;[EOM]\n");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;$this-&gt;smtp_ok();<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; function&nbsp;smtp_ok()<br />&nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $response&nbsp;=&nbsp;str_replace("\r\n",&nbsp;"",&nbsp;fgets($this-&gt;sock,&nbsp;512));<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;smtp_debug($response."\n");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;(!ereg("^[23]",&nbsp;$response))&nbsp;{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fputs($this-&gt;sock,&nbsp;"QUIT\r\n");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fgets($this-&gt;sock,&nbsp;512);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;log_write("Error:&nbsp;Remote&nbsp;host&nbsp;returned&nbsp;\"".$response."\"\n");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;FALSE;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;TRUE;<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; function&nbsp;smtp_putcmd($cmd,&nbsp;$arg&nbsp;=&nbsp;"")<br />&nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;($arg&nbsp;!=&nbsp;"")&nbsp;{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if($cmd=="")&nbsp;$cmd&nbsp;=&nbsp;$arg;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else&nbsp;$cmd&nbsp;=&nbsp;$cmd."&nbsp;".$arg;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fputs($this-&gt;sock,&nbsp;$cmd."\r\n");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;smtp_debug("&gt;;&nbsp;".$cmd."\n");<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;$this-&gt;smtp_ok();<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; function&nbsp;smtp_error($string)<br />&nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;log_write("Error:&nbsp;Error&nbsp;occurred&nbsp;while&nbsp;".$string.".\n");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;FALSE;<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; function&nbsp;log_write($message)<br />&nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;smtp_debug($message);<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;($this-&gt;log_file&nbsp;==&nbsp;"")&nbsp;{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;TRUE;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $message&nbsp;=&nbsp;date("M&nbsp;d&nbsp;H:i:s&nbsp;").get_current_user()."[".getmypid()."]:&nbsp;".$message;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;(!@file_exists($this-&gt;log_file)&nbsp;||&nbsp;!($fp&nbsp;=&nbsp;@fopen($this-&gt;log_file,&nbsp;"a")))&nbsp;{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;smtp_debug("Warning:&nbsp;Cannot&nbsp;open&nbsp;log&nbsp;file&nbsp;\"".$this-&gt;log_file."\"\n");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;FALSE;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; flock($fp,&nbsp;LOCK_EX);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fputs($fp,&nbsp;$message);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fclose($fp);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;TRUE;<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; function&nbsp;strip_comment($address)<br />&nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $comment&nbsp;=&nbsp;"\\([^()]*\\)";<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; while&nbsp;(ereg($comment,&nbsp;$address))&nbsp;{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $address&nbsp;=&nbsp;ereg_replace($comment,&nbsp;"",&nbsp;$address);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;$address;<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; function&nbsp;get_address($address)<br />&nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $address&nbsp;=&nbsp;ereg_replace("([&nbsp;\t\r\n])+",&nbsp;"",&nbsp;$address);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $address&nbsp;=&nbsp;ereg_replace("^.*&lt;(.+)&gt;;.*$",&nbsp;"\\1",&nbsp;$address);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;$address;<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; function&nbsp;smtp_debug($message)<br />&nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;($this-&gt;debug)&nbsp;{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; echo&nbsp;$message;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />}<br /><br />function&nbsp;sendmail($smtpserver,$smtpuser,$smtppass,$smtpemailto,$smtpusermail,&nbsp;$mailsubject,&nbsp;$mailbody){<br />&nbsp; &nbsp; &nbsp; &nbsp; $smtp&nbsp;=&nbsp;new&nbsp;smtp($smtpserver,25,true,$smtpuser,$smtppass);<br />&nbsp; &nbsp; &nbsp; &nbsp; //$smtp-&gt;debug&nbsp;=&nbsp;TRUE;<br />&nbsp; &nbsp; &nbsp; &nbsp; $smtp-&gt;sendmail($smtpemailto,&nbsp;$smtpusermail,&nbsp;$mailsubject,&nbsp;$mailbody,&nbsp;"HTML");&nbsp; &nbsp; &nbsp; &nbsp; <br />}<br />//such&nbsp;as<br />//sendmail("smtp.126.com","test@126.com","password","1034555083@qq.com","test@126.com","title","body");<br />?&gt;</div></div>]]>
      </summary>
      <category term="" label="php" scheme="http://dev.mo.cn/cat_diary_22.html" />
   </entry>
   <entry>
      <title type="html">php模拟asp中的XmlHttpRequest实现http请求</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_299.html" />
      <updated>2011-1-29 11:00:35</updated>
      <published>2011-1-29 11:00:35</published>
      <id>http://dev.mo.cn/article_299.html</id>
      <summary type="html">
      <![CDATA[为了自己方便模拟asp里面的xmlhttp组件写的phphttp请求类，基本的功能都实现了，支持gzip压缩<br /><span style="font-size:24px;"><span style="color:#FF0000;"><a href="/source_199.html" target="new">下载代码</a></span></span><br /><br />类名&nbsp;:HttpRequest($url="",$method="GET",$useSocket=0)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />//$url为请求的地址；默认请求方法为GET；$useSocket默认为0，使用fsockopen方法，如果设置为1则使用socket_create方法<br /><br />方法：<br />&nbsp; &nbsp; &nbsp; &nbsp; open($ip="",$port=-1)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //打开同服务器的连接，默认不用设置这两个参数（一个同事在linux用的时候，请求的不是hostname解析的IP，因此加了这两个参数，以连接真实的服务器IP）<br />&nbsp; &nbsp; &nbsp; &nbsp; setTimeout($timeout=0)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //设置获取数据的超时时间，必须在send方法调用之前设置才有效,单位秒，默认值0为不限制<br />&nbsp; &nbsp; &nbsp; &nbsp; setRequestHeader($key,$value="")&nbsp; &nbsp; &nbsp; &nbsp; //设置请求头，必须在send方法调用之前设置才有效<br />&nbsp; &nbsp; &nbsp; &nbsp; removeRequestHeader($key,$value="")&nbsp; &nbsp; &nbsp; &nbsp; //移除指定键值的请求头，必须在send方法调用之前调用才有效<br />&nbsp; &nbsp; &nbsp; &nbsp; send($data="")&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //发送数据$data到服务器<br />&nbsp; &nbsp; &nbsp; &nbsp; getResponseBody()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //获取服务器返回的文本<br />&nbsp; &nbsp; &nbsp; &nbsp; getAllResponseHeaders()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //获取服务器响应的所有头信息<br />&nbsp; &nbsp; &nbsp; &nbsp; getResponseHeader($key)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //获取服务器响应的某个头信息，例如Server,Set_Cookie等<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />属性：<br />&nbsp; &nbsp; &nbsp; &nbsp; $url&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //要请求的url<br />&nbsp; &nbsp; &nbsp; &nbsp; $method&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //请求方法(POST/GET)<br />&nbsp; &nbsp; &nbsp; &nbsp; $port&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; $hostname&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //请求的主机名<br />&nbsp; &nbsp; &nbsp; &nbsp; $uri&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //url的文件部分<br />&nbsp; &nbsp; &nbsp; &nbsp; $protocol&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //请求协议(http)(包括本属性的以上5个属性均由程序自动通过url分析)<br />&nbsp; &nbsp; &nbsp; &nbsp; $excption&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //异常信息<br />&nbsp; &nbsp; &nbsp; &nbsp; $_headers=array()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //请求头array("key"=&gt;"value")<br />&nbsp; &nbsp; &nbsp; &nbsp; $_senddata&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //发送到服务器的数据<br />&nbsp; &nbsp; &nbsp; &nbsp; $status&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; $statusText&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //状态信息<br />&nbsp; &nbsp; &nbsp; &nbsp; $HttpProtocolVersion&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //服务器的HTTP协议版本<br /><br />注意：<br />&nbsp; &nbsp; &nbsp; &nbsp; Host头由程序自动设置，当用POST方法请求时，Content-Length和Content-Type已被自动设置。<br />&nbsp; &nbsp; &nbsp; &nbsp; 支持gzip压缩的页面]]>
      </summary>
      <category term="" label="php" scheme="http://dev.mo.cn/cat_diary_22.html" />
   </entry>
   <entry>
      <title type="html">如果这就是爱情-张靓颖</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_298.html" />
      <updated>2011-1-5 20:22:01</updated>
      <published>2011-1-5 20:22:01</published>
      <id>http://dev.mo.cn/article_298.html</id>
      <summary type="html">
      <![CDATA[<br /><object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=4,0,2,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="520" height="425"><param name="movie" value="http://player.youku.com/player.php/partnerid/XOTcy/sid/XMjE1MTY3MTY4/v.swf"><param name=quality value=high><embed src="http://player.youku.com/player.php/partnerid/XOTcy/sid/XMjE1MTY3MTY4/v.swf" quality="high" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?p1_prod_version=shockwaveflash" type="application/x-shockwave-flash" width="520" height="425">http://player.youku.com/player.php/partnerid/XOTcy/sid/XMjE1MTY3MTY4/v.swf</embed></object><br />]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">在外部引用js里面获取当前js的路径</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_297.html" />
      <updated>2010-12-4 16:24:48</updated>
      <published>2010-12-4 16:24:48</published>
      <id>http://dev.mo.cn/article_297.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;下午在写一段多用户程序的时候，需要不同的用户js文件内部的一些参数要不一样，当时想都没想就用window.location获取，输出一看，错误，获取的是当前网页的url，以前没处理过类似的问题，于是到网上看了下，发现一个解决方法，就是给引用这个js的script标签加个id属性，然后用document.getElementById()&nbsp;方法来获取--可以解决问题。但是有个缺点就是还要修改网页的html代码，想了一下，既然可以给script加一个id，那可不可以在js里面给页面输出一个节点，根据节点之间的关系来定位script呢，于是写了下面一段代码：<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">document.write("&lt;span&nbsp;id=\"_tmp\"&nbsp;style=\"display:none\"&gt;&lt;/span&gt;");<br />var&nbsp;_this&nbsp;=&nbsp;document.getElementById("_tmp").previousSibling;<br />alert(_this.src);</div></div><br />输出结果正确，获取到了js的路径，经过测试这个方法兼容各浏览器。<br />&nbsp;&nbsp;代码也没什么特别之处，就是在当前位置输出了一个span元素，通过span元素的previousSibling属性来定位script的。]]>
      </summary>
      <category term="" label="JavaScript/DOM" scheme="http://dev.mo.cn/cat_diary_9.html" />
   </entry>
   <entry>
      <title type="html">推荐个域名注册商，也算是推广，因为值得推荐-爱名网22.cn</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_296.html" />
      <updated>2010-11-18 18:11:06</updated>
      <published>2010-11-18 18:11:06</published>
      <id>http://dev.mo.cn/article_296.html</id>
      <summary type="html">
      <![CDATA[推荐原因：注册方便，价格优惠，管理方便<br />官放网站：<a href="/r/22" target="new">爱名网22.cn</a><br /><a href="/r/22" target="new">"爱名网</a>是杭州爱名网络有限公司（电商集团ebeGroup成员企业）拥有的互联网服务品牌。“爱名网”最早由第一商务与域名投资者合作于2008年5月创建，经过1年半的试运营，2009年9月9日，爱名网团队在“中国电子商务之都－杭州”正式成立独立的运营公司。<br /><br /><a href="/r/22" target="new">"爱名网</a>的创业团队由从事域名行业多年的国内外资深人士组成，由国内域名届以技术与交易见长的域名专家－－贺建国先生担任CEO。爱名网的经营团队深刻了解国内外域名行业的发展历程，对域名投资行业在美国等发达市场的运行轨迹了然于胸，和国外域名投资业界有着广泛联系。同时，他们也在国内的域名行业摸爬滚打多年，并且都有作为域名投资人的亲身体验。这使得“爱名网”在具备国际化视野的同时能够切实推出符合国内域名投资人实际需求的贴心服务，并力争搭建起中国域名投资业界和国外域名投资业界的桥梁。<br /><br /><a href="/r/22" target="new">"爱名网</a>目前通过与中国互联网信息中心（CNNIC）及国际域名管理机构(ICANN)授权的顶级域名注册商直接合作，为用户提供的一个专业的集域名注册、域名竞价、域名拍卖、域名中介、域名交易、&nbsp;域名贷款、域名停放&nbsp;、域名寄售等服务的综合域名解决方案服务门户。同时，爱名网也欢迎更多的注册服务机构加入成为我们的合作伙伴为域名投资者（米虫）和域名终端用户提供优质的域名服务。<br /><br />--------------------------------------------------------------------------------<br />爱名网七大特殊服务优势<br />--------------------------------------------------------------------------------<br />1.在线自由过户；<br />2.会员之间PUSH无时间限制；<br />3.自动获取独特的域名出售页；<br />4.帐户余额自由提现，保证资金使用效率；<br />5.会员带价PUSH(即会员间域名站内免费过户交易)；<br />6.在线拿转移密码，自由转出，自由转入不受任何限制；<br />7.域名可以抵押，按揭贷款服务，为投资者提供资金便利。<br />]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">Ajax跨域代理访问网络资源</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_295.html" />
      <updated>2010-11-18 17:55:32</updated>
      <published>2010-11-18 17:55:32</published>
      <id>http://dev.mo.cn/article_295.html</id>
      <summary type="html">
      <![CDATA[代码下载地址：<a href="/upfiles/20101118175349810.rar" target="new">/upfiles/20101118175349810.rar</a><br /><br />解决Ajax跨域访问报“没有权限”的错误。<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;!--#include&nbsp;file="smart.asp"--&gt;<br />&lt;%<br />Response.charset="utf-8"<br />dim&nbsp;url,method,data,charset<br />url&nbsp;=Request.Form("targeturl")<br />method&nbsp;=Request.Form("method")<br />data&nbsp;=Request.Form("data")<br />charset&nbsp;=&nbsp;Request.Form("charset")<br />if&nbsp;charset&nbsp;=&nbsp;""&nbsp;then&nbsp;charset&nbsp;=&nbsp;"GB2312"<br />response.Write&nbsp;SmartHttp(url,method,data).send().gettext(charset)<br />set&nbsp;myhttp&nbsp;=&nbsp;nothing<br />%&gt;<br /></div></div>]]>
      </summary>
      <category term="" label="AJAX" scheme="http://dev.mo.cn/cat_diary_2.html" />
   </entry>
   <entry>
      <title type="html">艾恩ASP无组件上传类配合Flash实现多文件上传</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_294.html" />
      <updated>2010-11-13 21:31:23</updated>
      <published>2010-11-13 21:31:23</published>
      <id>http://dev.mo.cn/article_294.html</id>
      <summary type="html">
      <![CDATA[可自由定义上传文件大小，类型等。<br /><br />效果如图所示,<a href="http://dev.mo.cn/source_198.html" target="new"><span style="font-size:20px;">代码下载</span></a>。<br /><br /><a onfocus="this.blur()" href="/upfiles/20101113212819348.jpg" target=new><img src="/upfiles/20101113212819348.jpg" border="0" alt="´ڴ" onload="javascript:if(this.width>560)this.width=560" /></a>]]>
      </summary>
      <category term="" label="无组件上传" scheme="http://dev.mo.cn/cat_diary_20.html" />
   </entry>
   <entry>
      <title type="html">PHP可用于地址栏的base64(phpbase64编码、解码)</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_293.html" />
      <updated>2010-10-24 15:12:28</updated>
      <published>2010-10-24 15:12:28</published>
      <id>http://dev.mo.cn/article_293.html</id>
      <summary type="html">
      <![CDATA[对字符串进行编码和解码，并可在地址栏传递使用，本方法使用的是替换字符，将/和+分别替换成-和(并将最后的等号转换成一个数字，代表等号出现的次数<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">function&nbsp;base64_en($str){<br />&nbsp; &nbsp; &nbsp; &nbsp; $result&nbsp;=&nbsp;base64_encode($str);<br />&nbsp; &nbsp; &nbsp; &nbsp; $result&nbsp;=&nbsp;str_replace("/","-",$result);<br />&nbsp; &nbsp; &nbsp; &nbsp; $result&nbsp;=&nbsp;str_replace("+","(",$result);<br />&nbsp; &nbsp; &nbsp; &nbsp; $i=0;<br />&nbsp; &nbsp; &nbsp; &nbsp; while(substr($result,strlen($result)-1)=="="){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $result&nbsp;=&nbsp;substr($result,0,strlen($result)-1);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $i++;<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;$result&nbsp;.&nbsp;$i;<br />}<br /><br />function&nbsp;base64_de($str){<br />&nbsp; &nbsp; &nbsp; &nbsp; $result&nbsp;=&nbsp;str_replace("-","/",$str);<br />&nbsp; &nbsp; &nbsp; &nbsp; $result&nbsp;=&nbsp;str_replace("(","+",$result);<br />&nbsp; &nbsp; &nbsp; &nbsp; $last&nbsp;=&nbsp;intval(substr($result,strlen($result)-1));<br />&nbsp; &nbsp; &nbsp; &nbsp; $normal&nbsp;=&nbsp;substr($result,0,strlen($result)-1);<br />&nbsp; &nbsp; &nbsp; &nbsp; if($last==0){return&nbsp;base64_decode($normal);}<br />&nbsp; &nbsp; &nbsp; &nbsp; for($i=1;$i&lt;=$last;$i++){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $normal&nbsp;.=&nbsp;"=";<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;base64_decode($normal);<br />}</div></div>]]>
      </summary>
      <category term="" label="php" scheme="http://dev.mo.cn/cat_diary_22.html" />
   </entry>
   <entry>
      <title type="html">“西游记”</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_292.html" />
      <updated>2010-10-15 11:28:03</updated>
      <published>2010-10-15 11:28:03</published>
      <id>http://dev.mo.cn/article_292.html</id>
      <summary type="html">
      <![CDATA[唐僧师徒历经九九八十一难，终于见到了如来佛求取真经。<br />如来问：“你们带U盘了么？”<br />唐僧师徒：...<br />如来又问：“移动硬盘呢？”<br />唐僧师徒：......<br />如来继续问：“IPOD也可以。”<br />唐僧师徒：.........<br />如来叹了口气：“那你们就原路回去吧，我用QQ传给你们！”<br />唐僧：我靠，&nbsp;早知道加你QQ就完了，老子还走这么远干嘛啊。<br />如来回应道：“你们以为要加就加啊，我经常隐身滴！最后，如来还来句：你们有没psp啊？”<br />唐僧:……<br />如来：那这么远的路，你们是怎么娱乐的？<br />唐僧师徒：打怪升级……<br /><br />后续：<br />唐僧回去加了如来QQ。<br />数据传送中……<br />1年过去了,数据传送中……<br />5年过去了,数据传送中……<br />10年过去了,数据传送中……<br />15年过去了,数据传送中……<br />如来打来电话：怎么这么慢呢，你什么网啊？<br />唐僧&nbsp;&nbsp;：单位的网……<br />如来：&nbsp;……你再来一趟吧，带上U盘<br />唐僧:&nbsp;……]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">100句英语谚语，你会几个？</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_291.html" />
      <updated>2010-10-10 10:54:01</updated>
      <published>2010-10-10 10:54:01</published>
      <id>http://dev.mo.cn/article_291.html</id>
      <summary type="html">
      <![CDATA[1.&nbsp;Never&nbsp;say&nbsp;die.永不言败。<br /><br />2.No&nbsp;cross,&nbsp;no&nbsp;crown.不经历风雨，怎么见彩虹。<br /><br />3.New&nbsp;wine&nbsp;in&nbsp;old&nbsp;bottles.旧瓶装新酒。<br /><br />4.Never&nbsp;too&nbsp;old&nbsp;to&nbsp;learn,&nbsp;never&nbsp;too&nbsp;late&nbsp;to&nbsp;turn.亡羊补牢，为时未晚。<br /><br />5.No&nbsp;garden&nbsp;without&nbsp;its&nbsp;weeds.没有不长草的园子。<br /><br />6.No&nbsp;living&nbsp;man&nbsp;all&nbsp;things&nbsp;can.世上没有万事通。<br /><br />7.No&nbsp;man&nbsp;can&nbsp;do&nbsp;two&nbsp;things&nbsp;at&nbsp;once.一心不可二用。<br /><br />8.No&nbsp;man&nbsp;is&nbsp;born&nbsp;wise&nbsp;or&nbsp;learned.没有生而知之者。<br /><br />9.No&nbsp;man&nbsp;is&nbsp;content.人心不足蛇吞象。<br /><br />10.No&nbsp;man&nbsp;is&nbsp;wise&nbsp;at&nbsp;all&nbsp;times.聪明一世，糊涂一时。<br /><br />11.None&nbsp;are&nbsp;so&nbsp;blind&nbsp;as&nbsp;those&nbsp;who&nbsp;won't&nbsp;see.视而不见。<br /><br />12.None&nbsp;are&nbsp;so&nbsp;deaf&nbsp;as&nbsp;those&nbsp;who&nbsp;won't&nbsp;hear.充耳不闻。<br /><br />13.No&nbsp;news&nbsp;is&nbsp;good&nbsp;news.没有消息就是好消息。<br /><br />14.No&nbsp;one&nbsp;can&nbsp;call&nbsp;back&nbsp;yesterday.昨日不会重现。<br /><br />15.No&nbsp;pains,&nbsp;no&nbsp;gains.没有付出就没有收获。<br /><br />16.No&nbsp;pleasure&nbsp;without&nbsp;pain.没有苦就没有乐。<br /><br />17.No&nbsp;rose&nbsp;without&nbsp;a&nbsp;thorn.没有不带刺的玫瑰。<br /><br />18.No&nbsp;sweet&nbsp;without&nbsp;sweat.先苦后甜。<br /><br />19.No&nbsp;smoke&nbsp;without&nbsp;fire.无风不起浪。<br /><br />20.Nothing&nbsp;brave,&nbsp;nothing&nbsp;have.不入虎穴，焉得虎子。<br /><br />21.Nothing&nbsp;dries&nbsp;sooner&nbsp;than&nbsp;a&nbsp;tear.眼泪干得最快。<br /><br />22.Nothing&nbsp;in&nbsp;the&nbsp;world&nbsp;is&nbsp;difficult&nbsp;for&nbsp;one&nbsp;who&nbsp;sets&nbsp;his&nbsp;mind&nbsp;to&nbsp;it.世上无难事，只怕有心人。<br /><br />23.Nothing&nbsp;is&nbsp;difficult&nbsp;to&nbsp;the&nbsp;man&nbsp;who&nbsp;will&nbsp;try.世上无难事，只要肯登攀。24.Nothing&nbsp;seek,&nbsp;nothing&nbsp;find.没有追求就没有收获。<br /><br />25.Nothing&nbsp;is&nbsp;so&nbsp;necessary&nbsp;for&nbsp;travelers&nbsp;as&nbsp;languages.外出旅行，语言最要紧。<br /><br />26.Nothing&nbsp;is&nbsp;to&nbsp;be&nbsp;got&nbsp;without&nbsp;pains&nbsp;but&nbsp;poverty.世上唯有贫穷可以不劳而获。<br /><br />27.Not&nbsp;to&nbsp;advance&nbsp;is&nbsp;to&nbsp;go&nbsp;back.不进则退。<br /><br />28.Not&nbsp;to&nbsp;know&nbsp;what&nbsp;happened&nbsp;before&nbsp;one&nbsp;was&nbsp;born&nbsp;is&nbsp;always&nbsp;to&nbsp;be&nbsp;a&nbsp;child.不懂世故，幼稚可笑。<br /><br />29.No&nbsp;way&nbsp;is&nbsp;impossible&nbsp;to&nbsp;courage.勇者无惧。<br /><br />30.Obedience&nbsp;is&nbsp;the&nbsp;first&nbsp;duty&nbsp;of&nbsp;a&nbsp;soldier.军人以服从命令为天职。<br /><br />31.Observation&nbsp;is&nbsp;the&nbsp;best&nbsp;teacher.观察是最好的老师。<br /><br />32.Offense&nbsp;is&nbsp;the&nbsp;best&nbsp;defense.进攻是最好的防御。<br /><br />33.Old&nbsp;friends&nbsp;and&nbsp;old&nbsp;wines&nbsp;are&nbsp;best.陈酒味醇，老友情深。<br /><br />34.Old&nbsp;sin&nbsp;makes&nbsp;new&nbsp;shame.一失足成千古恨。<br /><br />35.Once&nbsp;a&nbsp;man&nbsp;and&nbsp;twice&nbsp;a&nbsp;child.一次老，两次小。<br /><br />36.Once&nbsp;a&nbsp;thief,&nbsp;always&nbsp;a&nbsp;thief.偷盗一次，做贼一世。<br /><br />37.Once&nbsp;bitten,&nbsp;twice&nbsp;shy.一朝被蛇咬，十年怕井绳。<br /><br />38.One&nbsp;boy&nbsp;is&nbsp;a&nbsp;boy,&nbsp;two&nbsp;boys&nbsp;half&nbsp;a&nbsp;boy,&nbsp;three&nbsp;boys&nbsp;no&nbsp;boy.一个和尚挑水喝，两个和尚抬水喝，三个和尚没水喝。<br /><br />39.One&nbsp;cannot&nbsp;put&nbsp;back&nbsp;the&nbsp;clock.时钟不能倒转。<br /><br />40.One&nbsp;eyewitness&nbsp;is&nbsp;better&nbsp;than&nbsp;ten&nbsp;hearsays.百闻不如一见。<br /><br />41.One&nbsp;false&nbsp;move&nbsp;may&nbsp;lose&nbsp;the&nbsp;game.一着不慎，满盘皆输。<br /><br />42.One&nbsp;good&nbsp;turn&nbsp;deserves&nbsp;another.行善积德。<br /><br />43.One&nbsp;hour&nbsp;today&nbsp;is&nbsp;worth&nbsp;two&nbsp;tomorrow.争分夺秒效率高。<br /><br />44.One&nbsp;man's&nbsp;fault&nbsp;is&nbsp;other&nbsp;man's&nbsp;lesson.前车之鉴。<br /><br />45.One&nbsp;never&nbsp;loses&nbsp;anything&nbsp;by&nbsp;politeness.讲礼貌不吃亏。<br /><br />46.One&nbsp;swallow&nbsp;does&nbsp;not&nbsp;make&nbsp;a&nbsp;summer.一燕不成夏。<br /><br />47.One's&nbsp;words&nbsp;reflect&nbsp;one's&nbsp;thinking.言为心声。<br /><br />48.Out&nbsp;of&nbsp;debt,&nbsp;out&nbsp;of&nbsp;danger.无债一身轻。<br /><br />49.Out&nbsp;of&nbsp;office,&nbsp;out&nbsp;of&nbsp;danger.无官一身轻。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />50.Out&nbsp;of&nbsp;sight,&nbsp;out&nbsp;of&nbsp;mind.眼不见，心为静。<br /><br />51.Patience&nbsp;is&nbsp;the&nbsp;best&nbsp;remedy.忍耐是良药。<br /><br />52.Penny&nbsp;wise,&nbsp;pound&nbsp;foolish.贪小便宜吃大亏。<br /><br />53.Plain&nbsp;dealing&nbsp;is&nbsp;praised&nbsp;more&nbsp;than&nbsp;practiced.正大光明者，说到的多，做到的少。<br /><br />54.Please&nbsp;the&nbsp;eye&nbsp;and&nbsp;plague&nbsp;the&nbsp;heart.贪图一时快活，必然留下隐祸。<br /><br />55.Pleasure&nbsp;comes&nbsp;through&nbsp;toil.苦尽甘来。<br /><br />56.Pour&nbsp;water&nbsp;into&nbsp;a&nbsp;sieve.竹篮子打水一场空。<br /><br />57.Practice&nbsp;makes&nbsp;perfect.熟能生巧。<br /><br />58.Praise&nbsp;is&nbsp;not&nbsp;pudding.恭维话不能当饭吃。<br /><br />59.Praise&nbsp;makes&nbsp;good&nbsp;men&nbsp;better,&nbsp;and&nbsp;bad&nbsp;men&nbsp;worse.好人越夸越好，坏人越夸越糟。<br /><br />60.Prefer&nbsp;loss&nbsp;to&nbsp;unjust&nbsp;gain.宁可吃亏，不贪便宜。<br /><br />61.Prevention&nbsp;is&nbsp;better&nbsp;than&nbsp;cure.预防胜于治疗。<br /><br />62.Pride&nbsp;goes&nbsp;before,&nbsp;and&nbsp;shame&nbsp;comes&nbsp;after.骄傲使人落后。<br /><br />63.Promise&nbsp;is&nbsp;debt.一诺千金。<br /><br />64.Proverbs&nbsp;are&nbsp;the&nbsp;daughters&nbsp;of&nbsp;daily&nbsp;experience.谚语是日常经验的结晶。<br /><br />65.Pull&nbsp;the&nbsp;chestnut&nbsp;out&nbsp;of&nbsp;fire.火中取栗。<br /><br />66.Put&nbsp;the&nbsp;cart&nbsp;before&nbsp;the&nbsp;horse.本末倒置。<br /><br />67.Put&nbsp;your&nbsp;shoulder&nbsp;to&nbsp;the&nbsp;wheel.鼎力相助。<br /><br />68.Reading&nbsp;enriches&nbsp;the&nbsp;mind.开卷有益。<br /><br />69.Reading&nbsp;is&nbsp;to&nbsp;the&nbsp;mind&nbsp;while&nbsp;exercise&nbsp;to&nbsp;the&nbsp;body.读书健脑，运动强身。<br /><br />70.Respect&nbsp;yourself,&nbsp;or&nbsp;no&nbsp;one&nbsp;else&nbsp;will&nbsp;respect&nbsp;you.要人尊敬，必须自重。<br /><br />71.Rome&nbsp;is&nbsp;not&nbsp;built&nbsp;in&nbsp;a&nbsp;day.冰冻三尺，非一日之寒。<br /><br />72.Saying&nbsp;is&nbsp;one&nbsp;thing&nbsp;and&nbsp;doing&nbsp;another.言行不一。<br /><br />73.Seeing&nbsp;is&nbsp;believing.眼见为实。<br /><br />74.Seek&nbsp;the&nbsp;truth&nbsp;from&nbsp;facts.实事求是。<br /><br />75.Send&nbsp;a&nbsp;wise&nbsp;man&nbsp;on&nbsp;an&nbsp;errand,&nbsp;and&nbsp;say&nbsp;nothing&nbsp;to&nbsp;him.智者当差，不用交代。<br /><br />76.Set&nbsp;a&nbsp;thief&nbsp;to&nbsp;catch&nbsp;a&nbsp;thief.以贼捉贼。<br /><br />77.Short&nbsp;accounts&nbsp;make&nbsp;long&nbsp;friends.好朋友勤算账。<br /><br />78.Something&nbsp;is&nbsp;better&nbsp;than&nbsp;nothing.聊胜于无。<br /><br />79.Soon&nbsp;learn,&nbsp;soon&nbsp;forgotten.学得快，忘得快。<br /><br />80.Soon&nbsp;ripe,&nbsp;soon&nbsp;rotten.熟得快，烂得快。<br /><br />81.Speech&nbsp;is&nbsp;silver,&nbsp;silence&nbsp;is&nbsp;gold.能言是银，沉默是金。<br /><br />82.Still&nbsp;water&nbsp;run&nbsp;deep.静水常深。83.Strike&nbsp;the&nbsp;iron&nbsp;while&nbsp;it&nbsp;is&nbsp;hot.趁热打铁。<br /><br />84.Success&nbsp;belongs&nbsp;to&nbsp;the&nbsp;persevering.坚持就是胜利。<br /><br />85.Take&nbsp;things&nbsp;as&nbsp;they&nbsp;come.既来之，则安之。<br /><br />86.Talking&nbsp;mends&nbsp;no&nbsp;holes.空谈无补。<br /><br />87.Talk&nbsp;of&nbsp;the&nbsp;devil&nbsp;and&nbsp;he&nbsp;will&nbsp;appear.说曹操，曹操就到。<br /><br />88.Hasty&nbsp;love,&nbsp;soon&nbsp;cold.一见钟情难维久。<br /><br />89.Health&nbsp;is&nbsp;better&nbsp;than&nbsp;wealth.健康胜过财富。<br /><br />90.Health&nbsp;is&nbsp;happiness.健康就是幸福。<br /><br />91.Hear&nbsp;all&nbsp;parties.兼听则明。<br /><br />92.Heaven&nbsp;never&nbsp;helps&nbsp;the&nbsp;man&nbsp;who&nbsp;will&nbsp;not&nbsp;act.自己不动，叫天何用。<br /><br />93.He&nbsp;is&nbsp;a&nbsp;fool&nbsp;that&nbsp;forgets&nbsp;himself.愚者忘乎所以。<br /><br />94.He&nbsp;is&nbsp;a&nbsp;good&nbsp;friend&nbsp;that&nbsp;speaks&nbsp;well&nbsp;of&nbsp;us&nbsp;behind&nbsp;our&nbsp;backs.背后说好话，才是真朋友。<br /><br />95.He&nbsp;is&nbsp;a&nbsp;wise&nbsp;man&nbsp;who&nbsp;speaks&nbsp;little.聪明不是挂在嘴上。<br /><br />96.He&nbsp;is&nbsp;lifeless&nbsp;that&nbsp;is&nbsp;faultless.只有死人才不犯错误。<br /><br />97.He&nbsp;is&nbsp;not&nbsp;fit&nbsp;to&nbsp;command&nbsp;others&nbsp;that&nbsp;cannot&nbsp;command&nbsp;himself.正人先正己。<br /><br />98.He&nbsp;is&nbsp;not&nbsp;laughed&nbsp;at&nbsp;that&nbsp;laughs&nbsp;at&nbsp;himself&nbsp;first.自嘲者不会让人见笑。<br /><br />99.He&nbsp;is&nbsp;wise&nbsp;that&nbsp;is&nbsp;honest.诚实者最明智。<br /><br />100.He&nbsp;knows&nbsp;most&nbsp;who&nbsp;speaks&nbsp;least.大智若愚<br />]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">C#破解access97密码</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_290.html" />
      <updated>2010-8-31 2:14:30</updated>
      <published>2010-8-31 2:14:30</published>
      <id>http://dev.mo.cn/article_290.html</id>
      <summary type="html">
      <![CDATA[只支持acc97的密码破解~100%正确<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;acc(string&nbsp;fname){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileStream&nbsp;f&nbsp;=&nbsp;new&nbsp;FileStream(fname,&nbsp;FileMode.Open);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;Buf&nbsp;=&nbsp;new&nbsp;byte[100];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f.Read(Buf,&nbsp;0,&nbsp;100);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;j&nbsp;=&nbsp;66;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;pwd&nbsp;=&nbsp;new&nbsp;byte[13];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;13;&nbsp;i++)&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;b&nbsp;=&nbsp;(int)Buf[j];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(b&nbsp;&lt;&nbsp;0)&nbsp;{&nbsp;b&nbsp;=&nbsp;256&nbsp;+&nbsp;b;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pwd[i]&nbsp;=&nbsp;(byte)b;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;by1&nbsp;=&nbsp;new&nbsp;byte[]{&nbsp;0x86,&nbsp;0xfb,&nbsp;0xec,&nbsp;0x37,&nbsp;0x5d,&nbsp;0x44,&nbsp;0x9c,&nbsp;0xfa,&nbsp;0xc6,&nbsp;0x5e,&nbsp;0x28,&nbsp;0xe6,&nbsp;0x13&nbsp;};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;pwd1&nbsp;=&nbsp;new&nbsp;byte[13];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuilder&nbsp;sb&nbsp;=&nbsp;new&nbsp;StringBuilder();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;k&nbsp;=&nbsp;0;&nbsp;k&nbsp;&lt;&nbsp;13;&nbsp;k++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((pwd[k]&nbsp;^&nbsp;by1[k])&nbsp;!=&nbsp;0)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pwd1[j]&nbsp;=&nbsp;(byte)(pwd[k]&nbsp;^&nbsp;by1[k]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j++;<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;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Encoding.GetEncoding("gbk").GetString(pwd1);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /></div></div>]]>
      </summary>
      <category term="" label="其他" scheme="http://dev.mo.cn/cat_diary_18.html" />
   </entry>
   <entry>
      <title type="html">调用WebServices查IP的地理位置</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_289.html" />
      <updated>2010-7-26 21:55:33</updated>
      <published>2010-7-26 21:55:33</published>
      <id>http://dev.mo.cn/article_289.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;很多很多查IP地理位置都是用的纯真数据库，数据库的数据更新及时，也很准确。这里共享一个调用webservices的方法，当然webservices是其他人的。主要是一个调用webservices的类，是使用GET方式调用的Webservices。<br /><br />&lt;!--#include&nbsp;file="WebRef_IP.asp"--&gt;<br />&lt;%<br />'首行把Webservices类包含进来，这个类是根据Webservices地址用原创程序自动生成的<br />Dim&nbsp;WS,QueryIP,XMLDOM,Result<br />Set&nbsp;Ws=&nbsp;new&nbsp;IP&nbsp;'IP是类名<br />QueryIP&nbsp;=&nbsp;request.ServerVariables("REMOTE_ADDR")&nbsp;&nbsp;'获取访问者的IP<br />returnXML&nbsp;=&nbsp;WS.GetCityByIP(QueryIP)&nbsp;'调用webservices的方法，返回结果XML<br /><br />'下面把XML加载到DOM，分析出返回的地址Result<br />Set&nbsp;XMLDOM&nbsp;=&nbsp;server.CreateObject("MSXML2.DomDocument")<br />XMLDOM.LoadXML&nbsp;returnXML<br />if&nbsp;Not&nbsp;(XMLDOM.documentElement&nbsp;is&nbsp;Nothing)&nbsp;Then<br />&nbsp; &nbsp; &nbsp; &nbsp; Result&nbsp;=&nbsp;XMLDOM.documentElement.selectSingleNode("string").text<br />End&nbsp;If<br />Response.Write&nbsp;Result<br />%&gt;<br /><br /><br />IP查询的Webservices类，如下：<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;%<br />Class&nbsp;IP<br />&nbsp; &nbsp; &nbsp; &nbsp; Public&nbsp;Url,Charset<br />&nbsp; &nbsp; &nbsp; &nbsp; Private&nbsp;Sub&nbsp;Class_Initialize()<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Url&nbsp;=&nbsp;"http://gz.wufish.com/webservice/ip.asmx"<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Charset="UTF-8"<br />&nbsp; &nbsp; &nbsp; &nbsp; End&nbsp;Sub<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Public&nbsp;Function&nbsp;GetCityByIP(IP)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GetCityByIP&nbsp;=&nbsp;doWebservices("GetCityByIP","IP",Array(IP))<br />&nbsp; &nbsp; &nbsp; &nbsp; End&nbsp;Function<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Function&nbsp;doWebservices(fn,keys,values)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Dim&nbsp;WS,MyUrl,QString<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Set&nbsp;WS&nbsp;=&nbsp;Server.CreateObject("MSXML2.ServerXMLHTTP.3.0")<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MyUrl&nbsp;=&nbsp;Url&nbsp;&&nbsp;"/"&nbsp;&&nbsp;fn&nbsp;&&nbsp;"?"<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; QString&nbsp;=&nbsp;""<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; If&nbsp;Keys&lt;&gt;""&nbsp;Then<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MyKeys&nbsp;=&nbsp;Split(Keys,",")<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; For&nbsp;i=0&nbsp;to&nbsp;ubound(MyKeys)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; QString&nbsp;=&nbsp;QString&nbsp;&&nbsp;MyKeys(i)&nbsp;&&nbsp;"="&nbsp;&&nbsp;server.URLEncode(values(i))&nbsp;&&nbsp;"&"<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Next<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; QString&nbsp;=&nbsp;left(QString,len(QString)-1)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End&nbsp;If<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MyUrl&nbsp;=&nbsp;MyUrl&nbsp;&&nbsp;QString<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WS.open&nbsp;"GET",MyUrl,False<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Ws.Send()<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; If&nbsp;Ws.ReadyState&nbsp;=&nbsp;4&nbsp;Then<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; If&nbsp;Ws.status&nbsp;=&nbsp;200&nbsp;Then<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; doWebservices&nbsp;=&nbsp;Bytes2Str(Ws.responseBody,Charset)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End&nbsp;If<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End&nbsp;If<br />&nbsp; &nbsp; &nbsp; &nbsp; End&nbsp;Function<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; Private&nbsp;Function&nbsp;Bytes2Str(ByVal&nbsp;byt,ByVal&nbsp;cSet)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; If&nbsp;LenB(byt)&nbsp;=&nbsp;0&nbsp;Then<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Bytes2Str&nbsp;=&nbsp;""<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Exit&nbsp;Function<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End&nbsp;If<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Dim&nbsp;mystream,&nbsp;bstr<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Set&nbsp;mystream&nbsp;=server.createobject("ADODB.Stream")<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mystream.Type&nbsp;=&nbsp;2<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mystream.Mode&nbsp;=&nbsp;3<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mystream.Open<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mystream.WriteText&nbsp;byt<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mystream.Position&nbsp;=&nbsp;0<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mystream.CharSet&nbsp;=&nbsp;cSet<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mystream.Position&nbsp;=&nbsp;2<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bstr&nbsp;=&nbsp;mystream.ReadText()<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mystream.Close<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Set&nbsp;mystream&nbsp;=&nbsp;Nothing<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Bytes2Str&nbsp;=&nbsp;bstr<br />&nbsp; &nbsp; &nbsp; &nbsp; End&nbsp;Function<br />End&nbsp;Class<br />%&gt;<br /></div></div>]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">养胃食谱(2)</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_288.html" />
      <updated>2010-7-26 21:25:11</updated>
      <published>2010-7-26 21:25:11</published>
      <id>http://dev.mo.cn/article_288.html</id>
      <summary type="html">
      <![CDATA[有两种饮料应该多喝,一是牛奶,二是热水。不要早晨空腹喝牛奶，而是改在早饭后1-2小时后喝牛奶，胃中有食物防止了空腹喝牛奶的缺点；二是喝奶前先吃一些含淀粉较多的食物，如馒头等；三是早晨喝牛奶时要同时吃些馍、米饭、面包、饼干、点心等含淀粉的食物，这样可使牛奶在人胃中停留时间较长，牛奶与胃液能够充分发生酶解作用，使蛋白质能够很好的消化吸收。&nbsp;<br />　　胃不好，要少食多餐。&nbsp;<br />　　花生，生吃最好，饭前吃个4到6粒，吃太多反而伤胃&nbsp;。&nbsp;<br />　　大枣、豆腐、白菜、牛奶、胡萝卜、健脾和胃&nbsp;<br />　　苹果、柚子、葡萄、桔子、风梨，防脂肪积聚，补心益气生津止津&nbsp;<br />　　核桃、榛子、松子、桂圆、花生等坚果食品可及时补给微量元素益骨质健康。&nbsp;<br />　　花生，蜂蜜都是养胃的。&nbsp;<br />　　红茶+蜂蜜....十分养胃&nbsp;<br /><b><span style="font-size:20px;">如何养胃</span></b><br />　　俗话说胃病“三分治七分养”，七分养应该在三分治的基础上进行，经全面检查确诊后进行系统治疗，并配合精神方面进行调养，才能达到理想的治疗效果。胃就像一部每天不停工作的机器，食物在消化的过程中会对黏膜造成机械性的损伤，保持有节制的饮食是治疗胃病的关键。另外，高度精神紧张也是胃病发生的重要原因，如司机、建筑工人、办公室工作人员等的胃病发生率都很高，所以这些人更应该保持良好的生活习惯及精神的愉悦。&nbsp;<br /><b><span style="font-size:20px;">调理方法</span></b><br />　　1、从生活作息上做起，最起码一天三顿要定时定量，最好给自己设定一个时间表，然后严格遵守。这同时会对睡眠时间产生影响，因为一些晚睡晚起的人是早中餐一块吃的，这种习惯必须要改，并不是说晚上吃夜宵可以弥补过来的，因为人的生物钟虽然可以前后移动，但总是在一定范围内，不可能产生太大的差别。如果不相信的话，可以去查一下相关人体生物钟的资料。&nbsp;<br />　　2、一般，胃消化功能不好的人，症状是吃一点点就会饱，稍微多吃一点就会胃胀，特别在晚上多吃的话，还会因为胃部滞胀而影响入睡。硬的、纤维类的东西不好消化。因而建议少吃多餐，如果还没到正餐时间，可以补充一些食物，但不宜过多，一定要记住这不是正餐，正餐还是要按正常来吃。食物以软、松为主，一些比较韧性、爽口的东西不宜多吃，因为这些东西最难消化。汤最好饭前喝，饭后喝也会增加消化困难。入睡前两三个小时都最好不要吃东西，否则容易影响入睡，如果觉得肚子空可以多喝水。&nbsp;<br />　　3、胃病的人应该戒烟、酒、咖啡、浓茶、碳酸性饮料。&nbsp;<br />　　4、豆奶虽好，但为寒性，牛奶也为寒性，胃病的人应尽量少食或不食。&nbsp;<br />　　5、馒头可以养胃，不妨试试作为主食。&nbsp;<br />　　6、其他蔬菜水果类的食物是人体不能缺乏的，所以应该足量。但最好煮得软一点再吃，这样胃会好受一点。菜和果皮的纤维比较多，可以适度食用，但不宜太多，不容易消化，因而瓜果可以相对多吃。&nbsp;<br />　　7、有胃病的人饭后不宜运动，最好休息一下等胃部的食物消化得差不多了再开始工作，或者慢步行走，也对消化比较好，总之，餐后不宜工作。&nbsp;<br />　　8、非急性情况下，不提倡吃药，因为长期吃药都有副作用，而胃病是一种慢性病，不可能在短期内治愈。如果需要，提倡去看中医，中医的良方对于养胃特别有效。&nbsp;<br />　　9、木瓜适合胃的脾性，可以当作养胃食物，不过对于胃酸较多的人，不要使用太多。而且，一定要记住，胃喜燥恶寒，除了冰的东西以外，其他寒凉的食物像绿豆沙等也都不宜多吃。&nbsp;<br />　　10、再提一次，胃病是一种慢性病，不可能在短期内治好。治病良方就是靠“养”，急不来，只能从生活习惯的改良中获得。我们都需要一个好的胃，这些习惯的改变都是必需的。<br />]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">养胃食谱</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_287.html" />
      <updated>2010-7-26 21:23:04</updated>
      <published>2010-7-26 21:23:04</published>
      <id>http://dev.mo.cn/article_287.html</id>
      <summary type="html">
      <![CDATA[　　鲢鱼：用于缓解胃痛，常用于脾胃虚弱的治疗。尤其适用于胃寒疼痛或由消化不良引起的慢性胃炎。&nbsp;<br />　　带鱼：补五脏、祛风、杀虫，对脾胃虚弱、消化不良尤为适宜。&nbsp;<br />　　胖头鱼：有暖胃、补虚、化痰、平喘的作用。体质虚弱的最好多吃胖头鱼的鱼头,暖胃的同时还能起到治疗耳鸣、头晕目眩的作用。&nbsp;<br />　　狗肉：性温味甘，具有安五脏、暖肾壮阳之功效，善治脾胃虚寒之症疾。在冬季里常吃狗肉，对于脚冷、腰痛、体质虚弱者有良好的保暖御寒作用。&nbsp;<br />　　羊肉：性味甘温，含丰富的脂肪、蛋白质、碳水化合物、无机盐和钙、磷、铁等人体所必需的营养成分，常被人们用作冬季御寒和进补壮阳的佳品，具有暖中补肾虚、开胃健脾、御寒去湿之功效。&nbsp;<br />　　虾米：非常适合冬季肾虚所致的畏寒的人食用。因为它富含蛋白质、碳水化合物、脂肪及钙、磷、铁等成分，具有补肾壮阳、滋阴健胃、通畅血脉之功效。&nbsp;<br />　　核桃：它含有40-50%的脂肪，其中多数为不饱和脂肪酸，具有降低胆固醇，防止动脉硬化及高血压之功效。核桃仁中还富含磷脂和维生素E，具有增强细胞活性，促进造血功能，增进食欲之功效。这些都对提高身体健康，抵御寒冷大有益处。&nbsp;<br />　　板栗：栗子性味甘温，入脾、胃、肾三经，有养胃健脾、强筋活血等功效。适用于脾胃虚寒引起的慢性腹泻&nbsp;<br /><br /><span style="font-size:20px;">早晚养胃粥&nbsp;</span><br />　　材料：粳米50克、大枣10个、莲子20克。&nbsp;<br />　　做法：&nbsp;<br />　　1、莲子用温水泡软、去芯，粳米淘洗干净，大枣洗净。&nbsp;<br />　　2、三者同入锅内，加清水适量，旺火煮开后，文火熬煮成粥。&nbsp;<br />　　3、根据个人口味调味后早晚食用。&nbsp;<br />　　功效：养胃健脾，还可防治缺铁性贫血。&nbsp;<br />　　清晨养胃汤&nbsp;<br />　　材料：红枣50克，带蚕蛹的蚕茧20个，适量白糖。&nbsp;<br />　　做法：&nbsp;<br />　　1、将洗净的红枣，和蚕茧一起入锅，加800克水。&nbsp;<br />　　2、煮沸后改用小火慢煎15分钟。&nbsp;<br />　　3、滤汁入大碗，加入白糖调味即成。&nbsp;<br />　　功效：汤甜味美，养胃健脾，润肺生津。&nbsp;<br /><br />　　<span style="font-size:18px;">桑椹三明治</span>&nbsp;<br />　　材料：切片面包若干（无味或咸味）、桑椹罐头1瓶。&nbsp;<br />　　做法：&nbsp;<br />　　1、将桑椹罐头打开，舀出3～4粒桑椹粒放在面包上。&nbsp;<br />　　2、再舀几勺桑椹汁，均匀地浇在面包片上，将面包片对折即可。&nbsp;<br />　　功效：不仅养胃，还具有明目、清肝及健脑的作用。&nbsp;<br />　　<span style="font-size:18px;">木瓜鲩鱼尾汤</span>&nbsp;<br />　　用料：番木瓜1个，鲩鱼尾100克。&nbsp;<br />　　制法：木瓜削皮切块，鲩鱼尾入油镬煎片刻，加木瓜及生姜片少许，放适量水，共煮1小时左右。&nbsp;<br />　　功用：滋养、消食。对食积不化、胸腹胀满有辅助疗效。&nbsp;<br />　　食物功效：番木瓜的木瓜蛋白酶，有助于食物的消化吸收，对消化不良、痢疾、胃痛、胃溃疡、十二指肠溃疡等均有疗效。番木瓜的脂肪酶，可分解脂肪成脂肪酸，有利于对食物中的脂肪消化吸收。木瓜蛋白酶还能够促进和调节胰液的分泌，对胰腺功能不全引起的消化不良有治疗作用。鲩鱼，味甘，性温。功能暖胃和中、消食化滞。&nbsp;<br />　　<span style="font-size:18px;">砂仁黄芪猪肚</span>&nbsp;<br />　　用料：砂仁6克，黄芪20克，猪肚1个。&nbsp;<br />　　制法：猪肚洗净，将砂仁、黄芪装入猪肚内，加水炖熟，调味食用。&nbsp;<br />　　功用:益气健脾，消食开胃。适用于脾胃虚弱之食少便溏、胃脘疼痛。可用于胃下垂及慢性胃炎病人。&nbsp;<br />　　食物功效：砂仁能行气和胃，醒脾，用于胃呆食滞。临床服用砂仁适量具有促进消化液分泌和增强胃肠蠕动的作用。猪肚能健脾胃、补虚损。&nbsp;<br />　　<span style="font-size:18px;">黄芪内金粥&nbsp;</span><br />　　用料：生黄芪12克，生薏米、赤小豆各10克，鸡内金粉7克，金橘饼1个，糯米80克。&nbsp;<br />　　制法：将生黄芪加水煮20分钟，取汁，加入薏米、赤小豆、糯米煮成粥，加入鸡内金粉即可。&nbsp;<br />　　功用：消食和胃。用于脾虚湿滞食停所致的脘腹胀闷、食欲不振、体困便溏等。&nbsp;<br />　　食物功效：黄芪能补气固表，敛疮生肌。薏米健脾渗湿，除痹止泻。赤小豆能利湿退黄，清热解毒。鸡内金消食健脾，能使胃液分泌量及酸度增加，胃的运动机能增加，排空加速。糯米能补中益气。&nbsp;<br />　　<span style="font-size:18px;">淮山蜂蜜煎</span>&nbsp;<br />　　用料：淮山30克，鸡内金9克，蜂蜜15克。&nbsp;<br />　　制法：淮山、鸡内金水煎取汁，调入蜂蜜，搅匀。日1剂，分两次温服。&nbsp;<br />　　功用：健脾消食。用于脾胃虚弱，运化不健之食积不化、食欲不振等。&nbsp;<br />　　食物功效：淮山能健脾补肺，固肾益精。用于消化不良，小儿厌食症。淮山所含消化酶，能促进蛋白质和淀粉的分解，故有增进食欲的作用。蜂蜜能补中益气，润肠通便，对创面有收敛、营养和促进愈合作用。&nbsp;<br />　　酸奶养胃：早上喝酸奶对人体有益，酸奶容易消化，还可中和胃酸，保护胃粘膜。牛奶也能养胃，有胃溃疡的人喝了牛奶能减轻症状。&nbsp;<br /><span style="font-size:20px;">白开水养胃</span><br />　　：白开水并没有什么营养成分，只是经过一个晚上，人体消耗了一些水分，可用其来补充、平衡身体的水分。&nbsp;<br />　　粥养胃：粥类容易消化，尤其八宝粥，里面含有花生、杏仁、白糖等，热量更高更丰富，对胃有好处。而新鲜的花生富含蛋白质、脂肪，能有效地保护胃。&nbsp;<br />　　最养胃的，是面条;米中含酸多，所以少吃米饭。&nbsp;<br />　　如果熬粥，少放点苏打进去，对胃有好处。&nbsp;<br />　　小米粥就馒头（不是包子），可以养胃&nbsp;。&nbsp;<br />]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">ASP批量上传文件</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_286.html" />
      <updated>2010-7-23 10:14:17</updated>
      <published>2010-7-23 10:14:17</published>
      <id>http://dev.mo.cn/article_286.html</id>
      <summary type="html">
      <![CDATA[直接上代码了~<a href="/upfiles/20100723101304609.rar" target="new"><span style="font-size:20px;">示例包下载</span></a><br /><br />index.asp--表单页<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;!DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN"&nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;<br />&lt;html&nbsp;xmlns="http://www.w3.org/1999/xhtml"&nbsp;xml:lang="zh-cn"&nbsp;lang="zh-cn"&gt;<br />&lt;head&gt;<br />&lt;title&gt;An-Upload无组件上传类9.4.10&nbsp;示例&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&nbsp;style="font-size:12px"&gt;<br />&lt;font&nbsp;color="red"&gt;本示例演示文件和表单数据同时上传:&lt;/font&gt;&lt;hr&nbsp;/&gt;<br />&lt;form&nbsp;name="upload"&nbsp;method="POST"&nbsp;action="upload.asp"&nbsp;Enctype="multipart/form-data"&gt;<br />表单1&nbsp;&lt;input&nbsp;type="text"&nbsp;name&nbsp;="form1"&nbsp;value="测试文本1"&nbsp;/&gt;&lt;br&nbsp;/&gt;<br />表单2&nbsp;&lt;input&nbsp;type="text"&nbsp;name&nbsp;="form2"&nbsp;value="测试文本2"&nbsp;/&gt;&lt;br&nbsp;/&gt;<br />文件1&nbsp;&lt;input&nbsp;type="file"&nbsp;name="file1"&nbsp;/&gt;&lt;br&nbsp;/&gt;<br />文件2&nbsp;&lt;input&nbsp;type="file"&nbsp;name="file2"&nbsp;/&gt;&lt;br&nbsp;/&gt;<br />&lt;br&nbsp;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input&nbsp;class="iButton"&nbsp;type="submit"&nbsp;value="开始上传"&nbsp;/&gt;<br />&lt;/form&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</div></div><br /><br /><br />upload.asp---数据接收页<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;!--#include&nbsp;file="upload_class.asp"--&gt;<br />&lt;%<br />Dim&nbsp;Upload,path,tempCls,e<br />'===============================================================================<br />set&nbsp;Upload=new&nbsp;AnUpLoad&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 />Upload.SingleSize=clng(1000&nbsp;*&nbsp;1024)&nbsp;*&nbsp;1024&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 />Upload.MaxSize=clng(1000&nbsp;*&nbsp;1024)&nbsp;*&nbsp;1024&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 />Upload.Exe="*"&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 />Upload.Charset="gb2312"&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; '设置文本编码，默认为gb2312<br />Upload.GetData()&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 />if&nbsp;Upload.ErrorID&gt;0&nbsp;then&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; '判断错误号,如果myupload.Err&lt;=0表示正常<br />&nbsp; &nbsp; &nbsp; &nbsp; response.Write&nbsp;Upload.description<br />else<br />&nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;Upload.files(-1).count&gt;0&nbsp;then&nbsp;&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; path=server.mappath("files")&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '文件保存路径(这里是files文件夹)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; response.Write&nbsp;"表单数据1："&nbsp;&&nbsp;upload.forms("form1")&nbsp;&&nbsp;"&lt;br&nbsp;/&gt;"<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; response.Write&nbsp;"表单数据2："&nbsp;&&nbsp;upload.forms("form2")&nbsp;&&nbsp;"&lt;br&nbsp;/&gt;"<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '保存第一个文件(以新文件名保存)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set&nbsp;tempCls=Upload.files("file1")&nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Set&nbsp;e&nbsp;=&nbsp;tempCls.SaveToFile(path,0)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;e.error&nbsp;then<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; response.Write&nbsp;e.description<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; response.write&nbsp;"文件:"&nbsp;&&nbsp;tempCls.FileName&nbsp;&&nbsp;"上传完毕,扩展名为"&nbsp;&&nbsp;tempCls.extend&nbsp;&&nbsp;",大小为"&nbsp;&&nbsp;Upload.getsize(tempCls.Size)&nbsp;&&nbsp;";原文件名"&nbsp;&&nbsp;tempCls.LocalName&nbsp;&&nbsp;"!&lt;br&nbsp;/&gt;"<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End&nbsp;If<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set&nbsp;tempCls=nothing<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '保存第二个文件(以新文件名保存)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set&nbsp;tempCls=Upload.files("file2")&nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Set&nbsp;e&nbsp;=&nbsp;tempCls.SaveToFile(path,0)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;e.error&nbsp;then<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; response.Write&nbsp;e.description<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; response.write&nbsp;"文件:"&nbsp;&&nbsp;tempCls.FileName&nbsp;&&nbsp;"上传完毕,扩展名为"&nbsp;&&nbsp;tempCls.extend&nbsp;&&nbsp;",大小为"&nbsp;&&nbsp;Upload.getsize(tempCls.Size)&nbsp;&&nbsp;";原文件名"&nbsp;&&nbsp;tempCls.LocalName&nbsp;&&nbsp;"!&lt;br&nbsp;/&gt;"<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End&nbsp;If<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set&nbsp;tempCls=nothing<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; end&nbsp;if<br />end&nbsp;if<br />response.Write&nbsp;"&lt;br&nbsp;/&gt;上传使用时间:"&nbsp;&&nbsp;Upload.LostTime&nbsp;&&nbsp;"MS"<br />set&nbsp;Upload=nothing&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'销毁类实例<br />%&gt;</div></div><br /><br />]]>
      </summary>
      <category term="" label="无组件上传" scheme="http://dev.mo.cn/cat_diary_20.html" />
   </entry>
   <entry>
      <title type="html">超小型ajax实现</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_285.html" />
      <updated>2010-6-16 20:34:40</updated>
      <published>2010-6-16 20:34:40</published>
      <id>http://dev.mo.cn/article_285.html</id>
      <summary type="html">
      <![CDATA[<span style="color:#FF0000;"><span style="font-family:Verdana;"><span style="font-size:24px;"><a href="/upfiles/20100616210924229.rar" target="new">SmartAjax源代码下载</a></span></span></span><br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">//&nbsp;Aien,i@ruboy.com,1034555083<br />//&nbsp;Ajax(a,b,c,d,e,f,g);<br />//&nbsp;参数说明：a-请求方法；b-请求的地址；c-请求的数据，a为post时有效；d-回调函数，函数里面的this引用是xmlhttp对象；e-是否异步，除非设置为false，否则为异步调用；f,g-登录用户名和密码<br />function&nbsp;Ajax(a,b,c,d,e,f,g){<br />&nbsp; &nbsp; &nbsp; &nbsp; a&nbsp;=&nbsp;a.toUpperCase();<br />&nbsp; &nbsp; &nbsp; &nbsp; if(e===false){e=false;}else{e&nbsp;=&nbsp;true;}<br />&nbsp; &nbsp; &nbsp; &nbsp; var&nbsp;obj&nbsp;=&nbsp;Ajax.Ajax_GetObj();<br />&nbsp; &nbsp; &nbsp; &nbsp; if(obj){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(f){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; obj.open(a,b,e,f,g);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }else{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; obj.open(a,b,e);&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;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(a.toUpperCase()=="POST"){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; obj.setRequestHeader("Content-Type",&nbsp;"application/x-www-form-urlencoded");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; obj.onreadystatechange=function(){if(typeof&nbsp;d&nbsp;!=&nbsp;"function"){return;}d.apply(obj,[a,b,c,d,e,f,g]);};<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; obj.send(c);<br />&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br />Ajax.Ajax_GetObj&nbsp;=&nbsp;function(){<br />&nbsp; &nbsp; &nbsp; &nbsp; var&nbsp;b&nbsp;=&nbsp;null;<br />&nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;(window.ActiveXObject)&nbsp;{&nbsp;&nbsp;//for&nbsp;ie<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var&nbsp;httplist&nbsp;=&nbsp;["MSXML2.XMLHttp.5.0","MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp","Microsoft.XMLHttp"];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for(var&nbsp;i&nbsp;=&nbsp;httplist.length&nbsp;-1;i&nbsp;&gt;=&nbsp;0;i--){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b&nbsp;=&nbsp;new&nbsp;ActiveXObject(httplist[&nbsp;i]);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;b;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }catch(ex){}<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; }else&nbsp;if&nbsp;(window.XMLHttpRequest)&nbsp;{&nbsp;&nbsp;//for&nbsp;other<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b&nbsp;=&nbsp;new&nbsp;XMLHttpRequest();&nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;b;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}</div></div>]]>
      </summary>
      <category term="" label="AJAX" scheme="http://dev.mo.cn/cat_diary_2.html" />
   </entry>
   <entry>
      <title type="html">在ASP中使用JSON的简单例子</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_284.html" />
      <updated>2010-6-12 13:57:26</updated>
      <published>2010-6-12 13:57:26</published>
      <id>http://dev.mo.cn/article_284.html</id>
      <summary type="html">
      <![CDATA[&lt;script&nbsp;language="jscript"&nbsp;runat="server"&gt;<br />function&nbsp;getjson(str){<br />&nbsp; &nbsp; &nbsp; &nbsp; try{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; eval("var&nbsp;jsonStr&nbsp;=&nbsp;("&nbsp;+&nbsp;str&nbsp;+&nbsp;")");<br />&nbsp; &nbsp; &nbsp; &nbsp; }catch(ex){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var&nbsp;jsonStr&nbsp;=&nbsp;null;<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;jsonStr;<br />}<br />&lt;/script&gt;<br />&lt;%<br />set&nbsp;obj&nbsp;=&nbsp;getjson("{name:'anlige'}")<br />response.write&nbsp;obj.name<br />%&gt;]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">中国最流行的客套话和假话有哪些？</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_283.html" />
      <updated>2010-5-21 10:21:12</updated>
      <published>2010-5-21 10:21:12</published>
      <id>http://dev.mo.cn/article_283.html</id>
      <summary type="html">
      <![CDATA[1．家长：压岁钱我给你存着。&nbsp;<br />2．公车司机：后面还有一辆车！&nbsp;<br />3．饭店服务员：您要的菜马上就好…&nbsp;<br />4．小学老师，你跟我说实话，我不告诉你家长！&nbsp;<br />5．初中老师：这节课体育老师有事不上了…&nbsp;<br />6．高中老师：我就占你们一分钟…&nbsp;<br />7．学习好的同学：这次又没考好。&nbsp;<br />8．一群人来打球：我们都不会玩！&nbsp;<br />9．街边小店：跳楼大甩卖！&nbsp;<br />10.领导上台前说:下面我简单的说两句!&nbsp;<br />11.新闻里常说:有困难找民警&nbsp;<br />12.借钱时说:我有了马上还你,结果你不要他不还,你要了,他也不一定会还...&nbsp;<br />13.&nbsp;医生：“我们已经尽了最大努力了……"&nbsp;<br />14.见到久别的同学，存下各自的号码：有空常联系！&nbsp;<br />15.明星：我们只是普通朋友。。。。&nbsp;<br />16.就想抱着你睡觉，我绝对不动手动脚&nbsp;<br />17.地震局说：专家分析,近几年没有大地震。&nbsp;<br />18.太　　太：&nbsp;（出门前化妆时）马上就好！马上就好！&nbsp;<br />19.老　　公：&nbsp;（一面盯着别的女生）她哪有你漂亮？？？　&nbsp;<br />20.食品包装：保证不添加防腐剂。&nbsp;<br />21.女　　生：我们还是可以当朋友的。&nbsp;<br />22.男&nbsp;生:乖,不会痛的....&nbsp;<br />23.售票员说：往里边走！里边有坐！&nbsp;<br />24.老师对最后一名的学生说：你很聪明，只是不努力。。。。。。。&nbsp;<br />25.你人来就好了嘛&nbsp;还带什么礼物嘛.&nbsp;<br />26.小时候犯错或撒谎被揭穿时总会说:我下次再也不敢了...&nbsp;<br />27.小姐：我是新来的,刚做这行没几天..&nbsp;<br />28.“有关部门已经介入调查”&nbsp;<br />29.中巴车售票员：上来吧,保证有坐,马上就走&nbsp;。。上车就走&nbsp;<br />30.公车司机最假的应该是：往里走，后面都没有人.（我日他大爷，后面的人脸都贴窗上了，他说没人）&nbsp;<br />31.售货员:我真的不挣你钱,我这是按进价卖的.&nbsp;<br />32.我再也不跟你玩了！”&nbsp;<br />33.改天请你吃饭！！&nbsp;<br />34.其实你是个好人，就是我们不太适合&nbsp;<br />35.老师和家长:等你考完试想怎么玩就怎么玩,没人管你!&nbsp;<br />]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">“接入服务提供者互联网站备案管理系统”开发完成喽</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_280.html" />
      <updated>2010-3-28 21:40:18</updated>
      <published>2010-3-28 21:40:18</published>
      <id>http://dev.mo.cn/article_280.html</id>
      <summary type="html">
      <![CDATA[“接入服务提供者互联网站备案管理系统”&nbsp;开发完成，顺利用过国家通信计量站的评测。<br />系统核心使用.net制作的dll，业务逻辑使用asp。<br /><br /><div class="quote">杭州创业互联科技有限公司<br />报告号：RJ20100013<br />产品名称：第一商务ICP/IP备案管理系统<br />版本：V1.0.0.888</div><br /><br /><a href="http://www.tmcofmii.com/news_content.asp?id=221" target="new">http://www.tmcofmii.com/news_content.asp?id=221</a>]]>
      </summary>
      <category term="" label="其他" scheme="http://dev.mo.cn/cat_diary_18.html" />
   </entry>
   <entry>
      <title type="html">新增ICP备案的XML文件，符合XSD标准</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_279.html" />
      <updated>2010-3-18 15:40:04</updated>
      <published>2010-3-18 15:40:04</published>
      <id>http://dev.mo.cn/article_279.html</id>
      <summary type="html">
      <![CDATA[新增ICP备案的XML文件，符合XSD标准，注意把Qqdwid节点的值改成你自己的<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;?xml&nbsp;version="1.0"&nbsp;encoding="GBK"?&gt;<br />&lt;UploadData&nbsp;version="V.01.00"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;ICP&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;XZBA&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Baxx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Zt_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;IspZtid&gt;42&lt;/IspZtid&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Dwmc&gt;我要测试啦&lt;/Dwmc&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Dwxz&gt;5&lt;/Dwxz&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Tzr&gt;我自己啊&lt;/Tzr&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Txdz&gt;<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;&lt;Shengid&gt;330000&lt;/Shengid&gt;<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;&lt;Shiid&gt;330100&lt;/Shiid&gt;<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;&lt;Xianid&gt;330106&lt;/Xianid&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Txdz&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Zj&gt;<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;&lt;Zjlx&gt;2&lt;/Zjlx&gt;<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;&lt;Zjhm&gt;371323198709022314&lt;/Zjhm&gt;<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;&lt;Zjzs&gt;当然是我的地址了哈哈哈&lt;/Zjzs&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Zj&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Fzr&gt;<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;&lt;Fzr_xm&gt;我自己&lt;/Fzr_xm&gt;<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;&lt;Fzr_dhhm&gt;086-0532-87568223&lt;/Fzr_dhhm&gt;<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;&lt;Fzr_sjhm&gt;13456789213;13256789213&lt;/Fzr_sjhm&gt;<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;&lt;Fzr_dzyj&gt;i@baiboke.com&lt;/Fzr_dzyj&gt;<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;&lt;Msn&gt;i@baiboke.com&lt;/Msn&gt;<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;&lt;Qq&gt;1034555083&lt;/Qq&gt;<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;&lt;Fzr_zjlx&gt;2&lt;/Fzr_zjlx&gt;<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;&lt;Fzr_zjhm&gt;371323198709022314&lt;/Fzr_zjhm&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Fzr&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Bbfs&gt;0&lt;/Bbfs&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Bz&gt;备注~哈哈哈~&lt;/Bz&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Zt_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Wz_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;IspWzid&gt;29&lt;/IspWzid&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Wzmc&gt;我来测试网站&lt;/Wzmc&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Fwnr&gt;<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;&lt;Fwnr_id&gt;1&lt;/Fwnr_id&gt;<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;&lt;Fwnr_id&gt;&nbsp;6&lt;/Fwnr_id&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Fwnr&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Ym_xx&gt;<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;&lt;IspYmid&gt;20&lt;/IspYmid&gt;<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;&lt;Ym&gt;woceshi.com&lt;/Ym&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Ym_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Ym_xx&gt;<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;&lt;IspYmid&gt;21&lt;/IspYmid&gt;<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;&lt;Ym&gt;woceshi.cn&lt;/Ym&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Ym_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Jr_xx&gt;<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;&lt;IspJrid&gt;54&lt;/IspJrid&gt;<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;&lt;Wzfb&gt;<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;&lt;Fbdd&gt;34&lt;/Fbdd&gt;<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;&lt;/Wzfb&gt;<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;&lt;Wzjrfs&gt;<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;&lt;Jrfs&gt;2&lt;/Jrfs&gt;<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;&lt;/Wzjrfs&gt;<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;&lt;Ip_xx&gt;<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;&lt;IspIpid&gt;46&lt;/IspIpid&gt;<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;&lt;Qsip&gt;2078993383&lt;/Qsip&gt;<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;&lt;Zzip&gt;2078993383&lt;/Zzip&gt;<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;&lt;/Ip_xx&gt;<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;&lt;Ip_xx&gt;<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;&lt;IspIpid&gt;47&lt;/IspIpid&gt;<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;&lt;Qsip&gt;2078933506&lt;/Qsip&gt;<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;&lt;Zzip&gt;2078933514&lt;/Zzip&gt;<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;&lt;/Ip_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Jr_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Wz_Fzr&gt;<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;&lt;Fzr_xm&gt;我自己&lt;/Fzr_xm&gt;<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;&lt;Fzr_dhhm&gt;086-0532-87568242&lt;/Fzr_dhhm&gt;<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;&lt;Fzr_sjhm&gt;13456789213;13256789213&lt;/Fzr_sjhm&gt;<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;&lt;Fzr_dzyj&gt;i@baiboke.com&lt;/Fzr_dzyj&gt;<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;&lt;Msn&gt;i@baiboke.com&lt;/Msn&gt;<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;&lt;Qq&gt;1034555083&lt;/Qq&gt;<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;&lt;Fzr_zjlx&gt;2&lt;/Fzr_zjlx&gt;<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;&lt;Fzr_zjhm&gt;371323198709022314&lt;/Fzr_zjhm&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Wz_Fzr&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Syurl&gt;www.woceshi.com;www.woceshi.cn&lt;/Syurl&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Wz_Bz&gt;备注~啦啦啦啦&lt;/Wz_Bz&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Wz_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Baxx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/XZBA&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Qqdwid&gt;130000000097&lt;/Qqdwid&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/ICP&gt;<br />&lt;/UploadData&gt;</div></div>]]>
      </summary>
      <category term="" label="其他" scheme="http://dev.mo.cn/cat_diary_18.html" />
   </entry>
   <entry>
      <title type="html">Download方法下载下来的xml文件，只有HSRW的节点</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_278.html" />
      <updated>2010-3-11 16:29:57</updated>
      <published>2010-3-11 16:29:57</published>
      <id>http://dev.mo.cn/article_278.html</id>
      <summary type="html">
      <![CDATA[Download方法下载下来的xml文件（是自己手动根据xsd生成的），只有HSRW的节点，谁有空就分析入库试试，里面有前置审批<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;?xml&nbsp;version="1.0"&nbsp;encoding="GBK"?&gt;<br />&lt;DownloadData&nbsp;version="V.01.00"&gt;<br />&nbsp;&nbsp;&lt;ICP&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;HSRW&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Baxx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Zt_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Ztid&gt;10001&lt;/Ztid&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Dwmc&gt;艾恩&lt;/Dwmc&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Dwxz&gt;1&lt;/Dwxz&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Txdz&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Shengid&gt;370000&lt;/Shengid&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Shiid&gt;371300&lt;/Shiid&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Xianid&gt;371323&lt;/Xianid&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Xxdz&gt;我们公司&lt;/Xxdz&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Txdz&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Zj&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Zjlx&gt;1&lt;/Zjlx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Zjhm&gt;3713231986&lt;/Zjhm&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Zjzs&gt;我们公司的&lt;/Zjzs&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Zj&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Fzr&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Fzr_xm&gt;张艾恩&lt;/Fzr_xm&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Fzr_dhhm&gt;13963961834&lt;/Fzr_dhhm&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Fzr_sjhm&gt;13963961834;13063961834&lt;/Fzr_sjhm&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Fzr_dzyj&gt;i@baiboke.com&lt;/Fzr_dzyj&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Msn&gt;i@baiboke.com&lt;/Msn&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Qq&gt;1034555083&lt;/Qq&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Fzr_zjlx&gt;1&lt;/Fzr_zjlx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Fzr_zjhm&gt;371323134609029115&lt;/Fzr_zjhm&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Fzr&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Tzr&gt;张艾恩&lt;/Tzr&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Bbyhlx&gt;1&lt;/Bbyhlx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Scbbsj&gt;2010-2-21&lt;/Scbbsj&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Zjxgsj&gt;2010-2-21&lt;/Zjxgsj&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Bz&gt;备注&lt;/Bz&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Zt_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Wz_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Wzid&gt;100345&lt;/Wzid&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Wzmc&gt;艾恩asp&lt;/Wzmc&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Nrlx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Nrlx_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Nrlx_id&gt;1&lt;/Nrlx_id&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Qzsph&gt;FG232323&lt;/Qzsph&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Spwj&gt;/9j/4AAQSkZJRgABAQEAAAAAAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCADBAXADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2uuY8d67NoUOkmK/0zTkvL37NLd6ihaKJfIlkzjzE5LRqoy38Xety1tbWQ30s1naTSm7K75rdJDgQw4GWB45P51jeLrPUpbjw9PodlazyWV+0zRSzfZ4ljNtPHnIViBmRQAqnqOgyRkWY2heKru+8RDTrTXPDWv79PuLkDT1MXlyRvCqK7CWXCt5jc7cjbxnpXOaT8SfEOoaLPdyadYWuy10yQSCC6lO+6uPLZlhKI0i7dxARm5UANJuO3rJbfxHc+Ior++02C1jt9KvYI302+W4lMsj27KAJoo1Dfu2xnK5HzYHXk9L+F17o1tFaW1z5tte/Yku0hMduLcW9yJg3mRxo8jeXujEo2uXwxGGzC9BHaeH/ABQ83g1dX1VfMm+1S2ipBbtAZnF00ESiORsozkIMOw2lvmIAOJdJ8WC61dtMv9Lu7G6S4Nk0rPHJA9wIRNsRlbeQY8uGZFGBg7W+Ws3R/D183gJLBoJLS8j1J9QigvJ/MbC35uY0kkVn5ZQoL5cjcT8xGDi6Tc3dx42aXUdPu7KFtXN/GFsruVg/2QWYjdhAIlHVzIsjKMYBYfPSGeg6Jqf9oxXCSw+Re2kv2e6gDbxHJtV/lbA3KVdGBwDhhkK2VGlWL4asriBtUvryPyJtTuhdm3LBjABDFEqsw4LYiDHGQCxALABjsPHFKNs8EEy9ds0SyAH1wwIz70AOoqH7JZf9A3Tf/AKL/wCJo+yWX/QN03/wCi/+Jo0AmoqH7JZf9A3Tf/AKL/4mj7JZf9A3Tf8AwCi/+Jo0AmoqH7JZf9A3Tf8AwCi/+Jo+yWX/AEDdN/8AAKL/AOJo0AmoqH7JZf8AQN03/wAAov8A4mj7JZf9A3Tf/AKL/wCJo0AmoqH7JZf9A3Tf/AKL/wCJo+yWX/QN03/wCi/+Jo0AmoqH7JZf9A3Tf/AKL/4mj7JZf9A3Tf8AwCi/+Jo0AmoqH7JZf9A3Tf8AwCi/+Jo+yWX/AEDdN/8AAKL/AOJo0AmorN1q1s10a/ZNP09GFvIQy2kSkHaeQQuQfetrUP8Aj/uf+urfzNAFeuP8T+Lb7R9XltbTR47+CBLJpmF35cpNzcPAixoU2sQUz8zoOeveultbW1kN9LNZ2k0puyu+a3SQ4EMOBlgeOT+dcZ4q8E3Wr+MLbV7YaMkMH9nhBNalpoxBdPK4icECIFWAwA27GDtAzRoAsPj6b7Zqk1xoV/HpFnpUep+esltIdhE7FspOwZWEShNuec7sAg0X/ibUYdRWwOq2FrdQyxWdwf7CvLmHz5Cvl/vldUj3rJEdhJ2lsb261Wv/AA/ezwePYdP0ee1jvtKe0tRNNGftM7PeSOy4dtqs1wpG/bjd0AHEuu+A2uPEN5rcf9mTO97baiqnTFe9BgEP7mK4aVQobyccjA3tn1p6Ab2leI9/gXSNd1GPM15a2shht1+/NMECxpuPGXcKNxwM8kDJqtpHi+W911dHufD+rWt0vE0xVGt0/wBcA+7cH8tmt5ArFFz8hIG9cx2GgXzfDXQdKkWOHUrG3sHaORvl823aKTyyy5wC0e3cA2M5AbGDS0rWpW8f39xc6bf29td2ttZIGsbtnSWN5Cd7CEwhczsN6ysvyA5Ib5UB1eian/aMVwksPkXtpL9nuoA28RybVf5WwNylXRgcA4YZCtlRpVi+GrK4gbVL68j8ibU7oXZtywYwAQxRKrMOC2IgxxkAsQCwAY7DxxSjbPBBMvXbNEsgB9cMCM+9ADqKh+yWX/QN03/wCi/+Jo+yWX/QN03/AMAov/iaNAJqKh+yWX/QN03/AMAov/iaPsll/wBA3Tf/AACi/wDiaNAJqKh+yWX/AEDdN/8AAKL/AOJo+yWX/QN03/wCi/8AiaNAJqKh+yWX/QN03/wCi/8AiaPsll/0DdN/8Aov/iaNAJqKh+yWX/QN03/wCi/+Jo+yWX/QN03/AMAov/iaNAJqKh+yWX/QN03/AMAov/iaPsll/wBA3Tf/AACi/wDiaNAJqKh+yWX/AEDdN/8AAKL/AOJpLBEjhvFijiiQXrYSJAij9zB0AAAoAWy/1V5/1+t/6IgqaobL/VXn/X63/oiCsbxgZmh0m3t7q4tDdanbWzywNtcI77WwSCM4PcGjdgb9FeKaR4ui1e9W3sH8VMHv4tNWZ9ZtTGJpjOIsskLZU+UhLJuADPjdtXzMaX4paWPM8qTxi2N2zdqcC7v9Ztz+4OM4hz1xvfrsG/dYWrLaLM3Vit2fQlFeUa/rmm6UuvrB4i1q+u9F3/abWHUSrjEzQ9Xswn32twcMcB5CN2weZyUvxS0seZ5UnjFsbtm7U4F3f6zbn9wcZxDnrje/XYN5HC1ZK6i/uB1Yrdn0JRXz3L8UtLHmeVJ4xbG7Zu1OBd3+s25/cHGcQ5643v12DeS/FLSx5nlSeMWxu2btTgXd/rNuf3BxnEOeuN79dg319TrfysXtodz6Eoryz4bavZePdXvdPsdV8VWTQRCVZJtQtnLAzbP9WIw33WjbIyAWKkjCl+1/4ROP/oa/E/8A31F/hWE4OD5ZaM0UlJXRvUVy0enHSvGXhe3j1vWb+G8unWWO8kQJtWNmAwoBPIHfHGMHNdTUtDCiuQkS3u/E2ujVdd1uwtrVbRba30wGSSaSRZCyrEsbu5xGWwo4Csx4BItzaf4ahjgkbxt4rMcqGR2Rd4tUDMpa4IgP2cBkkUmXZgxyA42Nh8ornSUVgto/h1L+4tZvG/ieHyPMD3MzrHbFowTIq3DQiJmQK5ZVYlfLkyBsbFrQvCul6554sfFfjBJYNpkgu1+yzKrZ2t5csCttO1gGxglWAOVOHyhzGpRTv+FbR/8AQ0+J/wDwJi/+NUf8K2j/AOhp8T/+BMX/AMao5Q5htFO/4VtH/wBDT4n/APAmL/41TZPh7FbRtOfEniObygX8uS5j2vjnBxGDg+xB96OULhRV3WZrfT1lla1DogkkYIkjtgO3CohyTgcAAk9qwk1xNQ8KyalbafLZO9s8ix3cMkU0LAHhkY8EEe4PUZBBM2GO1z/kC6h/17yf+gmtbUP+P+5/66t/M1ymnyyT/Dy2lnkeSWTSld3c5ZiYQSST1NdXqH/H/c/9dW/maOgFGy/1V5/1+t/6IgqaobL/AFV5/wBfrf8AoiCpqGCCiiikAUUUUAFFRXM8VtA807rHEg3M7dFHqah0y7j1W3sr+xuYjptxb/aEdo23SBlBj2jjbnOTkU7O1yeeLk4J6rW3rt+T+5luoDdwfZGullR7dVLmRDuGB16dehqWKKOPz3/etLK6tlpCVRQuNqr0HqTTy37uKMBVjiQRoqqFCqOgwKCihq+q2ej6VLqWqTG2s4o/Nd5EYFVxn7uM5x2xmrSzI1y8C7jKkYlbCnCqTgEnGOtR6rZ2ur20lvq1tDfW8mC8VyglVsEEZDZBxgflVpXdUZFZgrY3AHg49abtbQmPPd81rdP+CQpNG8skaSI0keN6hgSuemR2qSlVtkbxqFVXcSNhQCzAYBJ6njioDC0VlBBYvtkQKplunaXd83zMcc9CeB6CkUTUVU1fU7HSWi+2XKok86W0LFT+8d3CIAB6lh9Op4BNW6GmtyYzjJtRd7b+XXX5NMKKKKRQUUUUAFQ2X+qvP+v1v/REFTVDZf6q8/6/W/8AREFNAFl/qrz/AK/W/wDREFY/ir/X+Hf+w3Zf+jRWxZf6q8/6/W/9EQVHe6fDqE1g1zLJEtpdxXi+WgYs0bblByRxnGfbjvkPqLofLuoalceHLN5IbjGsXmsRavESwkaFIRIYZSS8obzDOzDc7HbGrZdZFY5Ws6H9s1mGTw7b7tN1LM1qof5IMKHlhd2PHk5IZn2/KBIcKwNfU7+A/A8k5nm0KCacsHaSZZJGdgYzli0pLEmJck5zl858x90cXw98BReXt8O2h2bcbo5Gzt8vGcy8/wCqXOeuXznzH3erTzFQivd1OWWGbe55L4p8RyeJdB+Il5YnxPcaIeIbq81B5rEn7dblVjiMS+W21gQpYlVyMHrXiNfZEXw98BReXt8O2h2bcbo5Gzt8vGcy8/6pc565fOfMfcRfD3wFF5e3w7aHZtxujkbO3y8ZzLz/AKpc565fOfMfc6eYwpqyj+IpYZy1bPjeivsiL4e+AovL2+HbQ7NuN0cjZ2+XjOZef9Uuc9cvnPmPuIvh74Ci8vb4dtDs243RyNnb5eM5l5/1S5z1y+c+Y+7T+1o/y/iT9Ufc8p/ZQkx4p1mPzMbrWJtm/G7E6c7d4zjPXY2M/eTOH7Px14D1TX/ENhf6R4s1rR7YuFv7e3vJVV0A4aJQcI5wFPG3ndjIIfr9O8K+HtGtLmHw5HcaLJcRrE89lu34Xy8H55GUtiMfMQSCzkEM7E0/+ETj/wChr8T/APfUX+FeXiKvtqjqLS/+R1U4ckVEjuYVt/GngWCMyFIrmVFMkjSMQIGHLMSWPuSSe9dFWRpfhiystb0/U59c1y+kspDJFHciIrkqVPQA9Ce/pWvWDNEcnbHUl8U+I20XSpb+7D2A82AQGeyQxXIaaITsqGTBMYyePMJIcAo2hqvh3UpdM1610jw3fW0PiHQhpCRzXEDPZTB7vdNdN5zFw5ug5dDK7YcsNxAbe0CGHSdU1PUUmkafUBEsiGIFUEYYLj5gcnc2fw9Mnd/t3/a/8gf/AGdWmibHH/8ACJ3upSWugatpMraTBq2p6hc3ZnQQXNvdreKIo9r+aJMXig5RQNj4Y/Lu0Phppevpquqaz4lXUo7i8srO18nUpbSSZHiad32taqsZizOApIDkh8gDbXQf27/tf+QP/s6P7d/2v/IH/wBnT5kFjforA/t3/a/8gf8A2dH9u/7X/kD/AOzo5kFjfqDUP+PC5/65N/I1j/27/tf+QP8A7OmTayJYXjZyFdSpxBzz/wADpcyCxyPifwloL3d7f3NhqV7eStLMUh1GRC5DMAqgsFHQAZIA9hXOw+HvDl14YbVF0PWbCZrdpkt77UJRImASu9Vc47HGcjODg5A29Y0ObUdTuboeIdchSWRnSKOWNUjUkkKBs4Az7+5J5qi/hOSRGSTxHr7IwwytNGQR6H93U3HYXSf+SbWX/YJT/wBEiuu1D/j/ALn/AK6t/M1gXNnHp3hOWygLtFbWRhQucsQseBnHfit/UP8Aj/uf+urfzNIZRsv9Vef9frf+iIKmqGy/1V5/1+t/6IgqahggooopAFRtMguYoPmMsisyqqk8LySSBwBkdaJ/M8iTyNnnbTs3527scZx2zU4LQfKk4clArvGCgbIGRg84z60wKslnDPYS298ftqTlxLFNEpj8s9Ex/EMdc9adbQQ2ttFb20UcMESCOOONQqooGAoA4AA4xUtFFwsr3CisS4/4l3iW2lT/AFGqZt5EHadEZ0fHTlEdWPJOyIDgGtugAooopAFFFFAFW9sLO+Nub60t7k28qzwmaNX8qQdHXI4YdiOae7x2VmZbm4llYykn93woZgERQoyeuM9eanpVYqwZSQwOQR1FO4WS2BlKsVYEMDgg9RSUgEslxNJLNGIggKqVYyO5bk56AY/EmlpAFFFFABUNl/qrz/r9b/0RBU1Q2X+qvP8Ar9b/ANEQU0AWX+qvP+v1v/REFLcXEFsge5mjhQnAaRgoz6c0ll/qrz/r9b/0RBXI/FlVfw1bq6hla+gBBGQRup7sDpv7W07/AKCFp/3+X/Gj+1tO/wCghaf9/l/xryCw0XT7m58uS2t40CO7MsCscKpbgcenrUx0PRpLa4kto1Z4UDlZLNFBG5V6hj/e9KfKhXPWf7W07/oIWn/f5f8AGj+1tO/6CFp/3+X/ABrxf+zbH/nytv8Av0v+FH9m2P8Az5W3/fpf8KOUOY9o/tbTv+ghaf8Af5f8aP7W07/oIWn/AH+X/GvF/wCzbH/nytv+/S/4Uf2bY/8APlbf9+l/wo5Q5j2j+1tO/wCghaf9/l/xo/tbTv8AoIWn/f5f8a8hh8P200SyJa6aFPZ3hQ/kSDTLvRbO1lCNbWEhKhsxBHHPbI7jp/8AWo5UFz2H+1tO/wCghaf9/l/xo/tbTv8AoIWn/f5f8a8X/s2x/wCfK2/79L/hV9NA0guokn0xUz8xW3ckD2GwZo5Ques/2tp3/QQtP+/y/wCNH9rad/0ELT/v8v8AjXjL6ZYK7KtraOAcBliGD7jIzUtjo1jdXtvb/ZbZPNkWPd5KnGTjOKOULnsP9rad/wBBC0/7/L/jR/a2nf8AQQtP+/y/415f/wAI3on2fzuNvk+fj7CmdvmeX/f65/Ss6+0axtb24t/sts/lSNHu8lRnBxnFHKguew/2tp3/AEELT/v8v+NH9rad/wBBC0/7/L/jXjlvpmls5FzbRRpjgx2yOc/QkVa1HQ9GtJZ4UjWSeJymDZoqkg4PO4n9KOULnrP9rad/0ELT/v8AL/jR/a2nf9BC0/7/AC/414v/AGbY/wDPlbf9+l/wq1Z+H4rrDRaUJId21nitQ+PXt1x2zRyhc9e/tbTv+ghaf9/l/wAalt7+zuZRFbXdvLKQSEjkDE4GTwD6AmvIL3wyLJpfP0lBHGxUy/ZvkPOMgkdDXTfCe0toPEdy0FvDExsZgSiBTjA9KOULnaa5/wAgXUP+veT/ANBNa2of8f8Ac/8AXVv5msnXP+QLqH/XvJ/6Ca1tQ/4/7n/rq38zU9BlGy/1V5/1+t/6IgqaobL/AFV5/wBfrf8AoiCpqGCCmyMEjZznCgk4p1NCSPcp+9ijt1Ry+5SWZuNoXHA75JoW+oppuLUXZmV4V1jTfEOmf23pkQkjud9vHPIPmKRyspK4JABKk+pGM46Vr0UUMErKzCiiikMo61Yf2lpk1ssnkyna8Uu3d5UqsGjfGedrKpweDjB4o0W//tLTIblo/JlO5JYt27ypVYrImcc7WVhkcHGRxV6sSz/4l3iS4sV/4976N72JR/yzdSqzDHQBi8bDGSWaUk8imBt1m+MdYXQ10C3JYS3JuLiRTgKyLEcLnsS2zGOeD9Dr2sJuLiOJc5dgMgZx715t4v1dNY+LU9pF5ZsoFj00hFK7lWRWdTnuHLDIxwBj1OlKHNdvojlxVXk5Ip6yaX6v8FY9EooorI6gooooAjniSeCSGVd0cilGGcZBGDWdqniDT9P13R9HeMRXOpF47aGFQFVY4yzE5PAAUDvyw9yNWo5xM0e22eJJSyjdKCVUZGSQOTxmqTXUmak7crt/WxJRTpAqyMEbeoJAbGMj1xTakoKhsv8AVXn/AF+t/wCiIKmqGy/1V5/1+t/6IgpoAsv9Vef9frf+iIK5L4rf8i5bf9f0H/oVdbZf6q8/6/W/9EQVi+L40mbQIpkWSJ9aslZGGQwMoyCO4prcXQ4PQ5BFqAczCD91KBISRtJjYA8c9cdOauvcyNp9+k+ri73RKFjLyHnzEORvAHQH3r3j/hHND/6A2m/+Aqf4Uf8ACOaH/wBAbTf/AAFT/CrsSfNdWob6WGJY0S2Kju9vG5/MqTX0V/wjmh/9AbTf/AVP8KP+Ec0P/oDab/4Cp/hTA+dbm/nuYFhk8kRqxcBIUTBIwfugeg/IelVa+lP+Ec0P/oDab/4Cp/hR/wAI5of/AEBtN/8AAVP8KAPndLSFkVm1C1QkZKssuR7HCYqK5hjh2+Xcwz5znyw4x9dyivo3/hHND/6A2m/+Aqf4Uf8ACOaH/wBAbTf/AAFT/CgD5tRS7qi4BY4G4gD8SeBWui3yIqL/AGUQowNxtSfxJ5Ne9/8ACOaH/wBAbTf/AAFT/Cj/AIRzQ/8AoDab/wCAqf4UAfOF1Cbe4eIvHJtON8bhlb3BFT6O6x6vYvIwVFnQszHAA3Dk19Ef8I5of/QG03/wFT/Cj/hHND/6A2m/+Aqf4UAeExvZ5lSW8tjbND5CIjSqyrvD/eMRycg547nGBgVm6w6yavfPGwZGncqynII3HkV9Ef8ACOaH/wBAbTf/AAFT/Cj/AIRzQ/8AoDab/wCAqf4UrAfPmhpKb1DHdfZY9yrLILhYmCE84yRnp79qv38l5d6feG8uoHczrMsYu0YKAJNwUbj6rx16V7p/wjmh/wDQG03/AMBU/wAKP+Ec0P8A6A2m/wDgKn+FFgPmurVr5cUE00uxmKmONDg/MRgsR2ABOD/exjODj6K/4RzQ/wDoDab/AOAqf4Uf8I5of/QG03/wFT/CmB86y+XLZJKNiTxsI3UYG9cfKwHqMEE/7vck103wu/5GG5/68pv5CvVLS18J3es6hpNrY6RLqOnpFJdQpbITCJdxj3HGASEJx1xg4wwzYvNJ06wj82x0+0tpSrqXhhVCR5bcZA6cCkxnIa5/yBdQ/wCveT/0E1rah/x/3P8A11b+ZrJ1z/kC6h/17yf+gmtbUP8Aj/uf+urfzNZ9CijZf6q8/wCv1v8A0RBU1Q2X+qvP+v1v/REFTUMEFQ2ht3jlngkaczuGEgm3IqgY2qOg55J9adPKkEEk0rbY41LscZwAMmpAxaCBQnlxpGqxp5ezamMgbcDHWgAooopAFFFFABWP4phkOlm9tY3kvNPb7ZAiKWaRlUhowPV0LpnBxvyBkCtiimBZ0m8t7eyudaLGeytLVrrfAQ29dpPy84OVzjnHTmvCPh7G+o+KUmuJXe4aUStK5LMxGXOSTySV616hBpy3dhqvgy6mSzsEMOpyXLIcR6czOQgfARHWWF1UH5RFtI3EMBxHgO2tX8b302jjOmpcTGHrxCNwQ/Nz0ZevPrXVC0aMu7PJxClPHUuyv99v00+89VooorkPWCiiigAooooAhtjbxxpa28jPJAgWUyTeZIWOTub0z6VNTI50Es1pGPnwLiXbH/wAFmx7YAJ7U+mAVDZf6q8/6/W/9EQVNUNl/qrz/r9b/wBEQUIAsv8AVXn/AF+t/wCiIKx/FX+v8O/9huy/9Gitiy/1V5/1+t/6IgrH8Vf6/wAO/wDYbsv/AEaKa3F0PXKKKz5tb0qDWYNIn1Oxj1a4QyQ2T3CCeRBuyyxk7iPlbkD+E+hrQk0KKKKACis/Tdb0rVLq9tdM1OxvLmxfy7qK3uEke3fJG2QAkqcqwwcdD6VoUAFFFRQ3ME8k8cE0Uklu4jmVHBMblVYKwHQ7WVsHswPcUAS0UVn63relaDapda5qdjpts7iNZby4SFGcgkKCxAzgE49jQBoUVV0vUrHV7CK+0q9tr6ylz5dxbSrLG+CQcMpIOCCPqDVqgAorP1vW9K0G1S61zU7HTbZ3Eay3lwkKM5BIUFiBnAJx7GtCgAorifiV8SdH+Hv9nf21bahP9v8AM8r7JGjY2bc7tzr/AHxjGe9c/b/G3TbnSTqlv4S8Zy6YEaQ3cemq0IVc7m3iTbgYOTnjBrWNCpKPMloQ5xTs2erUUUVkWcrp0OoL8TdcupdLuY9Nm0yzt4b1pIjHJJFJcOwChzIOLhQCVAyj/wCzu29a/wCPZf8Agf8A6Lekh1vSp9Zn0iDU7GTVrdBJNZJcIZ40O3DNGDuA+ZeSP4h6il1r/j2X/gf/AKLekwRwWuf8gXUP+veT/wBBNa2of8f9z/11b+ZrJ1z/AJAuof8AXvJ/6Ca1tQ/4/wC5/wCurfzNZ9CyjZf6q8/6/W/9EQVNUNl/qrz/AK/W/wDREFTUMENkYrGzAFiASAO9Z3hzWLjXtJj1G8sruxlleRfIu1ZZQqyMqswYAjcqhsEcbu/Wr86u8EixSeXIykK+M7Tjg471KyomFjeSRQoG+QAMxxySBx1zRdWsTyvn5r6dv17iUUUUigooooAKKKvaJAZ9Si67UO84PTHT9cUwPPPjZr8dtqltpEAiiuY9MkhluoZWLIsrIzQbQeA3kR5zzhh0G4NjfCZSl1hhg/ZmP4F1Irkdf1BvFPjLUNRcuYp5mdd6hWEQ4RSBxkKFHGfXnrXsfhfR10mx+bJuZgGlyeh/ujtxk896666VOCgjxsunPFVp4mWyvFel7/16vXRGzRRRXGeyFFFFABRRRQBlahrNzZa1pemQWF3PDqDOJriNW8q3VEZgXIBGSwVQCRnccdMHVpqR/vpZJJ5NvlhY4VVdu7PLE9enGKdTbT2JhFxvd3/rYKhsv9Vef9frf+iIKmqGy/1V5/1+t/6IgoRQWX+qvP8Ar9b/ANEQVj+Kv9f4d/7Ddl/6NFbFl/qrz/r9b/0RBWP4q/1/h3/sN2X/AKNFNbi6HrledahLYzeN7rS7nTtXtrNtQtr2Z49Nupk1C7VIfKfzlRo44Y/Lhz8ylnjO7aqt53otZ82t6VBrMGkT6nYx6tcIZIbJ7hBPIg3ZZYydxHytyB/CfQ1oSaFFFRNcwLdR2rTRC5kRpEiLjeyKVDMB1IBdAT23D1FAHC+Gk+0+OLa4srDUrbT7LTJrQ217Y/ZY9MYtbhYLchVWVW8pyzK0ygxJsZVYB+/rP03W9K1S6vbXTNTsby5sX8u6it7hJHt3yRtkAJKnKsMHHQ+laFAEV2s7Wsy2ckUVyUYRSSxmRFfHBZQylgDjIDDPqOtedfBvTtS0O78WaVqem/ZPLvbedJxLLOLtmtIUeXzmhiWVmaIs7Dkuz7gOGf0VbmBrqS1WaI3MaLI8Qcb1RiwViOoBKOAe+0+hotrmC6jMlrNFNGrvGWjcMA6MVdcjuGUqR2II7UAS1yvxCtI5rPS7uSfW7VtPvftCXOj2yXM0LGGWLJiaOQupEpXCoxBYHhQzDqqz7vW9Ks9Mm1K81Oxg06B2jlupbhFijdX8sqzk4BDgqQT97jrQBV8G3Go3Ph23l1gS/aS8oRpo/KkkhErCGSRMDbI8QjZl2rhmI2pjaNqorS5gvLWG6s5op7adFkilicMkiMMhlI4IIIIIqWgDzr4naa9xr+j3dxPq9vpI0++sbqTTNPW/dzM9sVieEwzZjZYpMnZj5QCw3AN2vh6XUZ9A0yXXIIrbVpLWJ7yGI5SOYoC6qcngNkDk/U1FqHiPQ9O0q21PUNZ0200252+Rdz3SRwy7lLLtcnDZUEjB5AzWrQB82/tjf8yj/wBvn/tCvErC/wBngfWEa7zdtLaWMUTyZP2QtPPIqKTwvnRwsSBwT1+c5+6PEWk6BqMcEniSw0u6jicRwtfwxuEeRlUKpccFm2LgdTgelZs3gvwRBJBHP4a8NxyXDmOFXsIAZHCsxVQV5O1WbA7KT2NejRxsadNU2tv87nNOi5SckzqaKKimuYIJII55oo5LhzHCruAZHCsxVQep2qzYHZSexrzjpPL9DsL5fGVhA8Gpf6LrV/ey2clqy2VpFILrZcw3GweZLJ50e5DLIB58mI02Dy/Rta/49l/4H/6Leqlt4s8OXWsnSLXX9Im1ZXeM2Ud7G04dM718sNuyNpyMcYPpVvWv+PZf+B/+i3pMEcFrn/IF1D/r3k/9BNa2of8AH/c/9dW/maydc/5Auof9e8n/AKCa1tQ/4/7n/rq38zWfQso2X+qvP+v1v/REFTVDZf6q8/6/W/8AREFTUMEFQ2xt440tbeRnkgQLKZJvMkLHJ3N6Z9KmpI2k8z7NBbuyy7p5ZERQF2qBl269MADmgBaKKKQBRRRQAVlfETUW0T4bahIhkWfUpFso2UKw2nJbOegKiQZ65I6da140aSRUQZZiFA9Sa83+NN8mo+LrLQoY9ttpMWXYjBZpArHkHkY2dgcluvFb4eKc7vZHDmNSUaLhD4paL5/8AzPhdovn3i3Uo+SLEp57/wAA6/Vvwwa9ZrL8Nab/AGXpMUDDEzfvJf8AePbqegwOPStSs6k3OTkzow9COHpRpR2QUUUVBsFFFFABRRUc8jRR7o4ZZ3LKqxxDLMSQOM49aAG2ht3jlngkaczuGEgm3IqgY2qOg55J9amp8oaPZAyqggXylRVACgduKZTAKhsv9Vef9frf+iIKmqGy/wBVef8AX63/AKIgoQBZf6q8/wCv1v8A0RBWP4q/1/h3/sN2X/o0VsWX+qvP+v1v/REFY/ir/X+Hf+w3Zf8Ao0U1uLoeuV5V4wsNSHjB9N0gXL2+panpmsXKyaVLJGzRTQrIEu1cRxbIrNHKSKSS2FJLhV9VorQkK4rUUhj+MWh3CWFyZX0W8tpr2OxkaPma3eKN5wu0f6uchS3BPYuN3a0UAeYfDi1uxdeDbeWxvoJPD/hyXS9QNxbSQolwTZgLG7gLMP8AR5fnjLL8oOfmXPp9FFAHFaKkMPxc8UNDYXMP2nTLDzLr7DJHDPLG9xu/fbQjsElgH3icDH8DBT4QpDD4QltrawudPt4dT1DybeexktNkT3cskW2N1UhfLdMYGB04IIHa0UAFeQaHcQaT4EsHsvD+pRS2fiC//s9Do92q2Kyy3RSdrdEEjRCCYgKq4LOqExnLJ6/RQBi+DYbKDw7bjTftxgd5Zme+t3gnkleVnlkeN1QqWkZ2wFVfm+UBcCtDVhatpV6NQt/tNkYXE8HkGfzY9p3L5YBL5GRtAJOcYOatUUAeYeHJ0sPhb4PW8tPEGm30WkxWJvrPR2mu7J0WISRGJopHUOYjyYyhEYO4Exk9r4ItJ9P8F6BZ3lnFY3Nvp9vDLaROXSB1jUGNWLMSFIIBLNnHU9a2qKAOK+LKQnw/pkslhc3stvrWnXMQtrGS6ki8u6jeSQLGrMuIllG7A4JXqwBxfG2mazD8TvCmuJZRahYpqEVukiNMXsY2t7lJCY1ifAZpVLS7lU7IEZVCGWvT6KACuK8dJCvi/wABXJsLm4uINTmzcQWMk32eJ7SaM7pEUiNWkeDO4gHGTwhI7WigDzrQI73SvFy6fpM3iCS0l1C8nv7TUbJFtbaKUzTebBcLEoctM0WE812CSsGQFTs7bWv+PZf+B/8Aot6v1Q1r/j2X/gf/AKLekwRwWuf8gXUP+veT/wBBNa2of8f9z/11b+ZrJ1z/AJAuof8AXvJ/6Ca1tQ/4/wC5/wCurfzNZ9CyjZf6q8/6/W/9EQVNUNl/qrz/AK/W/wDREFTUMEFNkLCNigBfBwD606ihOzuKUeaLV7XMrwzc6pd6NFPr1klhqDvLutlcP5aeYwjyVZgTs2k4PUnp0rVqGQQ2/wBpu/swluDDs3Ku6TapLbV56k/nU7JJHgTRtFJtBKNjK5GcHHfmh9wSsrCUUUUhlmzmhsYrrU7shbWxiaaQkZ6A44HPv0PSvK/BWmTalr82ragoE0z/AG+YAYUPIS6AYY8YO79CK7LxqY59JttKkUNDM5vLxdh3GCLDEA5HU7B1/wCWhOOM1Y0Gzey08Cc5upmM059Xbk9OOOBxxxWvNywsupzOHtK/M9o7er3/AA/NmjRRRWR0hRRRQAUUUUAFZGpXOrR67pNvY2KTabM0hvblnUGBRGxUAbgSWfYOAcAHOOCNGSM3f2m3e2le3EOZZOiYYlduc5z9KnbZwIoo4Y1UKqRjCqAMAAfhVJ2JlHmtrawlFFFSUFQ2X+qvP+v1v/REFTVDZf6q8/6/W/8AREFNAFl/qrz/AK/W/wDREFY/ir/X+Hf+w3Zf+jRWxZf6q8/6/W/9EQVj+Kv9f4d/7Ddl/wCjRTW4uh0XxjutOsvDel3Oq30VlHFrumSI8tz5KMVvIi27kBwIxI5DZA2bsfKCOU1Bktfi7dX16dIudUh1a2j0yxngYak1tLbQwyS28nmZ+zoZbmRk8tk3RzElWyyey0VoSFcLqd1p0Hxs8PxPfRLqM+hX8YtnueSPPtmTbETgEhJjkDLCM5JCcd1RQB518NvCmgaJ4q8VS6Lo9jp7WD2+jQ/Z4QCYUtopyzMcs0jNcEMxPzCKPPKkn0WiigDyrW7y1j8ZfEu30y6ubnV28M2sv2OxvT9r8xRefLCPmMTYeEjauA0qttJf5rfwkjsYtV12PRbjRLvTfJtWE/h63W304ylp96CNXkHnhRGXbfko0IKrtBb0qigArxCxn0Sf4UJdR6jpF/ommeI777RDqV40tpdpJeXEcSXE2JTjNxBMHdXyVRjgHePb6KAOQ+EzTt4GtWuI4olN1eGCOGQyQrb/AGqXyRCxVd0Ii2eWQoBTbgAYFWviPc6VaeDr2fxBNLFpaPCZlR0Xzv3yYhcv8nlyHEb7yF2u24quSOlooA8QsY/ByXWkvq9/4WufCUqX8ktuk0Mmj2V6TZ+VBFu/diQRidhkKzF53CqHKj0/4e/bv+EB8Nf2v9p/tL+zLb7V9q3ed5vlLv37ud27Oc85zmugooA86+LNz4ciutHt/Ec2kGa4SdbWDXHj/s9OYt9zIsmA8kYwqKpDHzmHyqXkSKxn0ez+Jvgy2t9d/tC4k8M3UMMlxfiaS6jElo0cuM4ZnVJWLqMuEJ5CcelUUAFeVfE6XwrL4qjsNc1XTbHUpbKN0u9TuYov7Mi3yfvrPfgi5dsjepwvko7fcRJPVaKAPKvDUvhW8+I8x03VdNTV7W9u0lZ7mL+09RlzIHhcDEn2aEEhUYEnyY2GEiVpfRta/wCPZf8Agf8A6Ler9UNa/wCPZf8Agf8A6LekwRwWuf8AIF1D/r3k/wDQTWtqH/H/AHP/AF1b+ZrJ1z/kC6h/17yf+gmtbUP+P+5/66t/M1n0LKNl/qrz/r9b/wBEQVNUNl/qrz/r9b/0RBU1DBBRRRSAKaI91yjvPIkSI+Y0VT5jHG3JPQDnpTqKAI4JknRni3FFkaIsVIBZeCBkc49qkqvqj3zaZMmnvGbtUb7Os7ERh+2cAkAnrgVBoaakmnaba6kDd6ktoDeXMKgReYiDe3bALZwAPwFVbS5Kk+Zxt216ddPlbX1RPPbLM4ZskbkLKSxHyksuBnAO7BzjkDB7YsVGk0byyRpIjSR43qGBK56ZHapKRQUUUUgCiiq5uVe2Wa1VrsMwVFt8OXJbbxzjr79jQBYqvu+2wN9nnlhUS+WZhFkgqw3hdwwe4z0ql4kt9bL2UWiy2sDJeRfbDOefIVwZFT5WBYgFe33icggVrs7siozMVXO0E8DPpVNWJjJybVrW/HRO6/L1TCTZ5jeXu2ZO3d1x2zTaKKkoKKKKACobL/VXn/X63/oiCpqhsv8AVXn/AF+t/wCiIKaALL/VXn/X63/oiCsfxV/r/Dv/AGG7L/0aK2LL/VXn/X63/oiCsfxV/r/Dv/Ybsv8A0aKa3F0Nf4s3PhyK60e38RzaQZrhJ1tYNceP+z05i33MiyYDyRjCoqkMfOYfKpeRMXVovDsWq+GRpGp22pa7FNp6CadjNqt7b7oAJre4Jz5Hl+Y8pjRo5F88ZRjIw9forQkK8q1aXwrdfFB7WbVdNtddgvbaR7m8uYkvUbZEY7KzBxIInGGk6q3nyIu5pHMXqtFAHlXw+u9Qi+LPiay1+C5j1W70y3uiZbmJ4zGl1dqohUSFvKVZI0DbEJKF5FR5AG9VoooA8Q1K18JeItT8S6fZa3Y2upsmp2s86lJ9WvpHSZZImhTEslvAGISIgs5hjK4WNWl6r4Tf2VHdaxb6HB4WntlSCRtU8N2KW1vO7GUGBgryAyRhQx+fpOvyr1b0WigDK8WSWsXhXWZNQvrnT7JLKZp7y1YrNbxhDukQgEhlGSCATkDg14reL4fu9NtbjQtQ8I6fotxqcR1LTkEN1pdjALa68tryOKRYzLJL5YLbgu9IFUuYg7+/0UAc18N5Uk8EaVHBBFDbWyNZ2/kljHLDC7RRTR7ix8uREWRcs3yuPmb7xPiPc6VaeDr2fxBNLFpaPCZlR0Xzv3yYhcv8nlyHEb7yF2u24quSOlooA8Q1Twz4S1jwA08C+H9VWfUItORdNdJ7TSRez2sEyWoHypIq7ZA5UEyMz7VEhSvarS2gs7WG1s4YoLaBFjiiiQKkaKMBVA4AAAAAqWigDzr4s3PhyK60e38RzaQZrhJ1tYNceP8As9OYt9zIsmA8kYwqKpDHzmHyqXkTjzFYx+LLQ2+p22o3sV7pcdhJcss+r31r5dtuuLa5BBFsQZWlVY3V9t0d6+YdnutFABXlXxOl8Ky+Ko7DXNV02x1KWyjdLvU7mKL+zIt8n76z34IuXbI3qcL5KO33EST1WigDxrT1S1+LtrY2Q0i51SHVrmTU76CdhqTW0ttNNHFcR+Xn7Ohlto1fzGTdHCAFbCp6trX/AB7L/wAD/wDRb1fqhrX/AB7L/wAD/wDRb0mCOC1z/kC6h/17yf8AoJrW1D/j/uf+urfzNZOuf8gXUP8Ar3k/9BNa2of8f9z/ANdW/maz6FlGy/1V5/1+t/6IgqaobL/VXn/X63/oiCpqGCCiiikAUUVj6pr0VhqUdgLLUby6eIzhLK2achAdpJC8gZI/MUwNiisH/hIZP+hd8T/+CqX/AAo/4SGT/oXfE/8A4Kpf8KLMLm+rbI3jUKqu4kbCgFmAwCT1PHFQGAR2CW9rJKkixFPOlfzWL8/Oc/Xp04rH/wCEhk/6F3xP/wCCqX/Cj/hIZP8AoXfE/wD4Kpf8KdmF0WfFkGrPoNzD4VuYU1QxhIZ70AKGxguQqsMjkgYIyADxWmkf76WSSeTb5YWOFVXbuzyxPXpxisP/AISGT/oXfE//AIKpf8KP+Ehk/wChd8T/APgql/wpu7VrERiotyvv5/l2NyKKOPz3/etLK6tlpCVRQuNqr0HqTTy37uKMBVjiQRoqqFCqOgwKwP8AhIZP+hd8T/8Agql/wo/4SGT/AKF3xP8A+CqX/ClZl3RvUVg/8JDJ/wBC74n/APBVL/hTo9flkkVB4f8AEa7iBuk0yRFHuWIAA9ycClZhc3KKsNZyhnGY8I5TJkVQSOuMkUfZJP70H/f9P8aLAV6KpaRqMGq2Iu7Tf5LPIilhgnY7ITj0JUke3pV2kAVDZf6q8/6/W/8AREFTVDZf6q8/6/W/9EQU0AWX+qvP+v1v/REFY/ir/X+Hf+w3Zf8Ao0VsWX+qvP8Ar9b/ANEQVU1fTp9Rn0j7P5YFrqNvdyGRwg2RuGbGep4wB6n0yafUXQ6rxpYHVI4bW3upWvgjzQaemrS6aLjDIrSNLCDLhA+MDK5kG4Z2MvnWg6zfapoieJH1fUri9g1PRLKCVpGt45ILmLTzL5lqjGEs/wBqmOSGKlhtb5EI9L1uHRNetUtdc0ux1K2RxIsV4kEyK4BAYBiRnBIz7miaHRJ9Zg1efS7GTVrdDHDeukBnjQ7sqshO4D5m4B/iPqau5NjfrgPGIktdbs9WsdTuX8rU7Syu9movtsxLLAiwi0XEUnmCYlnlO9BKHUttjUdh/akP93/yLH/8VWfNDok+swavPpdjJq1uhjhvXSAzxod2VWQncB8zcA/xH1NFwsVPBUl0da8aw3d9c3iwa0Fh89gfKjaztZBGoAACgu2BjPcksST1VYGmw6Jpd1e3WmaXY2dzfP5l1LbpBG9w+Sd0hBBY5Zjk56n1rQ/tSH+7/wCRY/8A4qi4WL9FUP7Uh/u/+RY//iqP7Uh/u/8AkWP/AOKouFi/RVD+1If7v/kWP/4qj+1If7v/AJFj/wDiqLhYv0VQ/tSH+7/5Fj/+Ko/tSH+7/wCRY/8A4qi4WL9FUP7Uh/u/+RY//iqP7Uh/u/8AkWP/AOKouFi/RVD+1If7v/kWP/4qj+1If7v/AJFj/wDiqLhYv0VQ/tSH+7/5Fj/+Ko/tSH+7/wCRY/8A4qi4WL9UNa/49l/4H/6Lej+1If7v/kWP/wCKqrqF7FcQYXau0OcmRD/Aw7MT1IobGcZrn/IF1D/r3k/9BNa2of8AH/c/9dW/maydc/5Auof9e8n/AKCa1tQ/4/7n/rq38zWfQoo2X+qvP+v1v/REFTVDZf6q8/6/W/8AREFTUMEFFFFIAqj4c/5KzF/2BJv/AEfFV6odEs5oPHI1l/L+xppz2mDKocu0qPwCRwAnX3GM84qO4M9Eoqh/akP93/yLH/8AFUf2pD/d/wDIsf8A8VV3IsX6iu1na1mWzkiiuSjCKSWMyIr44LKGUsAcZAYZ9R1qr/akP93/AMix/wDxVQ3d7bXVrNby+ascyNGxiuVjcAjB2urhlPoQQR1BouFjirbV9Z1HwD4M1GbWLm2k1DTIZZjp8MDXt7evFGyRxJLG0QUjz2c4XbtVtyormu60ttV+y6cuqx2JuTag3sltI4RbjCZESsuTGSZOWYEYXg5JXlf+EV8NLYaTZwxalBFpUMltZtb63NFJFE5UtH5izhmX92mFYkAKAMAV0FtLZ2/2Xyzcn7NCbdPMvvMyp28vukO9vkHztluW5+ZslwscffeIdZ8Karqa6rdXOpommT30aXMcEEM0qNCMWzRAmGBWm2yNcklAUYMyrK9avw08RXXiLwg14mo6brV7Fqd1ayz27iKExpduqlQu/H7jYyqSSwKZb5t9W9E0vQtEunuNOtZUkKGKMSXvmpbxkgmOFHkKwx/KvyRhV+RBj5VxLp9ppOn21zBZR3MUVxetqEijUD/rmkEjFf3vyqz5JRcIdzAjDMCXCxz+oXevWXje6l1e88QWfh5tQtobKS1TT2s2R0hRY5Aytc5e4Z0JUcBlOVALCl8N/Emq6zYef4hm1JJdZ0dNStLW6gtRCABmdrd4WLeV+/gAWfDgYOWJbb1FzpehXOsjVJrWU3O9JWQXu2CSRMbJJIRJ5byLtTDspYbEwRsXEWnaPomlG4k0y2kjlkhaCIS3vmpbxnH7uFHkKwx8L8kYVfkQY+VcFxmL4hHiqbU7lNFsdMlskmcq80ku8scZyFQgdBxk+vfA5vS/Dni7TLzUbqz0zTRNqEonuDJe3koZwMZCupC8AD5QOFUdFGN/xJrWpw6jPb6f4fnvrdZXcXC3UKK+7HQFs4GOpx/U8xpcutadeajcx+HdYma9lEpS51eOVIePuxKzkIucnA9cdAoEDNbwFD9n8MW8RmgmKzXG54GLJnznyASATg8ZxzjjiuhrB8EWVzp/hq3t76EwXAkmdoyysVDSuw5UkdCOhrepPcYVDZf6q8/6/W/9EQVNUNl/qrz/AK/W/wDREFCALL/VXn/X63/oiCpqgjiuo/PERsSkkxmHmzSKwyiJggRsP4M9e9Lsvf8AqG/+BEv/AMZoaAmoqHZe/wDUN/8AAiX/AOM0bL3/AKhv/gRL/wDGaLBcmoqHZe/9Q3/wIl/+M0bL3/qG/wDgRL/8ZosFyaiodl7/ANQ3/wACJf8A4zRsvf8AqG/+BEv/AMZosFyaiodl7/1Df/AiX/4zRsvf+ob/AOBEv/xmiwXJqKh2Xv8A1Df/AAIl/wDjNGy9/wCob/4ES/8AxmiwXJqKh2Xv/UN/8CJf/jNGy9/6hv8A4ES//GaLBcmoqHZe/wDUN/8AAiX/AOM0bL3/AKhv/gRL/wDGaLBcmoqHZe/9Q3/wIl/+M0bL3/qG/wDgRL/8ZosFyaiodl7/ANQ3/wACJf8A4zRsvf8AqG/+BEv/AMZosFyaiodl7/1Df/AiX/4zRsvf+ob/AOBEv/xmiwXK+uf8gXUP+veT/wBBNa2of8f9z/11b+ZrLvrW9urK4t9+mp5sbR7vPlOMjGceVWleOsl5O6HKtIzA+oJo6AU7L/VXn/X63/oiCpqgjiuo/PERsSkkxmHmzSKwyiJggRsP4M9e9Lsvf+ob/wCBEv8A8ZoaAmoqHZe/9Q3/AMCJf/jNGy9/6hv/AIES/wDxmiwXJqKh2Xv/AFDf/AiX/wCM0bL3/qG/+BEv/wAZosFyaiodl7/1Df8AwIl/+M0bL3/qG/8AgRL/APGaLBcmoqHZe/8AUN/8CJf/AIzRsvf+ob/4ES//ABmiwXJqKh2Xv/UN/wDAiX/4zRsvf+ob/wCBEv8A8ZosFyaiodl7/wBQ3/wIl/8AjNGy9/6hv/gRL/8AGaLBcmoqHZe/9Q3/AMCJf/jNGy9/6hv/AIES/wDxmiwXJqKh2Xv/AFDf/AiX/wCM0bL3/qG/+BEv/wAZosFyaiodl7/1Df8AwIl/+M0bL3/qG/8AgRL/APGaLBcmqGy/1V5/1+t/6Igo2Xv/AFDf/AiX/wCM0+2ieGCXzngaWW4aXbCzMFHlxqOWVefkPagB9FFFIAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9kN&lt;/Spwj&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Nrlx_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Nrlx_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Nrlx_id&gt;2&lt;/Nrlx_id&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Qzsph&gt;FG232323&lt;/Qzsph&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Spwj&gt;/9j/4AAQSkZJRgABAQEAAAAAAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCADBAXADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2uuY8d67NoUOkmK/0zTkvL37NLd6ihaKJfIlkzjzE5LRqoy38Xety1tbWQ30s1naTSm7K75rdJDgQw4GWB45P51jeLrPUpbjw9PodlazyWV+0zRSzfZ4ljNtPHnIViBmRQAqnqOgyRkWY2heKru+8RDTrTXPDWv79PuLkDT1MXlyRvCqK7CWXCt5jc7cjbxnpXOaT8SfEOoaLPdyadYWuy10yQSCC6lO+6uPLZlhKI0i7dxARm5UANJuO3rJbfxHc+Ior++02C1jt9KvYI302+W4lMsj27KAJoo1Dfu2xnK5HzYHXk9L+F17o1tFaW1z5tte/Yku0hMduLcW9yJg3mRxo8jeXujEo2uXwxGGzC9BHaeH/ABQ83g1dX1VfMm+1S2ipBbtAZnF00ESiORsozkIMOw2lvmIAOJdJ8WC61dtMv9Lu7G6S4Nk0rPHJA9wIRNsRlbeQY8uGZFGBg7W+Ws3R/D183gJLBoJLS8j1J9QigvJ/MbC35uY0kkVn5ZQoL5cjcT8xGDi6Tc3dx42aXUdPu7KFtXN/GFsruVg/2QWYjdhAIlHVzIsjKMYBYfPSGeg6Jqf9oxXCSw+Re2kv2e6gDbxHJtV/lbA3KVdGBwDhhkK2VGlWL4asriBtUvryPyJtTuhdm3LBjABDFEqsw4LYiDHGQCxALABjsPHFKNs8EEy9ds0SyAH1wwIz70AOoqH7JZf9A3Tf/AKL/wCJo+yWX/QN03/wCi/+Jo0AmoqH7JZf9A3Tf/AKL/4mj7JZf9A3Tf8AwCi/+Jo0AmoqH7JZf9A3Tf8AwCi/+Jo+yWX/AEDdN/8AAKL/AOJo0AmoqH7JZf8AQN03/wAAov8A4mj7JZf9A3Tf/AKL/wCJo0AmoqH7JZf9A3Tf/AKL/wCJo+yWX/QN03/wCi/+Jo0AmoqH7JZf9A3Tf/AKL/4mj7JZf9A3Tf8AwCi/+Jo0AmoqH7JZf9A3Tf8AwCi/+Jo+yWX/AEDdN/8AAKL/AOJo0AmorN1q1s10a/ZNP09GFvIQy2kSkHaeQQuQfetrUP8Aj/uf+urfzNAFeuP8T+Lb7R9XltbTR47+CBLJpmF35cpNzcPAixoU2sQUz8zoOeveultbW1kN9LNZ2k0puyu+a3SQ4EMOBlgeOT+dcZ4q8E3Wr+MLbV7YaMkMH9nhBNalpoxBdPK4icECIFWAwA27GDtAzRoAsPj6b7Zqk1xoV/HpFnpUep+esltIdhE7FspOwZWEShNuec7sAg0X/ibUYdRWwOq2FrdQyxWdwf7CvLmHz5Cvl/vldUj3rJEdhJ2lsb261Wv/AA/ezwePYdP0ee1jvtKe0tRNNGftM7PeSOy4dtqs1wpG/bjd0AHEuu+A2uPEN5rcf9mTO97baiqnTFe9BgEP7mK4aVQobyccjA3tn1p6Ab2leI9/gXSNd1GPM15a2shht1+/NMECxpuPGXcKNxwM8kDJqtpHi+W911dHufD+rWt0vE0xVGt0/wBcA+7cH8tmt5ArFFz8hIG9cx2GgXzfDXQdKkWOHUrG3sHaORvl823aKTyyy5wC0e3cA2M5AbGDS0rWpW8f39xc6bf29td2ttZIGsbtnSWN5Cd7CEwhczsN6ysvyA5Ib5UB1eian/aMVwksPkXtpL9nuoA28RybVf5WwNylXRgcA4YZCtlRpVi+GrK4gbVL68j8ibU7oXZtywYwAQxRKrMOC2IgxxkAsQCwAY7DxxSjbPBBMvXbNEsgB9cMCM+9ADqKh+yWX/QN03/wCi/+Jo+yWX/QN03/AMAov/iaNAJqKh+yWX/QN03/AMAov/iaPsll/wBA3Tf/AACi/wDiaNAJqKh+yWX/AEDdN/8AAKL/AOJo+yWX/QN03/wCi/8AiaNAJqKh+yWX/QN03/wCi/8AiaPsll/0DdN/8Aov/iaNAJqKh+yWX/QN03/wCi/+Jo+yWX/QN03/AMAov/iaNAJqKh+yWX/QN03/AMAov/iaPsll/wBA3Tf/AACi/wDiaNAJqKh+yWX/AEDdN/8AAKL/AOJpLBEjhvFijiiQXrYSJAij9zB0AAAoAWy/1V5/1+t/6IgqaobL/VXn/X63/oiCsbxgZmh0m3t7q4tDdanbWzywNtcI77WwSCM4PcGjdgb9FeKaR4ui1e9W3sH8VMHv4tNWZ9ZtTGJpjOIsskLZU+UhLJuADPjdtXzMaX4paWPM8qTxi2N2zdqcC7v9Ztz+4OM4hz1xvfrsG/dYWrLaLM3Vit2fQlFeUa/rmm6UuvrB4i1q+u9F3/abWHUSrjEzQ9Xswn32twcMcB5CN2weZyUvxS0seZ5UnjFsbtm7U4F3f6zbn9wcZxDnrje/XYN5HC1ZK6i/uB1Yrdn0JRXz3L8UtLHmeVJ4xbG7Zu1OBd3+s25/cHGcQ5643v12DeS/FLSx5nlSeMWxu2btTgXd/rNuf3BxnEOeuN79dg319TrfysXtodz6Eoryz4bavZePdXvdPsdV8VWTQRCVZJtQtnLAzbP9WIw33WjbIyAWKkjCl+1/4ROP/oa/E/8A31F/hWE4OD5ZaM0UlJXRvUVy0enHSvGXhe3j1vWb+G8unWWO8kQJtWNmAwoBPIHfHGMHNdTUtDCiuQkS3u/E2ujVdd1uwtrVbRba30wGSSaSRZCyrEsbu5xGWwo4Csx4BItzaf4ahjgkbxt4rMcqGR2Rd4tUDMpa4IgP2cBkkUmXZgxyA42Nh8ornSUVgto/h1L+4tZvG/ieHyPMD3MzrHbFowTIq3DQiJmQK5ZVYlfLkyBsbFrQvCul6554sfFfjBJYNpkgu1+yzKrZ2t5csCttO1gGxglWAOVOHyhzGpRTv+FbR/8AQ0+J/wDwJi/+NUf8K2j/AOhp8T/+BMX/AMao5Q5htFO/4VtH/wBDT4n/APAmL/41TZPh7FbRtOfEniObygX8uS5j2vjnBxGDg+xB96OULhRV3WZrfT1lla1DogkkYIkjtgO3CohyTgcAAk9qwk1xNQ8KyalbafLZO9s8ix3cMkU0LAHhkY8EEe4PUZBBM2GO1z/kC6h/17yf+gmtbUP+P+5/66t/M1ymnyyT/Dy2lnkeSWTSld3c5ZiYQSST1NdXqH/H/c/9dW/maOgFGy/1V5/1+t/6IgqaobL/AFV5/wBfrf8AoiCpqGCCiiikAUUUUAFFRXM8VtA807rHEg3M7dFHqah0y7j1W3sr+xuYjptxb/aEdo23SBlBj2jjbnOTkU7O1yeeLk4J6rW3rt+T+5luoDdwfZGullR7dVLmRDuGB16dehqWKKOPz3/etLK6tlpCVRQuNqr0HqTTy37uKMBVjiQRoqqFCqOgwKCihq+q2ej6VLqWqTG2s4o/Nd5EYFVxn7uM5x2xmrSzI1y8C7jKkYlbCnCqTgEnGOtR6rZ2ur20lvq1tDfW8mC8VyglVsEEZDZBxgflVpXdUZFZgrY3AHg49abtbQmPPd81rdP+CQpNG8skaSI0keN6hgSuemR2qSlVtkbxqFVXcSNhQCzAYBJ6njioDC0VlBBYvtkQKplunaXd83zMcc9CeB6CkUTUVU1fU7HSWi+2XKok86W0LFT+8d3CIAB6lh9Op4BNW6GmtyYzjJtRd7b+XXX5NMKKKKRQUUUUAFQ2X+qvP+v1v/REFTVDZf6q8/6/W/8AREFNAFl/qrz/AK/W/wDREFY/ir/X+Hf+w3Zf+jRWxZf6q8/6/W/9EQVHe6fDqE1g1zLJEtpdxXi+WgYs0bblByRxnGfbjvkPqLofLuoalceHLN5IbjGsXmsRavESwkaFIRIYZSS8obzDOzDc7HbGrZdZFY5Ws6H9s1mGTw7b7tN1LM1qof5IMKHlhd2PHk5IZn2/KBIcKwNfU7+A/A8k5nm0KCacsHaSZZJGdgYzli0pLEmJck5zl858x90cXw98BReXt8O2h2bcbo5Gzt8vGcy8/wCqXOeuXznzH3erTzFQivd1OWWGbe55L4p8RyeJdB+Il5YnxPcaIeIbq81B5rEn7dblVjiMS+W21gQpYlVyMHrXiNfZEXw98BReXt8O2h2bcbo5Gzt8vGcy8/6pc565fOfMfcRfD3wFF5e3w7aHZtxujkbO3y8ZzLz/AKpc565fOfMfc6eYwpqyj+IpYZy1bPjeivsiL4e+AovL2+HbQ7NuN0cjZ2+XjOZef9Uuc9cvnPmPuIvh74Ci8vb4dtDs243RyNnb5eM5l5/1S5z1y+c+Y+7T+1o/y/iT9Ufc8p/ZQkx4p1mPzMbrWJtm/G7E6c7d4zjPXY2M/eTOH7Px14D1TX/ENhf6R4s1rR7YuFv7e3vJVV0A4aJQcI5wFPG3ndjIIfr9O8K+HtGtLmHw5HcaLJcRrE89lu34Xy8H55GUtiMfMQSCzkEM7E0/+ETj/wChr8T/APfUX+FeXiKvtqjqLS/+R1U4ckVEjuYVt/GngWCMyFIrmVFMkjSMQIGHLMSWPuSSe9dFWRpfhiystb0/U59c1y+kspDJFHciIrkqVPQA9Ce/pWvWDNEcnbHUl8U+I20XSpb+7D2A82AQGeyQxXIaaITsqGTBMYyePMJIcAo2hqvh3UpdM1610jw3fW0PiHQhpCRzXEDPZTB7vdNdN5zFw5ug5dDK7YcsNxAbe0CGHSdU1PUUmkafUBEsiGIFUEYYLj5gcnc2fw9Mnd/t3/a/8gf/AGdWmibHH/8ACJ3upSWugatpMraTBq2p6hc3ZnQQXNvdreKIo9r+aJMXig5RQNj4Y/Lu0Phppevpquqaz4lXUo7i8srO18nUpbSSZHiad32taqsZizOApIDkh8gDbXQf27/tf+QP/s6P7d/2v/IH/wBnT5kFjforA/t3/a/8gf8A2dH9u/7X/kD/AOzo5kFjfqDUP+PC5/65N/I1j/27/tf+QP8A7OmTayJYXjZyFdSpxBzz/wADpcyCxyPifwloL3d7f3NhqV7eStLMUh1GRC5DMAqgsFHQAZIA9hXOw+HvDl14YbVF0PWbCZrdpkt77UJRImASu9Vc47HGcjODg5A29Y0ObUdTuboeIdchSWRnSKOWNUjUkkKBs4Az7+5J5qi/hOSRGSTxHr7IwwytNGQR6H93U3HYXSf+SbWX/YJT/wBEiuu1D/j/ALn/AK6t/M1gXNnHp3hOWygLtFbWRhQucsQseBnHfit/UP8Aj/uf+urfzNIZRsv9Vef9frf+iIKmqGy/1V5/1+t/6IgqahggooopAFRtMguYoPmMsisyqqk8LySSBwBkdaJ/M8iTyNnnbTs3527scZx2zU4LQfKk4clArvGCgbIGRg84z60wKslnDPYS298ftqTlxLFNEpj8s9Ex/EMdc9adbQQ2ttFb20UcMESCOOONQqooGAoA4AA4xUtFFwsr3CisS4/4l3iW2lT/AFGqZt5EHadEZ0fHTlEdWPJOyIDgGtugAooopAFFFFAFW9sLO+Nub60t7k28qzwmaNX8qQdHXI4YdiOae7x2VmZbm4llYykn93woZgERQoyeuM9eanpVYqwZSQwOQR1FO4WS2BlKsVYEMDgg9RSUgEslxNJLNGIggKqVYyO5bk56AY/EmlpAFFFFABUNl/qrz/r9b/0RBU1Q2X+qvP8Ar9b/ANEQU0AWX+qvP+v1v/REFLcXEFsge5mjhQnAaRgoz6c0ll/qrz/r9b/0RBXI/FlVfw1bq6hla+gBBGQRup7sDpv7W07/AKCFp/3+X/Gj+1tO/wCghaf9/l/xryCw0XT7m58uS2t40CO7MsCscKpbgcenrUx0PRpLa4kto1Z4UDlZLNFBG5V6hj/e9KfKhXPWf7W07/oIWn/f5f8AGj+1tO/6CFp/3+X/ABrxf+zbH/nytv8Av0v+FH9m2P8Az5W3/fpf8KOUOY9o/tbTv+ghaf8Af5f8aP7W07/oIWn/AH+X/GvF/wCzbH/nytv+/S/4Uf2bY/8APlbf9+l/wo5Q5j2j+1tO/wCghaf9/l/xo/tbTv8AoIWn/f5f8a8hh8P200SyJa6aFPZ3hQ/kSDTLvRbO1lCNbWEhKhsxBHHPbI7jp/8AWo5UFz2H+1tO/wCghaf9/l/xo/tbTv8AoIWn/f5f8a8X/s2x/wCfK2/79L/hV9NA0guokn0xUz8xW3ckD2GwZo5Ques/2tp3/QQtP+/y/wCNH9rad/0ELT/v8v8AjXjL6ZYK7KtraOAcBliGD7jIzUtjo1jdXtvb/ZbZPNkWPd5KnGTjOKOULnsP9rad/wBBC0/7/L/jR/a2nf8AQQtP+/y/415f/wAI3on2fzuNvk+fj7CmdvmeX/f65/Ss6+0axtb24t/sts/lSNHu8lRnBxnFHKguew/2tp3/AEELT/v8v+NH9rad/wBBC0/7/L/jXjlvpmls5FzbRRpjgx2yOc/QkVa1HQ9GtJZ4UjWSeJymDZoqkg4PO4n9KOULnrP9rad/0ELT/v8AL/jR/a2nf9BC0/7/AC/414v/AGbY/wDPlbf9+l/wq1Z+H4rrDRaUJId21nitQ+PXt1x2zRyhc9e/tbTv+ghaf9/l/wAalt7+zuZRFbXdvLKQSEjkDE4GTwD6AmvIL3wyLJpfP0lBHGxUy/ZvkPOMgkdDXTfCe0toPEdy0FvDExsZgSiBTjA9KOULnaa5/wAgXUP+veT/ANBNa2of8f8Ac/8AXVv5msnXP+QLqH/XvJ/6Ca1tQ/4/7n/rq38zU9BlGy/1V5/1+t/6IgqaobL/AFV5/wBfrf8AoiCpqGCCmyMEjZznCgk4p1NCSPcp+9ijt1Ry+5SWZuNoXHA75JoW+oppuLUXZmV4V1jTfEOmf23pkQkjud9vHPIPmKRyspK4JABKk+pGM46Vr0UUMErKzCiiikMo61Yf2lpk1ssnkyna8Uu3d5UqsGjfGedrKpweDjB4o0W//tLTIblo/JlO5JYt27ypVYrImcc7WVhkcHGRxV6sSz/4l3iS4sV/4976N72JR/yzdSqzDHQBi8bDGSWaUk8imBt1m+MdYXQ10C3JYS3JuLiRTgKyLEcLnsS2zGOeD9Dr2sJuLiOJc5dgMgZx715t4v1dNY+LU9pF5ZsoFj00hFK7lWRWdTnuHLDIxwBj1OlKHNdvojlxVXk5Ip6yaX6v8FY9EooorI6gooooAjniSeCSGVd0cilGGcZBGDWdqniDT9P13R9HeMRXOpF47aGFQFVY4yzE5PAAUDvyw9yNWo5xM0e22eJJSyjdKCVUZGSQOTxmqTXUmak7crt/WxJRTpAqyMEbeoJAbGMj1xTakoKhsv8AVXn/AF+t/wCiIKmqGy/1V5/1+t/6IgpoAsv9Vef9frf+iIK5L4rf8i5bf9f0H/oVdbZf6q8/6/W/9EQVi+L40mbQIpkWSJ9aslZGGQwMoyCO4prcXQ4PQ5BFqAczCD91KBISRtJjYA8c9cdOauvcyNp9+k+ri73RKFjLyHnzEORvAHQH3r3j/hHND/6A2m/+Aqf4Uf8ACOaH/wBAbTf/AAFT/CrsSfNdWob6WGJY0S2Kju9vG5/MqTX0V/wjmh/9AbTf/AVP8KP+Ec0P/oDab/4Cp/hTA+dbm/nuYFhk8kRqxcBIUTBIwfugeg/IelVa+lP+Ec0P/oDab/4Cp/hR/wAI5of/AEBtN/8AAVP8KAPndLSFkVm1C1QkZKssuR7HCYqK5hjh2+Xcwz5znyw4x9dyivo3/hHND/6A2m/+Aqf4Uf8ACOaH/wBAbTf/AAFT/CgD5tRS7qi4BY4G4gD8SeBWui3yIqL/AGUQowNxtSfxJ5Ne9/8ACOaH/wBAbTf/AAFT/Cj/AIRzQ/8AoDab/wCAqf4UAfOF1Cbe4eIvHJtON8bhlb3BFT6O6x6vYvIwVFnQszHAA3Dk19Ef8I5of/QG03/wFT/Cj/hHND/6A2m/+Aqf4UAeExvZ5lSW8tjbND5CIjSqyrvD/eMRycg547nGBgVm6w6yavfPGwZGncqynII3HkV9Ef8ACOaH/wBAbTf/AAFT/Cj/AIRzQ/8AoDab/wCAqf4UrAfPmhpKb1DHdfZY9yrLILhYmCE84yRnp79qv38l5d6feG8uoHczrMsYu0YKAJNwUbj6rx16V7p/wjmh/wDQG03/AMBU/wAKP+Ec0P8A6A2m/wDgKn+FFgPmurVr5cUE00uxmKmONDg/MRgsR2ABOD/exjODj6K/4RzQ/wDoDab/AOAqf4Uf8I5of/QG03/wFT/CmB86y+XLZJKNiTxsI3UYG9cfKwHqMEE/7vck103wu/5GG5/68pv5CvVLS18J3es6hpNrY6RLqOnpFJdQpbITCJdxj3HGASEJx1xg4wwzYvNJ06wj82x0+0tpSrqXhhVCR5bcZA6cCkxnIa5/yBdQ/wCveT/0E1rah/x/3P8A11b+ZrJ1z/kC6h/17yf+gmtbUP8Aj/uf+urfzNZ9CijZf6q8/wCv1v8A0RBU1Q2X+qvP+v1v/REFTUMEFQ2ht3jlngkaczuGEgm3IqgY2qOg55J9adPKkEEk0rbY41LscZwAMmpAxaCBQnlxpGqxp5ezamMgbcDHWgAooopAFFFFABWP4phkOlm9tY3kvNPb7ZAiKWaRlUhowPV0LpnBxvyBkCtiimBZ0m8t7eyudaLGeytLVrrfAQ29dpPy84OVzjnHTmvCPh7G+o+KUmuJXe4aUStK5LMxGXOSTySV616hBpy3dhqvgy6mSzsEMOpyXLIcR6czOQgfARHWWF1UH5RFtI3EMBxHgO2tX8b302jjOmpcTGHrxCNwQ/Nz0ZevPrXVC0aMu7PJxClPHUuyv99v00+89VooorkPWCiiigAooooAhtjbxxpa28jPJAgWUyTeZIWOTub0z6VNTI50Es1pGPnwLiXbH/wAFmx7YAJ7U+mAVDZf6q8/6/W/9EQVNUNl/qrz/r9b/wBEQUIAsv8AVXn/AF+t/wCiIKx/FX+v8O/9huy/9Gitiy/1V5/1+t/6IgrH8Vf6/wAO/wDYbsv/AEaKa3F0PXKKKz5tb0qDWYNIn1Oxj1a4QyQ2T3CCeRBuyyxk7iPlbkD+E+hrQk0KKKKACis/Tdb0rVLq9tdM1OxvLmxfy7qK3uEke3fJG2QAkqcqwwcdD6VoUAFFFRQ3ME8k8cE0Uklu4jmVHBMblVYKwHQ7WVsHswPcUAS0UVn63relaDapda5qdjpts7iNZby4SFGcgkKCxAzgE49jQBoUVV0vUrHV7CK+0q9tr6ylz5dxbSrLG+CQcMpIOCCPqDVqgAorP1vW9K0G1S61zU7HTbZ3Eay3lwkKM5BIUFiBnAJx7GtCgAorifiV8SdH+Hv9nf21bahP9v8AM8r7JGjY2bc7tzr/AHxjGe9c/b/G3TbnSTqlv4S8Zy6YEaQ3cemq0IVc7m3iTbgYOTnjBrWNCpKPMloQ5xTs2erUUUVkWcrp0OoL8TdcupdLuY9Nm0yzt4b1pIjHJJFJcOwChzIOLhQCVAyj/wCzu29a/wCPZf8Agf8A6Lekh1vSp9Zn0iDU7GTVrdBJNZJcIZ40O3DNGDuA+ZeSP4h6il1r/j2X/gf/AKLekwRwWuf8gXUP+veT/wBBNa2of8f9z/11b+ZrJ1z/AJAuof8AXvJ/6Ca1tQ/4/wC5/wCurfzNZ9CyjZf6q8/6/W/9EQVNUNl/qrz/AK/W/wDREFTUMENkYrGzAFiASAO9Z3hzWLjXtJj1G8sruxlleRfIu1ZZQqyMqswYAjcqhsEcbu/Wr86u8EixSeXIykK+M7Tjg471KyomFjeSRQoG+QAMxxySBx1zRdWsTyvn5r6dv17iUUUUigooooAKKKvaJAZ9Si67UO84PTHT9cUwPPPjZr8dtqltpEAiiuY9MkhluoZWLIsrIzQbQeA3kR5zzhh0G4NjfCZSl1hhg/ZmP4F1Irkdf1BvFPjLUNRcuYp5mdd6hWEQ4RSBxkKFHGfXnrXsfhfR10mx+bJuZgGlyeh/ujtxk896666VOCgjxsunPFVp4mWyvFel7/16vXRGzRRRXGeyFFFFABRRRQBlahrNzZa1pemQWF3PDqDOJriNW8q3VEZgXIBGSwVQCRnccdMHVpqR/vpZJJ5NvlhY4VVdu7PLE9enGKdTbT2JhFxvd3/rYKhsv9Vef9frf+iIKmqGy/1V5/1+t/6IgoRQWX+qvP8Ar9b/ANEQVj+Kv9f4d/7Ddl/6NFbFl/qrz/r9b/0RBWP4q/1/h3/sN2X/AKNFNbi6HrledahLYzeN7rS7nTtXtrNtQtr2Z49Nupk1C7VIfKfzlRo44Y/Lhz8ylnjO7aqt53otZ82t6VBrMGkT6nYx6tcIZIbJ7hBPIg3ZZYydxHytyB/CfQ1oSaFFFRNcwLdR2rTRC5kRpEiLjeyKVDMB1IBdAT23D1FAHC+Gk+0+OLa4srDUrbT7LTJrQ217Y/ZY9MYtbhYLchVWVW8pyzK0ygxJsZVYB+/rP03W9K1S6vbXTNTsby5sX8u6it7hJHt3yRtkAJKnKsMHHQ+laFAEV2s7Wsy2ckUVyUYRSSxmRFfHBZQylgDjIDDPqOtedfBvTtS0O78WaVqem/ZPLvbedJxLLOLtmtIUeXzmhiWVmaIs7Dkuz7gOGf0VbmBrqS1WaI3MaLI8Qcb1RiwViOoBKOAe+0+hotrmC6jMlrNFNGrvGWjcMA6MVdcjuGUqR2II7UAS1yvxCtI5rPS7uSfW7VtPvftCXOj2yXM0LGGWLJiaOQupEpXCoxBYHhQzDqqz7vW9Ks9Mm1K81Oxg06B2jlupbhFijdX8sqzk4BDgqQT97jrQBV8G3Go3Ph23l1gS/aS8oRpo/KkkhErCGSRMDbI8QjZl2rhmI2pjaNqorS5gvLWG6s5op7adFkilicMkiMMhlI4IIIIIqWgDzr4naa9xr+j3dxPq9vpI0++sbqTTNPW/dzM9sVieEwzZjZYpMnZj5QCw3AN2vh6XUZ9A0yXXIIrbVpLWJ7yGI5SOYoC6qcngNkDk/U1FqHiPQ9O0q21PUNZ0200252+Rdz3SRwy7lLLtcnDZUEjB5AzWrQB82/tjf8yj/wBvn/tCvErC/wBngfWEa7zdtLaWMUTyZP2QtPPIqKTwvnRwsSBwT1+c5+6PEWk6BqMcEniSw0u6jicRwtfwxuEeRlUKpccFm2LgdTgelZs3gvwRBJBHP4a8NxyXDmOFXsIAZHCsxVQV5O1WbA7KT2NejRxsadNU2tv87nNOi5SckzqaKKimuYIJII55oo5LhzHCruAZHCsxVQep2qzYHZSexrzjpPL9DsL5fGVhA8Gpf6LrV/ey2clqy2VpFILrZcw3GweZLJ50e5DLIB58mI02Dy/Rta/49l/4H/6Leqlt4s8OXWsnSLXX9Im1ZXeM2Ud7G04dM718sNuyNpyMcYPpVvWv+PZf+B/+i3pMEcFrn/IF1D/r3k/9BNa2of8AH/c/9dW/maydc/5Auof9e8n/AKCa1tQ/4/7n/rq38zWfQso2X+qvP+v1v/REFTVDZf6q8/6/W/8AREFTUMEFQ2xt440tbeRnkgQLKZJvMkLHJ3N6Z9KmpI2k8z7NBbuyy7p5ZERQF2qBl269MADmgBaKKKQBRRRQAVlfETUW0T4bahIhkWfUpFso2UKw2nJbOegKiQZ65I6da140aSRUQZZiFA9Sa83+NN8mo+LrLQoY9ttpMWXYjBZpArHkHkY2dgcluvFb4eKc7vZHDmNSUaLhD4paL5/8AzPhdovn3i3Uo+SLEp57/wAA6/Vvwwa9ZrL8Nab/AGXpMUDDEzfvJf8AePbqegwOPStSs6k3OTkzow9COHpRpR2QUUUVBsFFFFABRRUc8jRR7o4ZZ3LKqxxDLMSQOM49aAG2ht3jlngkaczuGEgm3IqgY2qOg55J9amp8oaPZAyqggXylRVACgduKZTAKhsv9Vef9frf+iIKmqGy/wBVef8AX63/AKIgoQBZf6q8/wCv1v8A0RBWP4q/1/h3/sN2X/o0VsWX+qvP+v1v/REFY/ir/X+Hf+w3Zf8Ao0U1uLoeuV5V4wsNSHjB9N0gXL2+panpmsXKyaVLJGzRTQrIEu1cRxbIrNHKSKSS2FJLhV9VorQkK4rUUhj+MWh3CWFyZX0W8tpr2OxkaPma3eKN5wu0f6uchS3BPYuN3a0UAeYfDi1uxdeDbeWxvoJPD/hyXS9QNxbSQolwTZgLG7gLMP8AR5fnjLL8oOfmXPp9FFAHFaKkMPxc8UNDYXMP2nTLDzLr7DJHDPLG9xu/fbQjsElgH3icDH8DBT4QpDD4QltrawudPt4dT1DybeexktNkT3cskW2N1UhfLdMYGB04IIHa0UAFeQaHcQaT4EsHsvD+pRS2fiC//s9Do92q2Kyy3RSdrdEEjRCCYgKq4LOqExnLJ6/RQBi+DYbKDw7bjTftxgd5Zme+t3gnkleVnlkeN1QqWkZ2wFVfm+UBcCtDVhatpV6NQt/tNkYXE8HkGfzY9p3L5YBL5GRtAJOcYOatUUAeYeHJ0sPhb4PW8tPEGm30WkxWJvrPR2mu7J0WISRGJopHUOYjyYyhEYO4Exk9r4ItJ9P8F6BZ3lnFY3Nvp9vDLaROXSB1jUGNWLMSFIIBLNnHU9a2qKAOK+LKQnw/pkslhc3stvrWnXMQtrGS6ki8u6jeSQLGrMuIllG7A4JXqwBxfG2mazD8TvCmuJZRahYpqEVukiNMXsY2t7lJCY1ifAZpVLS7lU7IEZVCGWvT6KACuK8dJCvi/wABXJsLm4uINTmzcQWMk32eJ7SaM7pEUiNWkeDO4gHGTwhI7WigDzrQI73SvFy6fpM3iCS0l1C8nv7TUbJFtbaKUzTebBcLEoctM0WE812CSsGQFTs7bWv+PZf+B/8Aot6v1Q1r/j2X/gf/AKLekwRwWuf8gXUP+veT/wBBNa2of8f9z/11b+ZrJ1z/AJAuof8AXvJ/6Ca1tQ/4/wC5/wCurfzNZ9CyjZf6q8/6/W/9EQVNUNl/qrz/AK/W/wDREFTUMEFNkLCNigBfBwD606ihOzuKUeaLV7XMrwzc6pd6NFPr1klhqDvLutlcP5aeYwjyVZgTs2k4PUnp0rVqGQQ2/wBpu/swluDDs3Ku6TapLbV56k/nU7JJHgTRtFJtBKNjK5GcHHfmh9wSsrCUUUUhlmzmhsYrrU7shbWxiaaQkZ6A44HPv0PSvK/BWmTalr82ragoE0z/AG+YAYUPIS6AYY8YO79CK7LxqY59JttKkUNDM5vLxdh3GCLDEA5HU7B1/wCWhOOM1Y0Gzey08Cc5upmM059Xbk9OOOBxxxWvNywsupzOHtK/M9o7er3/AA/NmjRRRWR0hRRRQAUUUUAFZGpXOrR67pNvY2KTabM0hvblnUGBRGxUAbgSWfYOAcAHOOCNGSM3f2m3e2le3EOZZOiYYlduc5z9KnbZwIoo4Y1UKqRjCqAMAAfhVJ2JlHmtrawlFFFSUFQ2X+qvP+v1v/REFTVDZf6q8/6/W/8AREFNAFl/qrz/AK/W/wDREFY/ir/X+Hf+w3Zf+jRWxZf6q8/6/W/9EQVj+Kv9f4d/7Ddl/wCjRTW4uh0XxjutOsvDel3Oq30VlHFrumSI8tz5KMVvIi27kBwIxI5DZA2bsfKCOU1Bktfi7dX16dIudUh1a2j0yxngYak1tLbQwyS28nmZ+zoZbmRk8tk3RzElWyyey0VoSFcLqd1p0Hxs8PxPfRLqM+hX8YtnueSPPtmTbETgEhJjkDLCM5JCcd1RQB518NvCmgaJ4q8VS6Lo9jp7WD2+jQ/Z4QCYUtopyzMcs0jNcEMxPzCKPPKkn0WiigDyrW7y1j8ZfEu30y6ubnV28M2sv2OxvT9r8xRefLCPmMTYeEjauA0qttJf5rfwkjsYtV12PRbjRLvTfJtWE/h63W304ylp96CNXkHnhRGXbfko0IKrtBb0qigArxCxn0Sf4UJdR6jpF/ommeI777RDqV40tpdpJeXEcSXE2JTjNxBMHdXyVRjgHePb6KAOQ+EzTt4GtWuI4olN1eGCOGQyQrb/AGqXyRCxVd0Ii2eWQoBTbgAYFWviPc6VaeDr2fxBNLFpaPCZlR0Xzv3yYhcv8nlyHEb7yF2u24quSOlooA8QsY/ByXWkvq9/4WufCUqX8ktuk0Mmj2V6TZ+VBFu/diQRidhkKzF53CqHKj0/4e/bv+EB8Nf2v9p/tL+zLb7V9q3ed5vlLv37ud27Oc85zmugooA86+LNz4ciutHt/Ec2kGa4SdbWDXHj/s9OYt9zIsmA8kYwqKpDHzmHyqXkSKxn0ez+Jvgy2t9d/tC4k8M3UMMlxfiaS6jElo0cuM4ZnVJWLqMuEJ5CcelUUAFeVfE6XwrL4qjsNc1XTbHUpbKN0u9TuYov7Mi3yfvrPfgi5dsjepwvko7fcRJPVaKAPKvDUvhW8+I8x03VdNTV7W9u0lZ7mL+09RlzIHhcDEn2aEEhUYEnyY2GEiVpfRta/wCPZf8Agf8A6Ler9UNa/wCPZf8Agf8A6LekwRwWuf8AIF1D/r3k/wDQTWtqH/H/AHP/AF1b+ZrJ1z/kC6h/17yf+gmtbUP+P+5/66t/M1n0LKNl/qrz/r9b/wBEQVNUNl/qrz/r9b/0RBU1DBBRRRSAKaI91yjvPIkSI+Y0VT5jHG3JPQDnpTqKAI4JknRni3FFkaIsVIBZeCBkc49qkqvqj3zaZMmnvGbtUb7Os7ERh+2cAkAnrgVBoaakmnaba6kDd6ktoDeXMKgReYiDe3bALZwAPwFVbS5Kk+Zxt216ddPlbX1RPPbLM4ZskbkLKSxHyksuBnAO7BzjkDB7YsVGk0byyRpIjSR43qGBK56ZHapKRQUUUUgCiiq5uVe2Wa1VrsMwVFt8OXJbbxzjr79jQBYqvu+2wN9nnlhUS+WZhFkgqw3hdwwe4z0ql4kt9bL2UWiy2sDJeRfbDOefIVwZFT5WBYgFe33icggVrs7siozMVXO0E8DPpVNWJjJybVrW/HRO6/L1TCTZ5jeXu2ZO3d1x2zTaKKkoKKKKACobL/VXn/X63/oiCpqhsv8AVXn/AF+t/wCiIKaALL/VXn/X63/oiCsfxV/r/Dv/AGG7L/0aK2LL/VXn/X63/oiCsfxV/r/Dv/Ybsv8A0aKa3F0Nf4s3PhyK60e38RzaQZrhJ1tYNceP+z05i33MiyYDyRjCoqkMfOYfKpeRMXVovDsWq+GRpGp22pa7FNp6CadjNqt7b7oAJre4Jz5Hl+Y8pjRo5F88ZRjIw9forQkK8q1aXwrdfFB7WbVdNtddgvbaR7m8uYkvUbZEY7KzBxIInGGk6q3nyIu5pHMXqtFAHlXw+u9Qi+LPiay1+C5j1W70y3uiZbmJ4zGl1dqohUSFvKVZI0DbEJKF5FR5AG9VoooA8Q1K18JeItT8S6fZa3Y2upsmp2s86lJ9WvpHSZZImhTEslvAGISIgs5hjK4WNWl6r4Tf2VHdaxb6HB4WntlSCRtU8N2KW1vO7GUGBgryAyRhQx+fpOvyr1b0WigDK8WSWsXhXWZNQvrnT7JLKZp7y1YrNbxhDukQgEhlGSCATkDg14reL4fu9NtbjQtQ8I6fotxqcR1LTkEN1pdjALa68tryOKRYzLJL5YLbgu9IFUuYg7+/0UAc18N5Uk8EaVHBBFDbWyNZ2/kljHLDC7RRTR7ix8uREWRcs3yuPmb7xPiPc6VaeDr2fxBNLFpaPCZlR0Xzv3yYhcv8nlyHEb7yF2u24quSOlooA8Q1Twz4S1jwA08C+H9VWfUItORdNdJ7TSRez2sEyWoHypIq7ZA5UEyMz7VEhSvarS2gs7WG1s4YoLaBFjiiiQKkaKMBVA4AAAAAqWigDzr4s3PhyK60e38RzaQZrhJ1tYNceP8As9OYt9zIsmA8kYwqKpDHzmHyqXkTjzFYx+LLQ2+p22o3sV7pcdhJcss+r31r5dtuuLa5BBFsQZWlVY3V9t0d6+YdnutFABXlXxOl8Ky+Ko7DXNV02x1KWyjdLvU7mKL+zIt8n76z34IuXbI3qcL5KO33EST1WigDxrT1S1+LtrY2Q0i51SHVrmTU76CdhqTW0ttNNHFcR+Xn7Ohlto1fzGTdHCAFbCp6trX/AB7L/wAD/wDRb1fqhrX/AB7L/wAD/wDRb0mCOC1z/kC6h/17yf8AoJrW1D/j/uf+urfzNZOuf8gXUP8Ar3k/9BNa2of8f9z/ANdW/maz6FlGy/1V5/1+t/6IgqaobL/VXn/X63/oiCpqGCCiiikAUUVj6pr0VhqUdgLLUby6eIzhLK2achAdpJC8gZI/MUwNiisH/hIZP+hd8T/+CqX/AAo/4SGT/oXfE/8A4Kpf8KLMLm+rbI3jUKqu4kbCgFmAwCT1PHFQGAR2CW9rJKkixFPOlfzWL8/Oc/Xp04rH/wCEhk/6F3xP/wCCqX/Cj/hIZP8AoXfE/wD4Kpf8KdmF0WfFkGrPoNzD4VuYU1QxhIZ70AKGxguQqsMjkgYIyADxWmkf76WSSeTb5YWOFVXbuzyxPXpxisP/AISGT/oXfE//AIKpf8KP+Ehk/wChd8T/APgql/wpu7VrERiotyvv5/l2NyKKOPz3/etLK6tlpCVRQuNqr0HqTTy37uKMBVjiQRoqqFCqOgwKwP8AhIZP+hd8T/8Agql/wo/4SGT/AKF3xP8A+CqX/ClZl3RvUVg/8JDJ/wBC74n/APBVL/hTo9flkkVB4f8AEa7iBuk0yRFHuWIAA9ycClZhc3KKsNZyhnGY8I5TJkVQSOuMkUfZJP70H/f9P8aLAV6KpaRqMGq2Iu7Tf5LPIilhgnY7ITj0JUke3pV2kAVDZf6q8/6/W/8AREFTVDZf6q8/6/W/9EQU0AWX+qvP+v1v/REFY/ir/X+Hf+w3Zf8Ao0VsWX+qvP8Ar9b/ANEQVU1fTp9Rn0j7P5YFrqNvdyGRwg2RuGbGep4wB6n0yafUXQ6rxpYHVI4bW3upWvgjzQaemrS6aLjDIrSNLCDLhA+MDK5kG4Z2MvnWg6zfapoieJH1fUri9g1PRLKCVpGt45ILmLTzL5lqjGEs/wBqmOSGKlhtb5EI9L1uHRNetUtdc0ux1K2RxIsV4kEyK4BAYBiRnBIz7miaHRJ9Zg1efS7GTVrdDHDeukBnjQ7sqshO4D5m4B/iPqau5NjfrgPGIktdbs9WsdTuX8rU7Syu9movtsxLLAiwi0XEUnmCYlnlO9BKHUttjUdh/akP93/yLH/8VWfNDok+swavPpdjJq1uhjhvXSAzxod2VWQncB8zcA/xH1NFwsVPBUl0da8aw3d9c3iwa0Fh89gfKjaztZBGoAACgu2BjPcksST1VYGmw6Jpd1e3WmaXY2dzfP5l1LbpBG9w+Sd0hBBY5Zjk56n1rQ/tSH+7/wCRY/8A4qi4WL9FUP7Uh/u/+RY//iqP7Uh/u/8AkWP/AOKouFi/RVD+1If7v/kWP/4qj+1If7v/AJFj/wDiqLhYv0VQ/tSH+7/5Fj/+Ko/tSH+7/wCRY/8A4qi4WL9FUP7Uh/u/+RY//iqP7Uh/u/8AkWP/AOKouFi/RVD+1If7v/kWP/4qj+1If7v/AJFj/wDiqLhYv0VQ/tSH+7/5Fj/+Ko/tSH+7/wCRY/8A4qi4WL9UNa/49l/4H/6Lej+1If7v/kWP/wCKqrqF7FcQYXau0OcmRD/Aw7MT1IobGcZrn/IF1D/r3k/9BNa2of8AH/c/9dW/maydc/5Auof9e8n/AKCa1tQ/4/7n/rq38zWfQoo2X+qvP+v1v/REFTVDZf6q8/6/W/8AREFTUMEFFFFIAqj4c/5KzF/2BJv/AEfFV6odEs5oPHI1l/L+xppz2mDKocu0qPwCRwAnX3GM84qO4M9Eoqh/akP93/yLH/8AFUf2pD/d/wDIsf8A8VV3IsX6iu1na1mWzkiiuSjCKSWMyIr44LKGUsAcZAYZ9R1qr/akP93/AMix/wDxVQ3d7bXVrNby+ascyNGxiuVjcAjB2urhlPoQQR1BouFjirbV9Z1HwD4M1GbWLm2k1DTIZZjp8MDXt7evFGyRxJLG0QUjz2c4XbtVtyormu60ttV+y6cuqx2JuTag3sltI4RbjCZESsuTGSZOWYEYXg5JXlf+EV8NLYaTZwxalBFpUMltZtb63NFJFE5UtH5izhmX92mFYkAKAMAV0FtLZ2/2Xyzcn7NCbdPMvvMyp28vukO9vkHztluW5+ZslwscffeIdZ8Karqa6rdXOpommT30aXMcEEM0qNCMWzRAmGBWm2yNcklAUYMyrK9avw08RXXiLwg14mo6brV7Fqd1ayz27iKExpduqlQu/H7jYyqSSwKZb5t9W9E0vQtEunuNOtZUkKGKMSXvmpbxkgmOFHkKwx/KvyRhV+RBj5VxLp9ppOn21zBZR3MUVxetqEijUD/rmkEjFf3vyqz5JRcIdzAjDMCXCxz+oXevWXje6l1e88QWfh5tQtobKS1TT2s2R0hRY5Aytc5e4Z0JUcBlOVALCl8N/Emq6zYef4hm1JJdZ0dNStLW6gtRCABmdrd4WLeV+/gAWfDgYOWJbb1FzpehXOsjVJrWU3O9JWQXu2CSRMbJJIRJ5byLtTDspYbEwRsXEWnaPomlG4k0y2kjlkhaCIS3vmpbxnH7uFHkKwx8L8kYVfkQY+VcFxmL4hHiqbU7lNFsdMlskmcq80ku8scZyFQgdBxk+vfA5vS/Dni7TLzUbqz0zTRNqEonuDJe3koZwMZCupC8AD5QOFUdFGN/xJrWpw6jPb6f4fnvrdZXcXC3UKK+7HQFs4GOpx/U8xpcutadeajcx+HdYma9lEpS51eOVIePuxKzkIucnA9cdAoEDNbwFD9n8MW8RmgmKzXG54GLJnznyASATg8ZxzjjiuhrB8EWVzp/hq3t76EwXAkmdoyysVDSuw5UkdCOhrepPcYVDZf6q8/6/W/9EQVNUNl/qrz/AK/W/wDREFCALL/VXn/X63/oiCpqgjiuo/PERsSkkxmHmzSKwyiJggRsP4M9e9Lsvf8AqG/+BEv/AMZoaAmoqHZe/wDUN/8AAiX/AOM0bL3/AKhv/gRL/wDGaLBcmoqHZe/9Q3/wIl/+M0bL3/qG/wDgRL/8ZosFyaiodl7/ANQ3/wACJf8A4zRsvf8AqG/+BEv/AMZosFyaiodl7/1Df/AiX/4zRsvf+ob/AOBEv/xmiwXJqKh2Xv8A1Df/AAIl/wDjNGy9/wCob/4ES/8AxmiwXJqKh2Xv/UN/8CJf/jNGy9/6hv8A4ES//GaLBcmoqHZe/wDUN/8AAiX/AOM0bL3/AKhv/gRL/wDGaLBcmoqHZe/9Q3/wIl/+M0bL3/qG/wDgRL/8ZosFyaiodl7/ANQ3/wACJf8A4zRsvf8AqG/+BEv/AMZosFyaiodl7/1Df/AiX/4zRsvf+ob/AOBEv/xmiwXK+uf8gXUP+veT/wBBNa2of8f9z/11b+ZrLvrW9urK4t9+mp5sbR7vPlOMjGceVWleOsl5O6HKtIzA+oJo6AU7L/VXn/X63/oiCpqgjiuo/PERsSkkxmHmzSKwyiJggRsP4M9e9Lsvf+ob/wCBEv8A8ZoaAmoqHZe/9Q3/AMCJf/jNGy9/6hv/AIES/wDxmiwXJqKh2Xv/AFDf/AiX/wCM0bL3/qG/+BEv/wAZosFyaiodl7/1Df8AwIl/+M0bL3/qG/8AgRL/APGaLBcmoqHZe/8AUN/8CJf/AIzRsvf+ob/4ES//ABmiwXJqKh2Xv/UN/wDAiX/4zRsvf+ob/wCBEv8A8ZosFyaiodl7/wBQ3/wIl/8AjNGy9/6hv/gRL/8AGaLBcmoqHZe/9Q3/AMCJf/jNGy9/6hv/AIES/wDxmiwXJqKh2Xv/AFDf/AiX/wCM0bL3/qG/+BEv/wAZosFyaiodl7/1Df8AwIl/+M0bL3/qG/8AgRL/APGaLBcmqGy/1V5/1+t/6Igo2Xv/AFDf/AiX/wCM0+2ieGCXzngaWW4aXbCzMFHlxqOWVefkPagB9FFFIAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//9kN&lt;/Spwj&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Nrlx_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Nrlx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Fwnr&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Fwnr_id&gt;1&lt;/Fwnr_id&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Fwnr_id&gt;2&lt;/Fwnr_id&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Fwnr&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Ym_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Ymid&gt;1234&lt;/Ymid&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Ym&gt;colala.cn&lt;/Ym&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Ym_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Ym_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Ymid&gt;2324&lt;/Ymid&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Ym&gt;dev.mo.cn&lt;/Ym&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Ym_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Jr_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Jrid&gt;2323&lt;/Jrid&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Wzfb&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Fbdd&gt;2&lt;/Fbdd&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Fbdd&gt;3&lt;/Fbdd&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Wzfb&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Wzjrfs&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Jrfs&gt;1&lt;/Jrfs&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Jrfs&gt;4&lt;/Jrfs&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Wzjrfs&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Ip_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Ipid&gt;122&lt;/Ipid&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Qsip&gt;65444784&lt;/Qsip&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Zzip&gt;65444784&lt;/Zzip&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Ip_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Ip_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Ipid&gt;234&lt;/Ipid&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Qsip&gt;65444782&lt;/Qsip&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Zzip&gt;65444782&lt;/Zzip&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Ip_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Bbyhid&gt;1223&lt;/Bbyhid&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Bbyhlx&gt;1&lt;/Bbyhlx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Jr_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Jr_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Jrid&gt;2334&lt;/Jrid&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Wzfb&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Fbdd&gt;2&lt;/Fbdd&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Fbdd&gt;3&lt;/Fbdd&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Wzfb&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Wzjrfs&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Jrfs&gt;1&lt;/Jrfs&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Jrfs&gt;4&lt;/Jrfs&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Wzjrfs&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Ip_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Ipid&gt;122&lt;/Ipid&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Qsip&gt;65444784&lt;/Qsip&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Zzip&gt;65444784&lt;/Zzip&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Ip_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Ip_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Ipid&gt;234&lt;/Ipid&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Qsip&gt;65444782&lt;/Qsip&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Zzip&gt;65444782&lt;/Zzip&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Ip_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Bbyhid&gt;1223&lt;/Bbyhid&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Bbyhlx&gt;1&lt;/Bbyhlx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Jr_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Wz_Fzr&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Fzr_xm&gt;张艾恩&lt;/Fzr_xm&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Fzr_dhhm&gt;0571-87756824&lt;/Fzr_dhhm&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Fzr_sjhm&gt;13963961834;13063961834&lt;/Fzr_sjhm&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Fzr_dzyj&gt;i@baiboke.com&lt;/Fzr_dzyj&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Msn&gt;i@baiboke.com&lt;/Msn&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Qq&gt;1034555083&lt;/Qq&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Fzr_zjlx&gt;1&lt;/Fzr_zjlx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Fzr_zjhm&gt;371323134609029115&lt;/Fzr_zjhm&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Wz_Fzr&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Syurl&gt;www.dev.mo.cn;www.colala.cn&lt;/Syurl&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Wz_Bz&gt;备注&lt;/Wz_Bz&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Scbbsj&gt;2009-9-18&lt;/Scbbsj&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Zjxgsj&gt;2009-12-18&lt;/Zjxgsj&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Wz_xx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Baxx&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/HSRW&gt;<br />&nbsp;&nbsp;&lt;/ICP&gt;<br />&lt;/DownloadData&gt;</div></div>]]>
      </summary>
      <category term="" label="其他" scheme="http://dev.mo.cn/cat_diary_18.html" />
   </entry>
   <entry>
      <title type="html">C#版本的备案接口pwdHash生成代码(测试通过)</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_277.html" />
      <updated>2010-2-21 18:40:00</updated>
      <published>2010-2-21 18:40:00</published>
      <id>http://dev.mo.cn/article_277.html</id>
      <summary type="html">
      <![CDATA[为了方便查看，代码放到类里面去了，关键的代码就是Hex2Bin函数和EncodeBase64,EncodeBase64直接接受的就是Hex2Bin生成的字节数组<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">using&nbsp;System;<br />using&nbsp;System.Configuration;<br />using&nbsp;System.Web;<br />using&nbsp;System.Web.Security;<br />using&nbsp;System.Text;<br />///&nbsp;&lt;summary&gt;<br />///PWDHASH&nbsp;的摘要说明<br />///&nbsp;&lt;/summary&gt;<br />public&nbsp;class&nbsp;PWDHASH<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;//测试函数<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;Test()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;Password&nbsp;=&nbsp;"123";&nbsp;&nbsp;&nbsp;&nbsp;//用户口令<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;RandStr&nbsp;=&nbsp;GetRandomString(20);&nbsp;//获取长度为20的随机字符串，即传递给省系统的randVal参数<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;pwdHash(Password,&nbsp;RandStr);&nbsp;&nbsp;&nbsp;&nbsp;//获取Hash，即传递给省系统的pwdHash参数<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//生成Hash的函数，参数为用户口令和随机字符<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;pwdHash(string&nbsp;PassWord,&nbsp;string&nbsp;RndStr)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;EncodeBase64(Hex2Bin(MD5(PassWord&nbsp;+&nbsp;RndStr)));<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//MD5，参数为字符串<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;MD5(string&nbsp;str)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;MD5(str,&nbsp;32);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//MD5重载<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;MD5(string&nbsp;str,&nbsp;int&nbsp;code)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(code&nbsp;==&nbsp;16)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str,&nbsp;"MD5").ToLower().Substring(8,&nbsp;16);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str,&nbsp;"MD5").ToLower();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//16进制字符串转字节数组，参数为md5后的字符串<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;byte[]&nbsp;Hex2Bin(string&nbsp;str)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;byt&nbsp;=&nbsp;new&nbsp;byte[16];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;k&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;31;&nbsp;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(i&nbsp;%&nbsp;2&nbsp;==&nbsp;0)<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;string&nbsp;HexCode&nbsp;=&nbsp;str.Substring(i,&nbsp;2);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byt[k]&nbsp;=&nbsp;(byte)Convert.ToInt16(HexCode,&nbsp;16);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k++;<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;i++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;byt;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//base64编码，参数是字节数组<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;EncodeBase64(byte[]&nbsp;bytes)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Convert.ToBase64String(bytes).ToString();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//获取len长度的随机字符串<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;GetRandomString(int&nbsp;len)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;Seed&nbsp;=&nbsp;"abcdefghijklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ0123456789";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;ReturnStr&nbsp;=&nbsp;"";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Random&nbsp;Rnd&nbsp;=&nbsp;new&nbsp;Random();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;len;&nbsp;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReturnStr&nbsp;+=&nbsp;Seed.Substring(Rnd.Next(62),&nbsp;1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ReturnStr;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}</div></div>]]>
      </summary>
      <category term="" label="其他" scheme="http://dev.mo.cn/cat_diary_18.html" />
   </entry>
   <entry>
      <title type="html">addnew后获取不到数据表标识列的值的解决方法</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_276.html" />
      <updated>2010-2-8 12:22:46</updated>
      <published>2010-2-8 12:22:46</published>
      <id>http://dev.mo.cn/article_276.html</id>
      <summary type="html">
      <![CDATA[Function&nbsp;AddToOrder(recID,Username,agent1,memo,detail)<br />&nbsp; &nbsp; &nbsp; &nbsp; Dim&nbsp;tmpRs<br />&nbsp; &nbsp; &nbsp; &nbsp; Set&nbsp;tmpRs&nbsp;=&nbsp;server.CreateObject("Adodb.RecordSet")<br />&nbsp; &nbsp; &nbsp; &nbsp; tmpRs.open&nbsp;"Select&nbsp;*&nbsp;From&nbsp;FreeHost.FreeHost_Cart&nbsp;Where&nbsp;Cart_ID="&nbsp;&&nbsp;recID,conn,1,3<br />&nbsp; &nbsp; &nbsp; &nbsp; If&nbsp;recID&nbsp;=&nbsp;0&nbsp;Then&nbsp;tmpRs.addNew()<br />&nbsp; &nbsp; &nbsp; &nbsp; tmpRs("Cart_Detail")&nbsp;=&nbsp;detail<br />&nbsp; &nbsp; &nbsp; &nbsp; tmpRs("Cart_Memo")&nbsp;=&nbsp;memo<br />&nbsp; &nbsp; &nbsp; &nbsp; If&nbsp;recID&nbsp;=&nbsp;0&nbsp;Then&nbsp;tmpRs("Cart_CreateDate")&nbsp;=&nbsp;now()<br />&nbsp; &nbsp; &nbsp; &nbsp; tmpRs("Cart_UserName")&nbsp;=&nbsp;Username<br />&nbsp; &nbsp; &nbsp; &nbsp; tmpRs("Cart_Agent")&nbsp;=&nbsp;agent1<br />&nbsp; &nbsp; &nbsp; &nbsp; tmpRs("Cart_IP")&nbsp;=&nbsp;request.ServerVariables("REMOTE_ADDR")<br />&nbsp; &nbsp; &nbsp; &nbsp; tmpRs("Cart_State")&nbsp;=&nbsp;0<br />&nbsp; &nbsp; &nbsp; &nbsp; tmpRs.Update<br />&nbsp; &nbsp; &nbsp; &nbsp; AddToOrder&nbsp;=&nbsp;tmpRs("Cart_ID").value<br />&nbsp; &nbsp; &nbsp; &nbsp; If&nbsp;err&nbsp;Then<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WriteSomethingToLog(err.description)<br />&nbsp; &nbsp; &nbsp; &nbsp; Else<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WriteSomethingToLog("没错误")<br />&nbsp; &nbsp; &nbsp; &nbsp; End&nbsp;If<br />&nbsp; &nbsp; &nbsp; &nbsp; Set&nbsp;tmpRs&nbsp;=&nbsp;Nothing<br />End&nbsp;Function<br /><br />AddToOrder&nbsp;=&nbsp;tmpRs("Cart_ID").value的时候无论如何也获取不到这个值，而在另外一段相同的操作其他表代码中却能获取，最后发现是两个表的差异：一个设置了主键一个没设置。设置主键后，自动编号的数值就能正确获取到了。]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">Ping</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_275.html" />
      <updated>2010-1-27 9:34:36</updated>
      <published>2010-1-27 9:34:36</published>
      <id>http://dev.mo.cn/article_275.html</id>
      <summary type="html">
      <![CDATA[ping&nbsp;love&nbsp;:destidation&nbsp;unreachable<br />ping&nbsp;job&nbsp;:&nbsp;request&nbsp;time&nbsp;out<br />ping&nbsp;happyness:unknow&nbsp;hostname<br />ping&nbsp;success:TTL&nbsp;expired&nbsp;in&nbsp;transit<br />ping&nbsp;future:&nbsp;reply&nbsp;from&nbsp;hell:bytes=32&nbsp;time＝10ms&nbsp;TTL=1]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">新年快乐</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_274.html" />
      <updated>2009-12-31 23:55:30</updated>
      <published>2009-12-31 23:55:30</published>
      <id>http://dev.mo.cn/article_274.html</id>
      <summary type="html">
      <![CDATA[同志们，新年快乐！！！！！！！！！！！！！！！！！！！！！！]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">艾恩ASP上传类完整说明文档</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_273.html" />
      <updated>2009-12-31 12:37:07</updated>
      <published>2009-12-31 12:37:07</published>
      <id>http://dev.mo.cn/article_273.html</id>
      <summary type="html">
      <![CDATA[前几天抽空重新写了下，一直没时间发出来。<br /><br /><a href="http://dev.mo.cn/source_195.html" target="new"><span style="font-size:24px;">下载地址</span></a><br /><br />一、简介<br />自从接触ASP就开始接触上传，看过一些上传类，但是总感觉封装的还是不够简单，因此自己尝试写一个能够用最少最简单的代码实现各种上传方式的上传类。在学校期间就开始写，一点点的完善、优化，到现在的版本，现在的版本能适应各种上传方式。上<br />传类的主要的功能如下：<br />1、自由设置最大上传大小、单文件最大上传大小<br />2、自由设置允许上传的文件类型<br />3、可设置文本的编码，以适应各种上传环境<br />4、内置进度条，用户可选择开启和关闭<br />5、多种错误状态处理<br />6、多种文件保存方式：原文件名、随机文件名、用户自定义文件名<br />7、自由选择是否覆盖已存在文件<br />8、完整保存表单数据，支持同名表单，不支持同名文件域<br />注意：<br />1、特别注意Form一定要加上enctype="multipart/form-data"属性,method属性值必须是post,否则上传会出错&nbsp;<br />2、request.form()方法获取数据失效,请使用UpLoad.forms()&nbsp;<br />3、上传前请确认保存文件的文件夹有读写权限,若不可写则会出现"文件无法写入"错误,解决方法<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://dev.mo.cn/show.asp?id=81<br />二、调用方法<br />1、无组件类的调用方法：<br />Dim&nbsp;Upload<br />set&nbsp;Upload&nbsp;=&nbsp;new&nbsp;AnUpLoad<br />2、组件的调用方法：<br />Dim&nbsp;Upload<br />Set&nbsp;Upload&nbsp;=&nbsp;server.CreateObject("Anasp.Anupload")<br />注意：上传属性的设置必须在调用Upload.GetData()之前。<br />简单调用示例：<br />&nbsp;&nbsp;Dim&nbsp;Upload<br />&nbsp;&nbsp;set&nbsp;Upload=new&nbsp;AnUpLoad&nbsp;'Set&nbsp;Upload&nbsp;=&nbsp;server.CreateObject("Anasp.Anupload")<br />Upload.SingleSize=1024*1024*1024&nbsp;'设置单个文件最大上传限制,按字节计；默认为不限制<br />&nbsp;&nbsp;Upload.MaxSize=1024*1024*1024&nbsp;'设置最大上传限制,按字节计；默认为不限制<br />&nbsp;&nbsp;Upload.Exe="bmp|rar|pdf|jpg|gif"&nbsp;'设置合法扩展名,以|分割<br />&nbsp;&nbsp;Upload.Charset="gb2312"&nbsp;'设置文本编码，默认为gb2312<br />&nbsp;&nbsp;Upload.openProcesser=false&nbsp;'禁止进度条功能，如果启用，需配合客户端程序<br />&nbsp;&nbsp;Upload.GetData()&nbsp;'获取并保存数据,必须调用本方法]]>
      </summary>
      <category term="" label="无组件上传" scheme="http://dev.mo.cn/cat_diary_20.html" />
   </entry>
   <entry>
      <title type="html">BLOG换域名了，顺便简单说下301永久重定向</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_272.html" />
      <updated>2009-12-24 1:20:13</updated>
      <published>2009-12-24 1:20:13</published>
      <id>http://dev.mo.cn/article_272.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;由于原服务器暂时出现了问题，为了保证博客能够正常访问，将网站又一次转移了服务器，网站现在放在我们自己公司的机房服务器里面了。<br />&nbsp;&nbsp;&nbsp;服务器转移了，同时也更换了BLOG的域名，由原来的ii-home.cn换成dev.mo.cn。网站换域名，势必会影响到网站的访问量以及新域名在各大搜索引擎的收录，为让搜索引擎将权重转移到新域名上面，有很多方法，在这里只推荐一种方法“301永久重定向”。<br />&nbsp;&nbsp;&nbsp;&nbsp;所谓301永久重定向(或叫301转向，301跳转)，是指当用户或搜索引擎向网站服务器发出浏览请求时，服务器返回的HTTP数据流中头信息(header)中的状态码的一种，表示本网页永久性转移到另一个地址。<br />&nbsp;&nbsp;&nbsp;&nbsp;对于搜索引擎优化（SEO）来说，给搜索引擎一个友好的信息，告诉它此页面已永久重定向，避免搜索引擎找不到页面。这对于网站的SEO是很重要的，因为301永久重定向对SEO无任何不好的影响！而且原域名的关键词排名和PR级别都会传达给新域名！<br />&nbsp;&nbsp;&nbsp;&nbsp;下面是我在本次域名迁移中所做的工作，其实很简单：<br />&nbsp;&nbsp;&nbsp;&nbsp;1.将原域名解析到另外一个空间，将这个空间的404错误页设置为/404.asp,其中404.asp放在根目录，其内容如下（请将里面的玉米换成自己相应的原玉米和新玉米）<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;%<br />&nbsp; &nbsp; &nbsp; &nbsp; Dim&nbsp;Str<br />&nbsp; &nbsp; &nbsp; &nbsp; Str&nbsp;=&nbsp;lcase(request.QueryString())<br />&nbsp; &nbsp; &nbsp; &nbsp; str&nbsp;=&nbsp;replace(Str,"404;","")<br />&nbsp; &nbsp; &nbsp; &nbsp; str&nbsp;=&nbsp;replace(Str,":80","")<br />&nbsp; &nbsp; &nbsp; &nbsp; str&nbsp;=&nbsp;replace(Str,"dev.mo.cn","dev.mo.cn")&nbsp;'dev.mo.cn是原玉米<br />&nbsp; &nbsp; &nbsp; &nbsp; str&nbsp;=&nbsp;replace(Str,"ii-home.cn","dev.mo.cn")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'dev.mo.cn是新玉米<br />&nbsp; &nbsp; &nbsp; &nbsp; Response.Status="301&nbsp;Moved&nbsp;Permanently"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'设置301状态<br />&nbsp; &nbsp; &nbsp; &nbsp; Response.AddHeader&nbsp;"Location",str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'设置要转向的地址<br />%&gt;</div></div><br />&nbsp;&nbsp;&nbsp;&nbsp;2.同时，在这个空间放一个default.asp,其内容如下<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;%<br />&nbsp; &nbsp; &nbsp; &nbsp; Response.Status="301&nbsp;Moved&nbsp;Permanently"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'设置状态<br />&nbsp; &nbsp; &nbsp; &nbsp; Response.AddHeader&nbsp;"Location",&nbsp;"http://dev.mo.cn/"&nbsp;&nbsp;&nbsp;'设置首页的转移地址<br />%&gt;</div></div><br />&nbsp;&nbsp;&nbsp;&nbsp;3.说明一点，放404.asp的作用就是：用原域名访问网站的时候，除了默认首页（default.asp）外，其他的页面都会转到404.asp处理，因此在404.asp集中处理就好了，至于404.asp所包含的内容我以前在一篇关于404伪静态的文章中详细说明了<br />&nbsp;&nbsp;&nbsp;4.301适用于只换域名不换网站结构的情况，如果你的网站结构同样发生了较大的变化，那就把404.asp里面的所有页面都直接转向新域名的首页。<br />&nbsp;&nbsp;&nbsp;5.对于网站结构发生变化的情况，还有一种特殊状态，如果你原网站结构和新网站结构对应关系比较明确，完全可以在404.asp里面进行处理，然后301永久重定向到新地址。例如，你原网站的有篇文章的地址是http://XXX/article.asp?id=123,新网站中使用了静态地址，例如http://zzz/article/123.html,那么在404.asp页面匹配http://XXX/article.asp?id=123，取出id后生成新地址，并转向。<br />&nbsp;&nbsp;&nbsp;6.当然，最重要的一点，你的新域名要解析到新网站。<br /><br />&nbsp;&nbsp;&nbsp;在转移的过程中，尽量让全部的地址都转移到新网站，最小工作量的情况就是利用404错误页，进行集中转向。<br />&nbsp;&nbsp;&nbsp;希望换域名的站长们在这“和谐时代”，能完美切换域名。<br />&nbsp;&nbsp;&nbsp;同时，也祝大家在这“和谐时代”圣诞节快乐、马上到来的元旦快乐、即将到来的春节快乐]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">整个人现在的状态</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_271.html" />
      <updated>2009-12-23 19:31:03</updated>
      <published>2009-12-23 19:31:03</published>
      <id>http://dev.mo.cn/article_271.html</id>
      <summary type="html">
      <![CDATA[1.想读圣经，因为社会太和谐了<br />2.想躲起来，谁也找不到<br />3.因为社会和谐，“快乐”地来回迁网站<br />4.准备抛弃ii-home.cn玉米，使用dev.mo.cn，暂时看一下状况<br />5.有点压力<br />6.想吃饭了，晚上买的菜<br />7.想睡个懒觉<br />8.希望社会真的和谐<br />9.菜好了。。。吃饭了]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">简单明了的ASP无组件上传</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_270.html" />
      <updated>2009-12-20 20:33:51</updated>
      <published>2009-12-20 20:33:51</published>
      <id>http://dev.mo.cn/article_270.html</id>
      <summary type="html">
      <![CDATA[有人嫌无组件上传类太大（我的上传类是13.8KB大小），下面就写了个简单的单文件上传的示例，顺便把无组件上传的原理也写在代码里面了。下面的示例适合在iframe或者弹出窗口中调用。不过，还是推荐大家用完整的类进行上传，完整的类在功能、易用性以及安全性上都比较好。<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;form&nbsp;action="?action=upload"&nbsp;method="post"&nbsp;enctype="multipart/form-data"&gt;<br />选择文件:&lt;input&nbsp;type="file"&nbsp;name="file1"&nbsp;/&gt;&nbsp;&lt;input&nbsp;type="submit"&nbsp;value="提交"&nbsp;/<br />&lt;/form&gt;&lt;br&nbsp;/&gt;<br />&lt;%<br />If&nbsp;request.QueryString("action")="upload"&nbsp;Then<br />&nbsp; &nbsp; &nbsp; &nbsp; Call&nbsp;doUpload("upload")<br />End&nbsp;If<br /><br />Function&nbsp;doUpload(Byval&nbsp;savePath)<br />&nbsp; &nbsp; &nbsp; &nbsp; Dim&nbsp;vData,&nbsp;vSplit,&nbsp;SplitStart,&nbsp;SplitEnd,&nbsp;ValueEnd,&nbsp;path,&nbsp;value<br />&nbsp; &nbsp; &nbsp; &nbsp; Dim&nbsp;vdata1,&nbsp;Str,&nbsp;FormNameStart,&nbsp;FormNameEnd,&nbsp;FormName,&nbsp;FileNameStart,&nbsp;FileNameEnd,&nbsp;FileName,&nbsp;ContentType<br />&nbsp; &nbsp; &nbsp; &nbsp; vData&nbsp;=&nbsp;request.BinaryRead(request.TotalBytes)<br />&nbsp; &nbsp; &nbsp; &nbsp; SplitStart&nbsp;=&nbsp;instrb(vData,chrb(13)&nbsp;&&nbsp;chrb(10))&nbsp; &nbsp; &nbsp; &nbsp; '找到分隔字符串的位置<br />&nbsp; &nbsp; &nbsp; &nbsp; vSplit&nbsp;=&nbsp;midb(vData,&nbsp;1,&nbsp;SplitStart&nbsp;-&nbsp;1)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '取出分隔符<br />&nbsp; &nbsp; &nbsp; &nbsp; SplitEnd&nbsp;=&nbsp;instrb(vData,chrb(13)&nbsp;&&nbsp;chrb(10)&nbsp;&&nbsp;chrb(13)&nbsp;&&nbsp;chrb(10))&nbsp;'找到文件数据的开始位置<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; '读出数据前面的描述部分，类似于<br />&nbsp; &nbsp; &nbsp; &nbsp; 'Content-Disposition:&nbsp;form-data;&nbsp;name="file1";&nbsp;filename="D:\TempFiles\a.jpg"<br />&nbsp; &nbsp; &nbsp; &nbsp; 'Content-Type:&nbsp;image/pjpeg<br />&nbsp; &nbsp; &nbsp; &nbsp; vdata1&nbsp;=&nbsp;midb(vData,SplitStart&nbsp;+&nbsp;2,SplitEnd&nbsp;-&nbsp;SplitStart&nbsp;-&nbsp;2)<br />&nbsp; &nbsp; &nbsp; &nbsp; str&nbsp;=&nbsp;BinToGB(vdata1)&nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; FormNameStart&nbsp;=&nbsp;instr(1,str,"name=""")&nbsp;+&nbsp;6<br />&nbsp; &nbsp; &nbsp; &nbsp; FormNameEnd&nbsp;=&nbsp;instr(FormNameStart,str,"""")<br />&nbsp; &nbsp; &nbsp; &nbsp; FormName&nbsp;=&nbsp;Mid(str,FormNameStart,FormNameEnd-FormNameStart)&nbsp;'读出表单名字<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; FileNameStart&nbsp;=&nbsp;instr(1,str,"filename=""")+10<br />&nbsp; &nbsp; &nbsp; &nbsp; FileNameEnd&nbsp;=&nbsp;instr(FileNameStart,str,"""")<br />&nbsp; &nbsp; &nbsp; &nbsp; FileName&nbsp;=&nbsp;Mid(str,FileNameStart,FileNameEnd-FileNameStart)&nbsp;'读出文件在客户端的路径<br />&nbsp; &nbsp; &nbsp; &nbsp; FileName&nbsp;=&nbsp;Replace(FileName,"/","\")<br />&nbsp; &nbsp; &nbsp; &nbsp; FileName&nbsp;=&nbsp;split(FileName,"\")(ubound(split(FileName,"\")))&nbsp;'读出文件名字<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; SplitEnd&nbsp;=&nbsp;SplitEnd&nbsp;+&nbsp;4&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 />&nbsp; &nbsp; &nbsp; &nbsp; ValueEnd&nbsp;=&nbsp;instrb(SplitEnd,vData,vSplit)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '找到数据结束位置<br />&nbsp; &nbsp; &nbsp; &nbsp; value&nbsp;=&nbsp;midb(vData,SplitEnd,ValueEnd-SplitEnd-2)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '取出数据<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; '保存文件的代码,因为stream直接写入value会出错，因此用adodb.recordset转换一下<br />&nbsp; &nbsp; &nbsp; &nbsp; Dim&nbsp;tmpStrm<br />&nbsp; &nbsp; &nbsp; &nbsp; Set&nbsp;tmpStrm&nbsp;=&nbsp;server.CreateObject("adodb.stream")<br />&nbsp; &nbsp; &nbsp; &nbsp; tmpStrm.mode=3<br />&nbsp; &nbsp; &nbsp; &nbsp; tmpStrm.type=&nbsp;1<br />&nbsp; &nbsp; &nbsp; &nbsp; tmpStrm.open()<br />&nbsp; &nbsp; &nbsp; &nbsp; Dim&nbsp;Info&nbsp;:&nbsp;Set&nbsp;Info&nbsp;=&nbsp;server.CreateObject("ADODB.Recordset")<br />&nbsp; &nbsp; &nbsp; &nbsp; Info.Fields.Append&nbsp;"value",&nbsp;205,-1<br />&nbsp; &nbsp; &nbsp; &nbsp; Info.open()<br />&nbsp; &nbsp; &nbsp; &nbsp; Info.addNew()<br />&nbsp; &nbsp; &nbsp; &nbsp; Info("value").appendChunk(value)<br />&nbsp; &nbsp; &nbsp; &nbsp; tmpStrm.write(Info("value"))<br />&nbsp; &nbsp; &nbsp; &nbsp; Info("value").appendChunk(null)<br />&nbsp; &nbsp; &nbsp; &nbsp; Info.update()<br />&nbsp; &nbsp; &nbsp; &nbsp; Info.Close()<br />&nbsp; &nbsp; &nbsp; &nbsp; Set&nbsp;Info&nbsp;=&nbsp;Nothing<br />&nbsp; &nbsp; &nbsp; &nbsp; tmpStrm.saveToFile&nbsp;server.MapPath(savePath)&nbsp;&&nbsp;"\"&nbsp;&&nbsp;FileName,2&nbsp;&nbsp;'以原文件名保存到upload下面<br />&nbsp; &nbsp; &nbsp; &nbsp; tmpStrm.close()<br />&nbsp; &nbsp; &nbsp; &nbsp; Set&nbsp;tmpStrm&nbsp;=&nbsp;Nothing<br />&nbsp; &nbsp; &nbsp; &nbsp; doUpload&nbsp;=&nbsp;FileName<br />End&nbsp;Function<br /><br />'二进制转GB函数<br />Function&nbsp;BinToGB(Bin)<br />&nbsp; &nbsp; &nbsp; &nbsp; Dim&nbsp;i,tAsc,str<br />&nbsp; &nbsp; &nbsp; &nbsp; for&nbsp;i=1&nbsp;to&nbsp;lenb(Bin)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tAsc&nbsp;=&nbsp;ascb(midb(bin,i,1))<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;tAsc&lt;128&nbsp;Then<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; str&nbsp;=&nbsp;str&nbsp;&&nbsp;chr(tAsc)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Else<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i&nbsp;=&nbsp;i+1<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; str&nbsp;=&nbsp;str&nbsp;&&nbsp;chr(clng("&H"&nbsp;&&nbsp;hex(tAsc)&nbsp;&&nbsp;hex(ascb(midb(bin,i,1)))))<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End&nbsp;if<br />&nbsp; &nbsp; &nbsp; &nbsp; Next<br />&nbsp; &nbsp; &nbsp; &nbsp; BinToGB&nbsp;=&nbsp;str<br />End&nbsp;Function<br />%&gt;</div></div>]]>
      </summary>
      <category term="" label="无组件上传" scheme="http://dev.mo.cn/cat_diary_20.html" />
   </entry>
   <entry>
      <title type="html">PHP生成分页字符串（可以准备好鸡蛋和砖块）</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_269.html" />
      <updated>2009-12-10 16:17:14</updated>
      <published>2009-12-10 16:17:14</published>
      <id>http://dev.mo.cn/article_269.html</id>
      <summary type="html">
      <![CDATA[//生成分页字符串<br />function&nbsp;createPage($url,&nbsp;$CurrentPage,&nbsp;$TotalRecord,&nbsp;$PageSize){<br />&nbsp; &nbsp; &nbsp; &nbsp; $pagecount&nbsp;=&nbsp;intval($TotalRecord&nbsp;/&nbsp;$PageSize)&nbsp;+&nbsp;(($TotalRecord&nbsp;%&nbsp;$PageSize&nbsp;==&nbsp;0)&nbsp;?&nbsp;0&nbsp;:&nbsp;1);<br />&nbsp; &nbsp; &nbsp; &nbsp; $PageStr&nbsp;=&nbsp;"&lt;div&nbsp;id=\"Pager\"&gt;\n";<br />&nbsp; &nbsp; &nbsp; &nbsp; $PageStr&nbsp;.=&nbsp;"共[$pagecount]页&nbsp;当前[$CurrentPage/$pagecount]&nbsp;{$PageSize}条/页&nbsp;&nbsp;&nbsp;";<br />&nbsp; &nbsp; &nbsp; &nbsp; $PageStr&nbsp;.=&nbsp;$CurrentPage&nbsp;&lt;=&nbsp;1&nbsp;?&nbsp;"首页&nbsp;&nbsp;"&nbsp;:&nbsp;"&lt;a&nbsp;href=\""&nbsp;.&nbsp;str_replace("{page}",1,$url)&nbsp;.&nbsp;"\"&gt;首页&lt;/a&gt;&nbsp;&nbsp;";<br />&nbsp; &nbsp; &nbsp; &nbsp; $PageStr&nbsp;.=&nbsp;$CurrentPage&nbsp;&lt;=&nbsp;1&nbsp;?&nbsp;"上一页&nbsp;&nbsp;"&nbsp;:&nbsp;"&lt;a&nbsp;href=\""&nbsp;.&nbsp;str_replace("{page}",$CurrentPage&nbsp;-&nbsp;1,$url)&nbsp;.&nbsp;"\"&gt;上一页&lt;/a&gt;&nbsp;&nbsp;";<br />&nbsp; &nbsp; &nbsp; &nbsp; $PageStr&nbsp;.=&nbsp;$CurrentPage&nbsp;&gt;=&nbsp;$pagecount&nbsp;?&nbsp;"下一页&nbsp;&nbsp;"&nbsp;:&nbsp;"&lt;a&nbsp;href=\""&nbsp;.&nbsp;str_replace("{page}",$CurrentPage&nbsp;+&nbsp;1,$url)&nbsp;.&nbsp;"\"&gt;下一页&lt;/a&gt;&nbsp;&nbsp;";<br />&nbsp; &nbsp; &nbsp; &nbsp; $PageStr&nbsp;.=&nbsp;$CurrentPage&nbsp;&gt;=&nbsp;$pagecount&nbsp;?&nbsp;"末页&nbsp;&nbsp;"&nbsp;:&nbsp;"&lt;a&nbsp;href=\""&nbsp;.&nbsp;str_replace("{page}",$pagecount,$url)&nbsp;.&nbsp;"\"&gt;末页&lt;/a&gt;&nbsp;&nbsp;";<br />&nbsp; &nbsp; &nbsp; &nbsp; $PageStr&nbsp;.=&nbsp;"转向第&lt;select&nbsp;onchange=\"window.location='$url'.replace('\{page\}',this.value);\"&gt;";<br />&nbsp; &nbsp; &nbsp; &nbsp; $i&nbsp;=&nbsp;1;<br />&nbsp; &nbsp; &nbsp; &nbsp; while($i&nbsp;&lt;=&nbsp;$pagecount){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if($CurrentPage&nbsp;==&nbsp;$i){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $PageStr&nbsp;.=&nbsp;"&lt;option&nbsp;selected&nbsp;value=\""&nbsp;.&nbsp;$i&nbsp;.&nbsp;"\"&gt;"&nbsp;.&nbsp;$i&nbsp;.&nbsp;"&lt;/option&gt;";<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }else{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $PageStr&nbsp;.=&nbsp;"&lt;option&nbsp;value=\""&nbsp;.&nbsp;$i&nbsp;.&nbsp;"\"&gt;"&nbsp;.&nbsp;$i&nbsp;.&nbsp;"&lt;/option&gt;";<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $i++;<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; return&nbsp;$PageStr&nbsp;.&nbsp;"&lt;/select&gt;页\n&lt;/div&gt;";<br />}&nbsp;]]>
      </summary>
      <category term="" label="其他" scheme="http://dev.mo.cn/cat_diary_18.html" />
   </entry>
   <entry>
      <title type="html">手机丢了</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_268.html" />
      <updated>2009-12-3 0:36:46</updated>
      <published>2009-12-3 0:36:46</published>
      <id>http://dev.mo.cn/article_268.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;哎，真是的，刚想攒俩钱，手机又丢了。<br />&nbsp;&nbsp;早上骑自行车上班，手机放在上衣兜里，不小心漏了出来，听见手机掉下来的声音了，但是没有想到是手机，直到一个人跟我说我手机掉了，才意识到那是手机掉地上的声音。回去找，自然不见了，也就十几秒的时间。<br />&nbsp;&nbsp;第一次丢手机，有点小郁闷，不过郁闷几分钟就好了，丢了的东西即使再郁闷也找不回来了，因此下午花500块钱去买了个山寨手机用着了，明后天到货。<br />&nbsp;&nbsp;以后得注意点了，很少丢东西的我竟然把手机搞丢了。]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">网站换服务器了</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_267.html" />
      <updated>2009-11-23 22:35:59</updated>
      <published>2009-11-23 22:35:59</published>
      <id>http://dev.mo.cn/article_267.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;奶奶的原来服务器不知道什么时候装上了非法信息检测系统，竟然从我页面检测出Liu&nbsp;He&nbsp;Cai非法信息，奶奶的咋检测出来的。。。我看了好几遍都没看见有个Liu&nbsp;He&nbsp;Cai。。<br />&nbsp;&nbsp;&nbsp;晚上把服务器切换到另外一台了，速度不错，赞下85，哈哈]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">艾恩AJAX类，支持完整调用，表单提交和简洁调用</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_266.html" />
      <updated>2009-11-19 11:26:19</updated>
      <published>2009-11-19 11:26:19</published>
      <id>http://dev.mo.cn/article_266.html</id>
      <summary type="html">
      <![CDATA[演示地址：<a href="http://dev.mo.cn/aiencode/ajax/" target="new">http://dev.mo.cn/aiencode/ajax/</a><br />下载地址：<a href="http://dev.mo.cn/source_194.html" target="new">http://dev.mo.cn/source_194.html</a><br /><br />Ajax类库使用说明<br />完整调用统一调用入口：Ajax(setting);&nbsp;关于参数setting,请详细参考下面的说明。<br /><br />简洁调用入口：Ajax.get(url,data,fn);&nbsp;以及&nbsp;Ajax.post(url,data,fn);<br /><br />Ajax的配置:<br />var&nbsp;settings&nbsp;=&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;asc:&nbsp;true,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//true-异步传输；false-同步传输&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;form:&nbsp;formObj,&nbsp;&nbsp;&nbsp;&nbsp;//表单对象,如果设置本项，则会用ajax提交表单，忽略设置的method,url和data属性&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;url:&nbsp;"",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//若不设置form属性，则本项为必选值<br />&nbsp;&nbsp;&nbsp;&nbsp;dataType:&nbsp;"text",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//可取值text,xml,json<br />&nbsp;&nbsp;&nbsp;&nbsp;method:&nbsp;"get",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//可取post,get&nbsp;不区分大小写。设置form属性后，本项会被忽略。&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;data:&nbsp;"",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//具体格式请看示例程序。设置form属性后，本项会被忽略。<br />&nbsp;&nbsp;&nbsp;&nbsp;timeout:&nbsp;10000,&nbsp;&nbsp;&nbsp;&nbsp;//设置超时时间，默认为10秒（即10000毫秒）<br />&nbsp;&nbsp;&nbsp;&nbsp;succeed:&nbsp;function(a,b,c){return&nbsp;true},&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;error:&nbsp;function(a,b,c){return&nbsp;true},&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ontimeout:&nbsp;function(a,b,c){return&nbsp;true}&nbsp;<br />};]]>
      </summary>
      <category term="" label="AJAX" scheme="http://dev.mo.cn/cat_diary_2.html" />
   </entry>
   <entry>
      <title type="html">还没感觉到秋天，冬天说到就到了，好冷啊</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_265.html" />
      <updated>2009-11-16 20:04:01</updated>
      <published>2009-11-16 20:04:01</published>
      <id>http://dev.mo.cn/article_265.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;冷啊冷啊，晚上去买了件外套穿了，来杭州就带了个人来，其他的啥也没带，悲剧了<br />&nbsp;&nbsp;&nbsp;秋天就像被“友情忽略”了一样，还没露个面的冬天就来了。其他地方都下起了大雪，杭州却一直在下雨，下雨的感觉真不好，感觉身上湿湿的，特不舒服。<br />&nbsp;&nbsp;&nbsp;不知道这雨会下到什么时候，会不会下雪，估计现在下雪也不好，下了就会化了，弄的到处是水。。。<br />&nbsp;&nbsp;&nbsp;冷啊。。。]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">XMLHTTP和ServerXMLHTTP超时的判断</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_264.html" />
      <updated>2009-11-13 9:04:08</updated>
      <published>2009-11-13 9:04:08</published>
      <id>http://dev.mo.cn/article_264.html</id>
      <summary type="html">
      <![CDATA[XMLHTTP我想大家都知道是用过，很熟悉吧，&nbsp;<br />一些小偷程序都用他，用他来抓个远程网页什么的很方便。&nbsp;<br /><br />但是！！！&nbsp;<br /><br />很少有人知道XMLHTTP是用于客户端的，&nbsp;<br /><br />不知道是什么时候起，流行网络小偷程序，而这个XMLHTTP也开始被很多ASP爱好者所认识。&nbsp;<br /><br />但是几乎所有人都一至的认为XMLHTTP是ASP中唯一获取远程连接的方案。&nbsp;<br /><br />于是大家都用它，弄到最后，流量一大IIS就会罢工，最轻的也是打不开ASP页面，但是HTML页面可以打开，于是就查呀查呀，却总也查不到原因。&nbsp;<br /><br />其实问题就在XMLHTTP上面，&nbsp;<br /><br />XMLHTTP不是用于服务端的，XMLHTTP只适用于客户端，当然服务端也可以调用这个组件，但是这个组件是一个很危险的组件。他会在连接网络失败的情况下导致IIS罢工，流量小的时候没什么反应，流量一大，必然会出问题。&nbsp;<br /><br />与XMLHTTP相比，ServerXMLHTTP稍好一些，但是同样，这个家伙也不是什么好东西，弄不好的话，也会和XMLHTTP一样。&nbsp;<br /><br />但是ServerXMLHTTP有一个SetTimeOuts方法，通过SetTimeOuts方法可以设置超时，一旦网络连接超时，就断开连接，如果你不设置超时，那你的IIS很有可能就此罢工了。&nbsp;<br /><br />具体的应用，我给出一段代码大家看看。&nbsp;<br /><br /><br />Set&nbsp;objXml&nbsp;=Server.CreateObject("MSXML2.ServerXMLHTTP")&nbsp;<br />objXml.SetTimeOuts&nbsp;10000,&nbsp;10000,&nbsp;15000,&nbsp;15000&nbsp;<br /><br />第一个数值：解析DNS名字的超时时间10秒&nbsp;<br />第二个数值：建立Winsock连接的超时时间10秒&nbsp;<br />第三个数值：发送数据的超时时间15秒&nbsp;<br />第四个数值：接收response的超时时间15秒&nbsp;<br /><br /><br />这个问题也曾一度困扰着我，后来也是遍历资料才找到答案的。&nbsp;<br /><br />希望大家引以为戒，不要小看他的杀伤力噢，弄不好你的IIS就会罢工的，&nbsp;<br /><br />再有，有条件的话，建议大家学学PHP吧，我也在学习中，买了书看了一半了，&nbsp;<br /><br />不过有很多地方不太容易理解，ASP现在越来越觉得不够用了，.Net那东西看起来好像比PHP还要麻烦。&nbsp;<br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">艾恩ASP无组件上传最新更新说明</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_263.html" />
      <updated>2009-11-1 15:50:10</updated>
      <published>2009-11-1 15:50:10</published>
      <id>http://dev.mo.cn/article_263.html</id>
      <summary type="html">
      <![CDATA[利用周末的时间，对上传组件进行了比较大的更新，优化了上传代码，尽可能的降低上传的内存消耗同时提高上传的速度。具体修改及增加的功能如下:<br /><br />1.文件类改用jscript<br /><br />2.文件类增加几个属性<br />&nbsp;&nbsp;&nbsp;&nbsp;属性extend来保存文件的后缀<br />&nbsp;&nbsp;&nbsp;&nbsp;属性UserSetName来保存用户自定义的文件名<br />&nbsp;&nbsp;&nbsp;&nbsp;属性FormName来保存上传文件对应的表单名<br />&nbsp;&nbsp;&nbsp;&nbsp;属性Path来保存文件在服务器上的物理路径<br />&nbsp;&nbsp;&nbsp;&nbsp;属性ContentType来保存文件的类型<br /><br />3.修改文件类SaveToFile方法<br />&nbsp;&nbsp;&nbsp;&nbsp;本方法有3个参数SaveToFile(Path,Option,OverWrite)<br />&nbsp;&nbsp;&nbsp;&nbsp;本方法的所有参数可选，但是要求至少传递一个参数，即文件的保存路径-Path。<br />&nbsp;&nbsp;&nbsp;&nbsp;参数Option：文件的保存方式，默认为0，使用类自动生成的文件名；Option为-1并且UserSetName不为空时使用用户自定义的文件名保存；Option为1时使用原文件名保存<br />&nbsp;&nbsp;&nbsp;&nbsp;参数OverWrite：是否覆盖同名文件，默认为true--覆盖同名文件；若为false，程序会在同名文件后面加数字再进行保存，例如生成类似test(0).rar的文件名字<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;本方法抛弃保存文件时用全局stream的Copy方法读取文件内容以保存文件的方法，使用recordset配合stream直接保存<br /><br />4.文件类增加GetFilePath方法，对象内部方法，不能单独在对象外部使用<br /><br />5.文件类增加CreateFolder方法，自动创建不存在文件夹<br /><br />6.上传类GetData修改了很大部分代码，主要是修改了循环读取文件的方法，降低内存消耗<br /><br />7.上传类增加了只写属性Mode,默认为0--分段读取上传数据；如果设置为1--直接读取全部数据。建议时候用默认值，经过测试，分段读取比直接读取效率会提高几倍或者几十倍。<br /><br />8.增加只读属性LostTime，获取上传消耗的时间<br /><br />整个新版本的改动基本就是这些了，所有示例已经同步更新。<br /><a href="http://dev.mo.cn/source_143.html" target="new">艾恩ASP无组件上传类(An-Upload)V9.11.01(最新更新)</a><br /><a href="http://dev.mo.cn/source_190.html" target="new">艾恩Ajax无刷新文件上传最新示例集2009-11-01&nbsp;</a><br /><a href="http://dev.mo.cn/source_175.html" target="new">艾恩Ajax无刷新文件上传(带进度条,无组件)&nbsp;</a><br /><a href="http://dev.mo.cn/source_188.html" target="new">ASP无刷新上传高级上传实例（11.1日最新更新）</a><br /><a href="http://dev.mo.cn/source_192.html" target="new">艾恩Ajax无刷新上传(ASP)最简单的调用方法</a>]]>
      </summary>
      <category term="" label="无组件上传" scheme="http://dev.mo.cn/cat_diary_20.html" />
   </entry>
   <entry>
      <title type="html">最新封装艾恩Ajax无刷新上传最简单的调用方法</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_262.html" />
      <updated>2009-10-25 16:12:34</updated>
      <published>2009-10-25 16:12:34</published>
      <id>http://dev.mo.cn/article_262.html</id>
      <summary type="html">
      <![CDATA[上传页面只需要一个js引用和js函数的调用，简单方便，不影响网页原有布局。<a onfocus="this.blur()" href="http://dev.mo.cn/images/1.gif" target=new><img src="http://dev.mo.cn/images/1.gif" border="0" alt="´ڴ" onload="javascript:if(this.width>560)this.width=560" /></a><a href="http://dev.mo.cn/source_192.html" target="new">下载地址</a><br /><br />调用说明:&nbsp;<br />1.首先引用js文件<br />&lt;script&nbsp;type="text/javascript"&nbsp;src="AienUpload/init.js"&gt;&lt;/script&gt;<br />2.将函数调用(<span style="color:#FF0000;">showUpload(boxCtrl,inputCtrl,upPath,maxCount,fn);</span>)绑定到HTMl控件事件，例如<br />&lt;input&nbsp;id="files"&nbsp;name="files"&nbsp;type="text"&nbsp;size="60"&nbsp;/&gt;<br />&lt;input&nbsp;type="button"&nbsp;value="上传文件"&nbsp;onclick="showUpload(null,'files','',999,null);"&nbsp;/&gt;<br />点击“上传文件”按钮后会弹出上传框，点击上传框的“上传”按钮后会将上传文件的文件名字以;分割，赋值到前一个文本框(inputCtrl)<br /><br /><span style="color:#FF0000;">showUpload(boxCtrl,inputCtrl,upPath,maxCount,fn);</span><br />参数说明:<br />boxCtrl:上传框绑定的控件的ID；若为null，则上传框显示在页面正中间<br />inputCtrl:上传控件绑定的控件，一般为为本框的ID，必填<br />upPath:文件上传目录，本目录是相对于upload.asp文件的;默认为upload;目录不存在则自动创建；<br />maxCount:最大允许的上传数量；不设置为不限制上传数量<br />fn:上传过程的回调函数,传递的参数为文件信息数组;<span style="color:#FF0000;">设置本参数后inputCtrl参数将失效</span><br /><br />举例说明:<br />showUpload(null,'files','',999,null);<br />文本框显示在中间,返回值显示在ID为files的文本框里面，上传目录为默认值，最大允许上传999个，就是不限制了，没有定义回调函数；<br />showUpload(this,'files','upfiles',2,function(obj){alert(obj.length);});&nbsp;把这句替换上面的再测试下就看到效果了&nbsp;<br /><br /><span style="color:#FF0000;">注意:<br />1、index.html和upload.asp必须在同一目录；<br />2、upload.asp和AienUpload目录的相对位置不能改变;<br />3、AienUpload不能重命名</span>]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">小提示窗口(纯css)</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_261.html" />
      <updated>2009-10-18 12:14:59</updated>
      <published>2009-10-18 12:14:59</published>
      <id>http://dev.mo.cn/article_261.html</id>
      <summary type="html">
      <![CDATA[&lt;!DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN"&nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;<br />&lt;html&nbsp;xmlns="http://www.w3.org/1999/xhtml"&gt;<br />&lt;head&gt;<br />&lt;title&gt;小提示窗口&lt;/title&gt;<br />&lt;meta&nbsp;http-equiv="Content-Type"&nbsp;content="text/html;&nbsp;charset=gb2312"&nbsp;/&gt;<br />&lt;style&gt;<br />body{<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; font-size:12px;<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />}<br />a.tip{<br />&nbsp; &nbsp; &nbsp; &nbsp; color:red;<br />&nbsp; &nbsp; &nbsp; &nbsp; text-decoration:none;<br />&nbsp; &nbsp; &nbsp; &nbsp; position:relative;<br />}<br />a.tip&nbsp;span&nbsp;{display:none;}<br /><br /><br />a.tip:hover&nbsp;{cursor:hand;}<br />a.tip:hover&nbsp;.popbox&nbsp;{<br />&nbsp; &nbsp; &nbsp; &nbsp; display:block;&nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; position:absolute;&nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; top:15px;<br />&nbsp; &nbsp; &nbsp; &nbsp; left:-30px;<br />&nbsp; &nbsp; &nbsp; &nbsp; width:100px;&nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; background-color:#424242;&nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; color:#fff;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; padding:10px;<br />}<br /><br />&lt;/style&gt;<br />&lt;/head&gt;<br /><br />&lt;body&gt;<br /><br />&lt;h1&gt;CSS&lt;/h1&gt;<br /><br />&lt;/p&gt;目前推荐遵循的是W3C于1998年5月12日推荐<br />&lt;a&nbsp;href="#"&nbsp;class="tip"&gt;CSS&lt;span&nbsp;class="popbox"&gt;Cascading&nbsp;Style&nbsp;Sheets&nbsp;层叠样式表&lt;/span&gt;&lt;/a&gt;<br />。&lt;a&nbsp;href="#"&nbsp;class="tip"&gt;W3C&lt;span&nbsp;class="popbox"&gt;World&nbsp;Wide&nbsp;Web&nbsp;Consortium&nbsp;万维网联盟&lt;/span&gt;&lt;/a&gt;创建CSS标准的目的是以CSS取代&lt;a&nbsp;href="#"&nbsp;class="tip"&gt;HTML&lt;span&nbsp;class="popbox"&gt;Hyper&nbsp;Text&nbsp;Mark-up&nbsp;Language&nbsp;超文本标记语言&lt;/span&gt;&lt;/a&gt;表格式布局、帧和其他表现的语言。纯CSS布局与结构式&lt;a&nbsp;href="#"&nbsp;class="tip"&gt;XHTML&lt;span&nbsp;class="popbox"&gt;The&nbsp;Extensible&nbsp;HyperText&nbsp;Markup&nbsp;Language&nbsp;可扩展超文本标记语言&lt;/span&gt;&lt;/a&gt;相结合能帮助设计师分离外观与结构，使站点的访问及维护更加容易。&lt;/p&gt;<br /><br />&lt;/body&gt;<br />&lt;/html&gt;<br />]]>
      </summary>
      <category term="" label="HTML/CSS" scheme="http://dev.mo.cn/cat_diary_8.html" />
   </entry>
   <entry>
      <title type="html">企业网站中英文对照</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_260.html" />
      <updated>2009-10-18 11:56:43</updated>
      <published>2009-10-18 11:56:43</published>
      <id>http://dev.mo.cn/article_260.html</id>
      <summary type="html">
      <![CDATA[公司简介：Company&nbsp;brief<br /><br />产品展示&nbsp;Product<br /><br />企业荣誉&nbsp;Enterprise&nbsp;honor<br /><br />合作伙伴&nbsp;Cooperation&nbsp;partner<br /><br />质量认证&nbsp;Quality&nbsp;certificate<br /><br />企业文化&nbsp;Enterprise&nbsp;Culture<br /><br />成长历程&nbsp;Development&nbsp;history<br /><br />经营理念&nbsp;Management&nbsp;ideas<br /><br />经营理念&nbsp;Operation&nbsp;philosophy<br /><br />服务理念&nbsp;Service&nbsp;philosophy<br /><br />营销理念&nbsp;Marketing&nbsp;philosophy<br /><br />人才思略Talent&nbsp;policy<br /><br />质量方针&nbsp;Quality&nbsp;policy<br /><br />以质求生存，以量求发展Quality&nbsp;for&nbsp;survival,&nbsp;and&nbsp;quantity&nbsp;for&nbsp;growth<br /><br />企业理念&nbsp;Company&nbsp;philosophy<br /><br />企业宗旨&nbsp;Company&nbsp;tenet<br /><br />销售网络&nbsp;Selling&nbsp;network<br /><br />营销网络&nbsp;Sales&nbsp;Network<br /><br />企业荣誉&nbsp;Enterprise&nbsp;honor/Glories<br /><br />公司设备&nbsp;Equipment<br /><br />企业文化&nbsp;Enterprise&nbsp;Culture<br /><br />资质认证&nbsp;Quality&nbsp;certification<br /><br />企业规模&nbsp;Scale<br /><br />组织机构&nbsp;Organization<br /><br />合作加盟&nbsp;Join&nbsp;in&nbsp;Cooperation<br /><br />技术力量&nbsp;Technology<br /><br />经理致辞&nbsp;Manager`s&nbsp;oration<br /><br />发展历程&nbsp;Development&nbsp;history<br /><br />工程案例&nbsp;Engineering&nbsp;Projects<br /><br />业务范围&nbsp;Business&nbsp;Scope<br /><br />分支机构&nbsp;Branches<br /><br />供求信息&nbsp;Supply&nbsp;&&nbsp;Demand<br /><br />经营理念&nbsp;Operation&nbsp;Principle<br /><br />产品销售&nbsp;SALES&nbsp;Sales<br /><br />联系我们&nbsp;Contact&nbsp;Us<br /><br />信息发布&nbsp;Information<br /><br />返回首页&nbsp;Back&nbsp;Homepage<br /><br />在线订单&nbsp;On-line&nbsp;Order<br /><br />分类浏览&nbsp;Browse&nbsp;by&nbsp;category<br /><br />电子商务&nbsp;E-Business<br /><br />公司实力&nbsp;Strength<br /><br />版权所有&nbsp;Copy&nbsp;right<br /><br />友情连结&nbsp;Hot&nbsp;link<br /><br />应用领域&nbsp;Application&nbsp;Fields<br /><br />人力资源&nbsp;Human&nbsp;Resource&nbsp;HR<br /><br />领导致辞&nbsp;Leader`s&nbsp;oration<br /><br />企业资质&nbsp;Enterprise&nbsp;qualification<br /><br />行业新闻&nbsp;Trade&nbsp;news<br /><br />行业动态&nbsp;Trends<br /><br />客户留言&nbsp;Customer&nbsp;Message<br /><br />客户服务&nbsp;Customer&nbsp;Service<br /><br />新闻动态&nbsp;News&nbsp;&&nbsp;Trends<br /><br />公司名称&nbsp;Company&nbsp;Name<br /><br />销售热线&nbsp;Sales&nbsp;Hot-line<br /><br />联系人&nbsp;Contact&nbsp;Person<br /><br />您的要求&nbsp;Your&nbsp;requirements<br /><br />建设中&nbsp;In&nbsp;construction<br /><br />下载中心&nbsp;Download&nbsp;center<br /><br />会员登陆&nbsp;Member&nbsp;Entrance<br /><br />意见反馈&nbsp;Feedback<br /><br />常见问题&nbsp;FAQ<br /><br />中心概况&nbsp;General&nbsp;Profile<br /><br />教育培训&nbsp;Education&nbsp;&&nbsp;Training<br /><br />产品展厅&nbsp;Product&nbsp;gallery<br /><br />超越自我，追求卓越&nbsp;Surpass&nbsp;selfhood,pursue&nbsp;excellence<br /><br />建议使用1024x768分辨率浏览&nbsp;Resolution&nbsp;of&nbsp;1024*768&nbsp;or&nbsp;higher&nbsp;is&nbsp;recommended.<br /><br />工具&nbsp;Tools<br /><br />资源&nbsp;Resources<br /><br />&nbsp;<br /><br />常用中英文对照表：<br /><br />证书&nbsp;Certificate<br /><br />地址&nbsp;Add<br /><br />邮编&nbsp;CODE&nbsp;Zipcode<br /><br />电话&nbsp;Tel<br /><br />分公司&nbsp;Branch<br /><br />推荐产品&nbsp;Recommend&nbsp;products<br /><br />Previous&nbsp;Page&nbsp;上一页<br /><br />Category&nbsp;分类<br /><br />网站导航&nbsp;site&nbsp;map<br /><br />诚征代理&nbsp;Agents&nbsp;wanted<br /><br />工程实例&nbsp;Project&nbsp;cases<br /><br />分类&nbsp;范畴&nbsp;Categories<br /><br />产品导航Products&nbsp;Guide<br /><br />招聘：Recruitment<br /><br />详细描述&nbsp;Detail<br /><br />传真&nbsp;Fax<br /><br />企业新闻&nbsp;Enterprise&nbsp;news<br /><br />行业新闻&nbsp;Field&nbsp;news<br /><br />市场行情&nbsp;Market<br /><br />流行时尚&nbsp;Popular&nbsp;fashion<br /><br />其他新闻&nbsp;Other&nbsp;news<br /><br />产品名称&nbsp;Product&nbsp;Name<br /><br />产品说明&nbsp;Description<br /><br />价格&nbsp;Price<br /><br />品牌&nbsp;Brand<br /><br />规格&nbsp;Specification<br /><br />尺寸&nbsp;Size<br /><br />生产厂家&nbsp;Manufacturer<br /><br />型号&nbsp;Model<br /><br />产品标号&nbsp;Item&nbsp;No.<br /><br />技术指标&nbsp;Technique&nbsp;Data<br /><br />产品描述&nbsp;Description<br /><br />产地&nbsp;Production&nbsp;Place<br /><br />销售信息&nbsp;Sales&nbsp;Information<br /><br />用途&nbsp;Application<br /><br />论坛&nbsp;Forum<br /><br />在线订购&nbsp;On-line&nbsp;order<br /><br />招商&nbsp;Enterprise-establishing<br /><br />招标&nbsp;Bid&nbsp;inviting<br /><br />综述&nbsp;General<br /><br />业绩&nbsp;Achievements<br /><br />招聘&nbsp;Join&nbsp;Us<br /><br />求贤纳士&nbsp;Join&nbsp;Us<br /><br />大事&nbsp;Great&nbsp;Event<br /><br />动态&nbsp;Trends<br /><br />服务&nbsp;Service<br /><br />投资&nbsp;Investment<br /><br />行业&nbsp;Industry<br /><br />规划&nbsp;Programming<br /><br />环境&nbsp;Environment<br /><br />发送&nbsp;Delivery<br /><br />提交&nbsp;Submit<br /><br />重写&nbsp;Reset<br /><br />登录&nbsp;Login<br /><br />注册&nbsp;Register<br /><br />全程无忧Worriless&nbsp;Whole-process<br /><br />产品铺贴指导Guide&nbsp;for&nbsp;Paving&nbsp;&&nbsp;Sticking&nbsp;of&nbsp;Products<br /><br />保养常识&nbsp;Maintenance&nbsp;Common&nbsp;Sense<br /><br />产品介绍&nbsp;Product&nbsp;Introduction<br /><br />工程目录&nbsp;Project&nbsp;Content<br /><br />企业信息&nbsp;Enterprise&nbsp;Information<br /><br />企业理念&nbsp;Company&nbsp;philosophy<br /><br />常用中英文对照表：<br /><br />中国企业网技术支持&nbsp;Powered&nbsp;by&nbsp;ce.net.cn<br /><br />社区&nbsp;Community<br /><br />业务介绍&nbsp;Business&nbsp;introduction<br /><br />在线调查&nbsp;Online&nbsp;inquiry&nbsp;Inquiry<br /><br />游乐园&nbsp;amusement&nbsp;park<br /><br />在线交流&nbsp;Online&nbsp;communication<br /><br />专题报道&nbsp;Special&nbsp;report<br /><br />补丁：patch&nbsp;Previous<br /><br />上一页&nbsp;下一页&nbsp;Next&nbsp;Pages&nbsp;(7):&nbsp;?&nbsp;1&nbsp;[2]&nbsp;3&nbsp;4&nbsp;5&nbsp;?&nbsp;...&nbsp;Last&nbsp;?<br /><br />给我们打电话或发邮件--Call&nbsp;or&nbsp;Write&nbsp;to&nbsp;Us&nbsp;Legal&nbsp;Information<br /><br />法律声明<br /><br />Forgotten&nbsp;your&nbsp;password?&nbsp;忘记了你的密码？<br /><br />设计与技术支持：Designed&nbsp;and&nbsp;supported&nbsp;by<br /><br />技术支持：Technical&nbsp;Support<br /><br />网站地图-Site&nbsp;Map<br /><br />Service&nbsp;&&nbsp;Support<br /><br />服务和支持&nbsp;如何购买<br /><br />How&nbsp;To&nbsp;Buy<br /><br />服务和维护合同<br /><br />工程实例：Engineering&nbsp;Projects<br /><br />实例：Projects<br /><br />Congratulations,&nbsp;you&nbsp;can&nbsp;now&nbsp;access&nbsp;your&nbsp;personalized&nbsp;page&nbsp;from&nbsp;any&nbsp;computer&nbsp;using&nbsp;your&nbsp;email&nbsp;address&nbsp;and&nbsp;password.&nbsp;An&nbsp;email&nbsp;has&nbsp;been&nbsp;sent&nbsp;to&nbsp;you&nbsp;with&nbsp;your&nbsp;information.&nbsp;祝贺,你现在可以从任何一页进入你的个人电脑使用的电子邮件地址和你的密码.&nbsp;已发送电子邮件给你了,你的资料.<br /><br />User&nbsp;Profile&nbsp;用户信息<br /><br />User&nbsp;register&nbsp;用户注册<br /><br />Username:&nbsp;*&nbsp;Must&nbsp;between&nbsp;2&nbsp;to&nbsp;24&nbsp;chars&nbsp;用户名&nbsp;必须是2到24个字节<br /><br />Password:&nbsp;*&nbsp;Must&nbsp;between&nbsp;6&nbsp;to&nbsp;16&nbsp;chars<br /><br />密码&nbsp;Confirm&nbsp;Password<br /><br />重复密码:&nbsp;*Must&nbsp;match&nbsp;the&nbsp;password&nbsp;above<br /><br />Gender&nbsp;性别<br /><br />Unkown&nbsp;不知道<br /><br />Male男的<br /><br />Female&nbsp;女的<br /><br />Email:&nbsp;Hide&nbsp;my&nbsp;Email&nbsp;address&nbsp;:<br /><br />Security&nbsp;Code:&nbsp;验证码<br /><br />Collapse&nbsp;all&nbsp;收缩所有<br /><br />Expand&nbsp;all&nbsp;展开所有<br /><br />Sign&nbsp;in&nbsp;登入<br /><br />I&nbsp;lost&nbsp;my&nbsp;password&nbsp;我的密码丢失了<br /><br />Existing&nbsp;User&nbsp;已经存在的用于(已经注册的用的登录）<br /><br />Sign&nbsp;up&nbsp;now&nbsp;现在就注册<br /><br />checking...&nbsp;正在检验<br /><br />Save&nbsp;my&nbsp;information&nbsp;保存我的信息<br /><br />第一辑<br /><br />About&nbsp;us&nbsp;关于我们<br /><br />Products&nbsp;产品/产品展示<br /><br />Services&nbsp;服务/售后服务/客户服务<br /><br />Support&nbsp;技术支持<br /><br />Company&nbsp;公司简介<br /><br />News&nbsp;新闻动态/公司新闻<br /><br />Latest&nbsp;News&nbsp;最近新闻<br /><br />Privacy&nbsp;Policy&nbsp;隐私声明<br /><br />Legal&nbsp;Notices&nbsp;法律条款<br /><br />Contact&nbsp;us&nbsp;联系我们<br /><br />Home&nbsp;主页/首页<br /><br />Back&nbsp;返回<br /><br />Next&nbsp;下一页/后一页<br /><br />Prev/Previous&nbsp;上一页/前一页<br /><br />Pages&nbsp;页<br /><br />More&nbsp;更多<br /><br />Detail&nbsp;详细<br /><br />Help/Help&nbsp;Center&nbsp;帮助/帮助中心<br /><br />Email&nbsp;邮箱<br /><br />Tel&nbsp;电话<br /><br />PostCode&nbsp;邮编/邮政编码<br /><br />Search&nbsp;搜索<br /><br />Advanced&nbsp;search&nbsp;高级搜索<br /><br />Close&nbsp;关闭/关闭窗口<br /><br />Downloads&nbsp;下载/下载中心<br /><br />FAQ&nbsp;问答中心<br /><br />Photo&nbsp;Gallery&nbsp;相册<br /><br />View&nbsp;查看<br /><br />Submit&nbsp;提交<br /><br />Reg&nbsp;注册<br /><br />Login&nbsp;登陆<br /><br />Sign&nbsp;in&nbsp;登陆<br /><br />Sign&nbsp;out&nbsp;退出<br /><br />Username&nbsp;用户名<br /><br />Password&nbsp;密码<br /><br />New&nbsp;features&nbsp;新特性<br /><br />Settings&nbsp;设置<br /><br />Language&nbsp;语言<br /><br />Chinese&nbsp;中文版<br /><br />English&nbsp;英文版<br /><br />Enter&nbsp;进入<br /><br />Skip&nbsp;跳过<br /><br />Cancel&nbsp;取消<br /><br />save&nbsp;保存<br /><br />Delete&nbsp;删除<br /><br />Confirm&nbsp;确定<br /><br />save&nbsp;change&nbsp;保存改变<br /><br />send&nbsp;发送<br /><br />OK&nbsp;确定<br /><br />Partners&nbsp;合作伙伴<br /><br />Solutions&nbsp;产品<br /><br />Success&nbsp;Stories&nbsp;成功案例<br /><br />Company&nbsp;Everts&nbsp;公司动态<br /><br />Press&nbsp;Release&nbsp;新闻发布<br /><br />Press&nbsp;Room&nbsp;新闻中心<br /><br />Version/Ver&nbsp;版本<br /><br />Issue&nbsp;出版物<br /><br />Magazine&nbsp;杂志/电子期刊/网络杂志<br /><br />Projects&nbsp;工程项目<br /><br />Photography&nbsp;影集展示/图片展示<br /><br />Preview&nbsp;预览<br /><br />Cart&nbsp;购物车<br /><br />Order&nbsp;订购<br /><br />BBS&nbsp;论坛/公告板<br /><br />Forums&nbsp;论坛<br /><br />Club&nbsp;俱乐部<br /><br />site&nbsp;map&nbsp;站点地图<br /><br />web&nbsp;hosting&nbsp;虚拟主机<br /><br />clients&nbsp;客户/案例<br /><br />description&nbsp;描述<br /><br />technology&nbsp;技术<br /><br />image&nbsp;图片<br /><br />Links&nbsp;友情链接<br /><br />FeedBack&nbsp;反馈<br /><br />Keyword&nbsp;关键词<br /><br />shop&nbsp;网上商店<br /><br />register&nbsp;注册<br /><br />update&nbsp;升级<br /><br />prices&nbsp;价格<br /><br />title&nbsp;标题/主题<br /><br />content&nbsp;内容<br /><br />more&nbsp;info&nbsp;更多信息<br /><br />Guides&nbsp;向导/指引<br /><br />URLs&nbsp;链接<br /><br />photo&nbsp;album&nbsp;相册<br /><br />case&nbsp;案例<br /><br />casus&nbsp;案例<br /><br />第二辑<br /><br />网站导航&nbsp;SITE&nbsp;MAP&nbsp;|&nbsp;Site&nbsp;Map<br /><br />公司简介&nbsp;PROFILE&nbsp;or&nbsp;COMPANY&nbsp;|&nbsp;Profile&nbsp;or&nbsp;Company<br /><br />公司设备&nbsp;EQUIPMENT&nbsp;|&nbsp;Equipment<br /><br />公司荣誉&nbsp;GLORIES&nbsp;|&nbsp;Glories<br /><br />企业文化&nbsp;CULTURE&nbsp;|&nbsp;Culture<br /><br />产品展示&nbsp;PRODUCT&nbsp;|&nbsp;Product<br /><br />资质认证&nbsp;Quality&nbsp;Certification<br /><br />企业规模&nbsp;SCALE&nbsp;|&nbsp;Scale<br /><br />营销网络&nbsp;Sales&nbsp;Network<br /><br />组织机构&nbsp;ORGANIZATION&nbsp;|&nbsp;Organization<br /><br />合作加盟&nbsp;Join&nbsp;in&nbsp;Cooperation<br /><br />技术力量&nbsp;TECHNOLOGY&nbsp;|&nbsp;Technology<br /><br />经理致辞&nbsp;Manager`s&nbsp;oration<br /><br />发展历程&nbsp;Development&nbsp;history<br /><br />工程案例&nbsp;Engineering&nbsp;Projects<br /><br />业务范围&nbsp;Business&nbsp;Scope<br /><br />分支机构&nbsp;Branches<br /><br />供求信息&nbsp;Supply&nbsp;&&nbsp;Demand<br /><br />经营理念&nbsp;Operation&nbsp;Principle<br /><br />产品销售&nbsp;Sales<br /><br />联系我们&nbsp;CONTACT&nbsp;US<br /><br />信息发布&nbsp;INFORMATION&nbsp;Information<br /><br />返回首页&nbsp;HOMEPAGE&nbsp;|&nbsp;Homepage<br /><br />产品定购&nbsp;ORDER&nbsp;|&nbsp;order<br /><br />分类浏览&nbsp;Browse&nbsp;by&nbsp;category<br /><br />电子商务&nbsp;E-Business<br /><br />公司实力&nbsp;STRENGTH&nbsp;Strength<br /><br />版权所有&nbsp;Copy&nbsp;right<br /><br />友情连结&nbsp;Hot&nbsp;link<br /><br />应用领域&nbsp;Application&nbsp;Fields<br /><br />人力资源&nbsp;Human&nbsp;Resource&nbsp;HR<br /><br />领导致辞&nbsp;Leader`s&nbsp;oration<br /><br />企业资质&nbsp;Enterprise&nbsp;qualification<br /><br />行业新闻&nbsp;Trade&nbsp;news<br /><br />行业动态&nbsp;Trends<br /><br />客户留言&nbsp;Customer&nbsp;Message<br /><br />客户服务&nbsp;Customer&nbsp;Service<br /><br />新闻动态&nbsp;News&nbsp;&&nbsp;Trends<br /><br />公司名称&nbsp;Company&nbsp;Name<br /><br />销售热线&nbsp;Sales&nbsp;Hot-line<br /><br />联系人&nbsp;Contact&nbsp;Person<br /><br />您的要求&nbsp;Your&nbsp;requirements<br /><br />建设中&nbsp;In&nbsp;construction<br /><br />证书&nbsp;CERTIFICATE&nbsp;Certificate<br /><br />地址&nbsp;ADD&nbsp;|&nbsp;Add<br /><br />邮编&nbsp;POSTAL&nbsp;CODE&nbsp;Zipcode<br /><br />电话&nbsp;TEL&nbsp;|&nbsp;Tel<br /><br />传真&nbsp;FAX&nbsp;|&nbsp;Fax<br /><br />产品名称&nbsp;Product&nbsp;Name<br /><br />产品说明&nbsp;DEscriptION&nbsp;|&nbsp;Description<br /><br />价格&nbsp;Price<br /><br />品牌&nbsp;Brand<br /><br />规格&nbsp;Specification<br /><br />尺寸&nbsp;Size<br /><br />生产厂家&nbsp;MANUFACUTURER&nbsp;Manufacturer<br /><br />型号&nbsp;Model<br /><br />产品标号&nbsp;Item&nbsp;No.<br /><br />技术指标&nbsp;Technique&nbsp;Data<br /><br />产品描述&nbsp;Description<br /><br />产地&nbsp;Production&nbsp;Place<br /><br />销售信息&nbsp;Sales&nbsp;Information<br /><br />用途&nbsp;Application<br /><br />论坛&nbsp;Forum<br /><br />在线订购&nbsp;On-line&nbsp;order<br /><br />招商&nbsp;Enterprise-establishing<br /><br />招标&nbsp;Bid&nbsp;inviting<br /><br />综述&nbsp;General<br /><br />业绩&nbsp;Achievements<br /><br />招聘&nbsp;Join&nbsp;Us<br /><br />求贤纳士&nbsp;Join&nbsp;Us<br /><br />大事&nbsp;Great&nbsp;Event<br /><br />动态&nbsp;Trends<br /><br />服务&nbsp;Service<br /><br />投资&nbsp;Investment<br /><br />行业&nbsp;Industry<br /><br />规划&nbsp;Programming<br /><br />环境&nbsp;Environment<br /><br />发送&nbsp;Delivery<br /><br />提交&nbsp;Submit<br /><br />重写&nbsp;Reset<br /><br />登录&nbsp;Enter<br /><br />注册&nbsp;Login<br /><br />中国企业网技术支持&nbsp;Powered&nbsp;by&nbsp;ce.net.cn<br /><br />社区&nbsp;Community<br /><br />业务介绍&nbsp;Business&nbsp;introduction<br /><br />在线调查&nbsp;Online&nbsp;inquiry&nbsp;Inquiry<br /><br />下载中心&nbsp;Download<br /><br />会员登陆&nbsp;Member&nbsp;Entrance<br /><br />意见反馈&nbsp;Feedback<br /><br />常见问题&nbsp;FAQ<br /><br />中心概况&nbsp;General&nbsp;Profile<br /><br />教育培训&nbsp;Education&nbsp;&&nbsp;Training<br /><br />游乐园&nbsp;amusement&nbsp;park<br /><br />在线交流&nbsp;Online&nbsp;communication<br /><br />专题报道&nbsp;Special&nbsp;Repor<br />]]>
      </summary>
      <category term="" label="其他" scheme="http://dev.mo.cn/cat_diary_18.html" />
   </entry>
   <entry>
      <title type="html">asp远程下载图片并生成缩略图(使用ASPJpeg组件)</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_259.html" />
      <updated>2009-10-17 13:02:47</updated>
      <published>2009-10-17 13:02:47</published>
      <id>http://dev.mo.cn/article_259.html</id>
      <summary type="html">
      <![CDATA[<div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;%'函数名:SaveUrlTo<br />'作用:下载文件<br />'参数:URL-要获取的URL，savePath为文件保存地址<br />Public&nbsp;Function&nbsp;SaveUrlTo(ByVal&nbsp;URL,&nbsp;ByVal&nbsp;savePath)<br />On&nbsp;Error&nbsp;Resume&nbsp;Next<br />Dim&nbsp;ResBody,&nbsp;sStr,&nbsp;vPath,&nbsp;fileName,&nbsp;vErr<br />vErr&nbsp;=&nbsp;True<br />Set&nbsp;Http&nbsp;=&nbsp;Server.CreateObject("MICROSOFT.XMLHTTP")<br />Http.Open&nbsp;"GET",&nbsp;URL,&nbsp;False<br />Http.Send<br />If&nbsp;Http.Readystate&nbsp;=&nbsp;4&nbsp;Then<br />&nbsp;&nbsp;If&nbsp;Http.Status&nbsp;=&nbsp;200&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResBody&nbsp;=&nbsp;Http.responseBody<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Set&nbsp;jpeg&nbsp;=&nbsp;Server.CreateObject("Persits.Jpeg")<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;jpeg.OpenBinary&nbsp;ResBody<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;jpeg.Quality=100<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;jpeg.width&nbsp;=&nbsp;160<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;jpeg.height&nbsp;=&nbsp;160<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jpeg.SendBinary()<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;jpeg.close()<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Set&nbsp;jpeg&nbsp;=&nbsp;Nothing<br />&nbsp;&nbsp;End&nbsp;If<br />End&nbsp;If<br />End&nbsp;Function<br />saveUrlTo&nbsp;"http://www.baidu.com/img/baidu_logo.gif",""<br />%&gt;</div></div>]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">修改windows2003的默认上传限制</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_258.html" />
      <updated>2009-10-17 12:38:58</updated>
      <published>2009-10-17 12:38:58</published>
      <id>http://dev.mo.cn/article_258.html</id>
      <summary type="html">
      <![CDATA[win2003服务器默认最大上传大小为200K，可通过如下方法修改<br />1.先停止<span style="color:#FF0000;">IIS服务</span>（在服务页，而不是停止IIS）<br />2.在目录<span style="color:#FF0000;">C:\WINDOWS\system32\inetsrv</span>下找到<span style="color:#FF0000;">MetaBase.xml</span>文件用记事本打开,找到<span style="color:#FF0000;">AspMaxRequestEntityAllowed="204800"</span>节点.<br />3.修改<span style="color:#FF0000;">AspMaxRequestEntityAllowed</span>的值为你需要的大小(以字节为单位),保存.<br />4.启动IIS服务]]>
      </summary>
      <category term="" label="IIS配置相关" scheme="http://dev.mo.cn/cat_diary_7.html" />
   </entry>
   <entry>
      <title type="html">腾讯QQ、阿里旺旺、淘宝、MSN在线状态代码生成</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_257.html" />
      <updated>2009-10-8 13:08:00</updated>
      <published>2009-10-8 13:08:00</published>
      <id>http://dev.mo.cn/article_257.html</id>
      <summary type="html">
      <![CDATA[QQ在线代码生成：http://is.qq.com/webpresence/code.shtml<br />阿里旺旺在线代码生成：http://www.taobao.com/help/wangwang/wangwang_0628_12.php<br />MSN在线代码生成:http://www.365groups.com/msnonlinecode.aspx<br />Skype在线代码生成：http://skype.tom.com/products/skypeme.htm<br />如何在网页上显示腾讯QQ/MSN/旺旺在线洽谈?&nbsp;<br />1.QQ在线咨询代码<br />(qq在线交谈代码/qq在线客服代码/qq在线状态代码/qq在线客服代码)&nbsp;<br />(将66757924换成你的号码,site后面换成你的网站就可以了)<br /><br />&lt;a&nbsp;target="blank"&nbsp;href="http://wpa.qq.com/msgrd?V=1&Uin=66757924&Site=服务易&Menu=yes"&gt;&lt;img&nbsp;border="0"&nbsp;SRC=http://wpa.qq.com/pa?p=1:66757924:6&nbsp;alt="点击这里给我发消息"&nbsp;align="absmiddle"&gt;&lt;/a&gt;<br /><br />更多的生成显示QQ在线状态的代码,请查看腾讯官方网站&nbsp;<br />http://imis.qq.com/webpresence/code.shtml<br />你只需要填写你的号码,网站名称以及提示就可以点击生成就可以生成QQ在线状态的代码,拷贝生成的代码加入网页即可<br /><br />2.阿里巴巴旺旺在线状态代码生成,cardlanok改成你的ID就行了,还有alt改成你的内容&nbsp;<br />&lt;a&nbsp;target="_blank"&nbsp;href="http://amos1.taobao.com/msg.ww?v=2&uid=cardlanok=1"&nbsp;&gt;&lt;img&nbsp;border="0"&nbsp;src="http://amos1.taobao.com/online.ww?v=2&uid=cardlanok=1"&nbsp;alt="点击这里给我发消息"&nbsp;/&gt;&lt;/a&gt;<br /><br />更多的阿里巴巴旺旺在线状态代码生成样式,请查看阿里巴巴官方网站&nbsp;<br />http://www.taobao.com/help/wangwang/wangwang_0628_04.php<br /><br />3.skype在线状态代码生成&nbsp;<br />将yisung换成你的skype&nbsp;ID就可以了,需要在skype个人账户里设置对任何人显示状态&nbsp;<br />&lt;a&nbsp;href="skype:mengsajewel?call"&nbsp;onclick="return&nbsp;skypeCheck();"&gt;&lt;img&nbsp;src=http://mystatus.skype.com/smallclassic/yisung&nbsp;style="border:&nbsp;none;"&nbsp;alt="Call&nbsp;me!"&nbsp;/&gt;&lt;/a&gt;<br /><br />更多的skype在线状态代码生成样式,请查看skype的官方网站&nbsp;<br />http://www.skype.com/share/buttons/<br /><br />4.如何生成MSN在线状态代码,可以设置自定义显示图片,不过检测速度有点慢,另外一部分人在ｍｓｎ的配置中，设置了不加好友就不显示在线。这是为了个人隐私保护，但这样会显示状态未知或者离线。如果你不介意别人看到你，就开启那个选项就好了。<br />msnim:chat?contact=用户帐号&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//建立对话<br />msnim:add?contact=用户帐号&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//添加好友<br />msnim:voice?contact=用户帐号&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//语音聊天<br />msnim:video?contact=用户帐号&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//视频聊天]]>
      </summary>
      <category term="" label="其他" scheme="http://dev.mo.cn/cat_diary_18.html" />
   </entry>
   <entry>
      <title type="html">回来了</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_256.html" />
      <updated>2009-10-7 17:31:39</updated>
      <published>2009-10-7 17:31:39</published>
      <id>http://dev.mo.cn/article_256.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;终于回来了，好累。放了7天假，有4天的时间是在火车或汽车上的。。。。<br />&nbsp;&nbsp;&nbsp;回来还买的是站票。。。痛苦啊]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">放假了，十一后见</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_255.html" />
      <updated>2009-9-30 12:15:02</updated>
      <published>2009-9-30 12:15:02</published>
      <id>http://dev.mo.cn/article_255.html</id>
      <summary type="html">
      <![CDATA[如题。。。哈哈<br />86]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">vbscript和javascript(JScript)互相调用方法</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_254.html" />
      <updated>2009-9-27 8:42:08</updated>
      <published>2009-9-27 8:42:08</published>
      <id>http://dev.mo.cn/article_254.html</id>
      <summary type="html">
      <![CDATA[　　ASP具备管理不同语言脚本程序的能力，能够自动调用合适的脚本引擎以解释脚本代码和执行内置函数。ASP开发环境提供了两种脚本引擎，即VBScript（缺省）和JScript。不过，开发者并没有被限制于只能使用这两种语言，只要能够提供合适的ActiveX脚本引擎就能使用任何脚本语言。&nbsp;<br />　　脚本语言的选择往往基于许多不同原因：它可能是开发者最为熟悉的语言，可能是对给定工程来说能够提供最多特色支持的，也有可能是最具效率的。不同的环境和要求使得我们在选择脚本语言时注重不同的因素，同时也使得我们在某些时候面临选定的脚本语言不能直接提供其它语言固有的函数这一问题，或某个脚本已经写成但用的却是另外一种脚本语言。&nbsp;<br />　　此时应该怎么办？是否需要用当前所用的脚本语言重写这些脚本？或者说，是否有可能在一种脚本语言中调用其它脚本语言的内置函数？本文要说明的就是在ASP应用中如何让VBScript脚本和JScript脚本交互以最大限度地获得两种脚本语言的特色支持。&nbsp;<br />　　一、VBScript和JScript的内置函数&nbsp;<br />　　在VBScript和JScript中，有大量的内置函数功能是相同或类似的。然而，在一种脚本语言中内置的函数并非总是在另外一种脚本语言中也有对应的函数。例如，VBScript提供了许多用于操作字符串和格式化数据的函数，这些函数在JScript中并不存在。这些函数包括StrReverse()、Filter()以及FormatCurrency()等。在另一方面，JScript所提供的用于管理数组、字符串编码等的函数在VBScript中也没有定义，如join()、reverse()、pow()、位操作、escape()和unescape()等。&nbsp;<br />　　那么，如果在JScript程序中需要一个VBscript函数该怎么办呢?&nbsp;<br />　　二、异种脚本的互相调用&nbsp;<br />　　如果需要在JScript脚本中调用一个VBScript中内置的函数，则应该写一个VBScript用户定义函数（在这里调用VBScript内置函数），然后在JScript脚本中象调用公用JScript函数一样调用这个用户定义函数。<br />&nbsp;<br />　　例如，如果要调用的VBSCript内置函数是FormatCurrency()，则可以声明如下自定义函数：&nbsp;<br />　　&lt;SCRIPT&nbsp;LANGUAGE="VBSCRIPT"&nbsp;RUNAT="SERVER"&gt;<br />　　Function&nbsp;FormatValue(Value)&nbsp;<br />　　　　FormatValue&nbsp;=&nbsp;FormatCurrency(Value)<br />　　End&nbsp;Function<br />　　&lt;/SCRIPT&gt;<br />　　接下来在JScript代码中就可以象普通JScript函数一样调用FormatValue()了。用类似的方法也可以实现VBScript代码调用JScript函数。&nbsp;<br />　　应用同样的规则，我们可以在任何脚本内调用任何用户定义函数。不过，从JScript脚本内调用一个不带参数的VBScript过程（Sub）时应略加注意，此时在JScript中应该象调用一个不带参数的JScript函数一样调用它，如用foo()调用VBScript&nbsp;Sub&nbsp;foo过程。&nbsp;<br />　　三、数据共享&nbsp;<br />　　在某些情形下混合运用VBScript和JScript函数是非常有用的，但在不同语言脚本之间共享数据也可能很有用。实现这种共享的方法很简单：不管使用的是什么语言，只要是在页面级声明的变量就可以任意引用。&nbsp;<br />　　对象的使用方法也相似，可以任意选用合适的语言读取、修改属性或调用对象的方法。当然给定对象的属性和方法是由创建该对象实例的语言所定义的。正如上例VBScript的过程调用，当从JScript中调用一个不带参数的VBScript对象的方法时，其调用方法也遵从JScript的调用规则，反之亦然。&nbsp;<br />　　四、数组管理&nbsp;<br /><br />　　数组共享问题稍微复杂一点。虽然数组也象其它变量一样可以在不同语言脚本之间共享，但必须注意兼容方面的问题。&nbsp;<br />　　VBScript数组在JScript下可以用VBScript的符号引用，即用myArray(2)引用数组元素而不是JScript的数组元素引用符号myArray[2]。此外，还可以使用一个特殊的JScript对象——VBArray对象将VBScript数组转换为JScript数组。下面的代码从VBScript数组myVBArray创建JScript数组myJSArray：&nbsp;<br />　var&nbsp;Temp&nbsp;=&nbsp;new&nbsp;VBArray(myVBArray)<br />　var&nbsp;myJSArray<br />　myJSArray&nbsp;=&nbsp;Temp.toArray()<br />　　上述代码首先创建一个临时的VBArray对象，然后使用它的toArray()方法将自己转换为JScript数组。此后就可以象普通JScript数组一样使用myJSArray，如myJSArray[1]。但应当注意的是，toArray()方法将把一个多维的VBArray转换为一维的JScript数组。&nbsp;<br />　　从VBScript中引用JScript数组更为复杂。虽然在VBScript中我们可以直接访问JScript数组相关的方法和属性，但没有直接访问JScript数组的单个元素的方法。也就是说，我们可以在VBScript脚本中读取JScript数组的长度属性，如下所示：&nbsp;<br />　　x&nbsp;=&nbsp;myJSArray.length&nbsp;<br />　　但无法直接读取该数组的单个元素，下面的VBScript代码是不正确的：&nbsp;<br />　　x&nbsp;=&nbsp;myJSArray(3)&nbsp;<br />　　解决该问题的一个可行的方法是执行一个转换过程，如下面的代码所示，此处假定VBScript是缺省的脚本语言：&nbsp;<br />&lt;%<br />　　Dim&nbsp;Temp<br />　　Dim&nbsp;myVBArray<br />　　Temp&nbsp;=&nbsp;myJSArray.join(",&nbsp;")<br />　　myVBArray&nbsp;=&nbsp;Split(Temp,&nbsp;",&nbsp;")<br />%&gt;<br />　　此处的JScript&nbsp;join()方法将数组myJSArray元素转换到一个以逗号为分割符的字符串，VBScript&nbsp;Split()函数将字符串转换为VBScript数组。注意这里我们是在VBScript环境下调用JScript的join方法。依照此例，我们可以通过自定义VBScript函数来模拟JScript的VBArray对象的toArray()方法以实现JScript数组到VBScript数组的转换。<br />　　五、小结&nbsp;<br />　　在同一个ASP工程内灵活选用不同脚本语言具有许多优点，这些脚本之间的交互能力更为开发者集成不同语言所提供的内置函数和其它功能带来了更多的机会，同时也使得实现既可用于VBScript也可用于JScript环境的通用脚本库成为可能。&nbsp;]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">好累呀，去萧山了</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_253.html" />
      <updated>2009-9-21 16:33:09</updated>
      <published>2009-9-21 16:33:09</published>
      <id>http://dev.mo.cn/article_253.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;今天陪商务去萧山见了个客户，好远的路啊，中间要转2次车，来回将近6个小时，上午8点半出发的，跟客户谈了不到一个小时就往回走了。回来的时候下午4点多了，还下雨了。。。雨下的很不舒服<br />&nbsp;&nbsp;累是累点，不过只有跟客户面对面沟通了，才能真正了解客户的需求，才能做出符合客户的产品。<br />&nbsp;&nbsp;同时，也了解到了商务的辛苦，程序员是脑力劳动，而商务人员还要进行疲乏的体力劳动。<br />&nbsp;&nbsp;总之，不虚此行。还有免费萧山一日游，哈哈。]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">目的，所有的答案我知道</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_252.html" />
      <updated>2009-9-18 8:36:37</updated>
      <published>2009-9-18 8:36:37</published>
      <id>http://dev.mo.cn/article_252.html</id>
      <summary type="html">
      <![CDATA[没日没夜的工作为了什么？<br /><br />一天天算计着过日子为了什么？<br /><br />来杭州3个月不知道西湖什么样子，而公司就是西湖区。。。<br /><br />一起吃饭同事问我，省那一块钱做什么？小心没汤掖着。<br /><br />笔记本包坏了，天天用5年前买的背包背着去上班，为了什么？<br /><br />吃喝玩乐？花在其他女孩身上？<br /><br />再想想，来杭州又是为了什么？<br /><br />所有的答案我都知道，然而。。。。好好吃饭吧，饿了<br />]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">就这样的生活？</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_251.html" />
      <updated>2009-9-15 12:47:41</updated>
      <published>2009-9-15 12:47:41</published>
      <id>http://dev.mo.cn/article_251.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;突然发现，“局态”发生了某些转变。。。<br />&nbsp;&nbsp;我很积极，但是还是听从天意吧]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">还在公司。。。盹呀</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_250.html" />
      <updated>2009-9-11 2:58:56</updated>
      <published>2009-9-11 2:58:56</published>
      <id>http://dev.mo.cn/article_250.html</id>
      <summary type="html">
      <![CDATA[盹呀盹呀盹~<br /><br />4点14了&nbsp;&nbsp;&nbsp;还在公司。。。<br /><br />盹了。。。我要睡觉了。。。凌晨6点。。<br /><br />醒了。。。凌晨7点半，喝杯咖啡。。。<br /><br />吃完午饭了。。。继续睡会觉，要垮掉了]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">光学游戏-挑战你的智商和逻辑思维能力</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_249.html" />
      <updated>2009-9-6 21:32:04</updated>
      <published>2009-9-6 21:32:04</published>
      <id>http://dev.mo.cn/article_249.html</id>
      <summary type="html">
      <![CDATA[在校内玩一个测智商的游戏，玩完后提示进入这个页面“挑战自己的智商”，好奇心一下就来了。<br />发现还是个不错的游戏，不仅仅是光学问题，还要有一定的逻辑思维能力。<br />有兴趣的就玩玩看吧，刚开始几关很简单，后面有比较复杂的几关，我自己是单人无答案通关的。<br />如果有需要答案的可以给我发邮件，网上有没有这个还不大清楚~<br />据说后面还有几关，有机会跟作者要去~目前总共25关~<br /><br /><object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=4,0,2,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="500" height="400"><param name="movie" value="http://dev.mo.cn/upfiles/20090906212048894.swf"><param name=quality value=high><embed src="http://dev.mo.cn/upfiles/20090906212048894.swf" quality="high" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?p1_prod_version=shockwaveflash" type="application/x-shockwave-flash" width="500" height="400">http://dev.mo.cn/upfiles/20090906212048894.swf</embed></object><br />]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">我亲爱的朋友和同学们</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_248.html" />
      <updated>2009-9-2 12:37:36</updated>
      <published>2009-9-2 12:37:36</published>
      <id>http://dev.mo.cn/article_248.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;发现最近忽略了好多朋友，萍姐、东晓、海鹏、小猪、彬哥。。。，竹子、小齐、老贼还有杨杨等一大堆人，还有孙丛珊，王伟，兰新等几个学弟学妹，最近发生了太多，太多自己都想不到的事情，被弄的心身疲惫，幸好有老婆陪着，如果没了她我恐怕现在已经不成人样了，最感激也最对不起的就是我女朋友了，对不起因为我施加在她身上的压力，谢谢她陪我走过了这段最无助的时间。<br />&nbsp;&nbsp;同时也非常感谢朋友们对我的支持和谅解。刚踏入社会只有为了生活去拼命努力和奔波，为了朋友、为了家人、更是为了自己的将来，努力奋斗，为自己闯出一片天地来。<br />&nbsp;&nbsp;&nbsp;也希望我的朋友们，不管选择了什么，我们的未来在我们自己手中，为了我们的未来，都要努力加油拼搏。]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">解决不同目录调用同一个数据库连接出现路径错误的问题</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_247.html" />
      <updated>2009-8-30 2:11:13</updated>
      <published>2009-8-30 2:11:13</published>
      <id>http://dev.mo.cn/article_247.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;在晚上Blog改动，把管理文件转移到单独文件夹的时候解决了一个困扰大家，包括我在内的asper的一个头疼的问题--在子目录下包含根目录的数据库连接文件的时，导致数据库路径出错的问题，尽管有很多asper通过各式个样的方法解决过这个问题，但我想我的方法会比价实用些，这个方法利用了jscript的type{}catch(){}块，代码如下<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;script&nbsp;language="jscript"&nbsp;runat="server"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;/*<br />&nbsp;&nbsp;&nbsp;&nbsp;只需要调用Connect方法，判断返回值是true还是false，如果是true说明数据库连接成功<br />&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;dbPath="data/test.mdb";&nbsp;//这个路径是相对于根目录的<br />&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;conn=null;<br />&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;Connect(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn&nbsp;=&nbsp;server.CreateObject("ADODB.CONNECTION");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.open("provider=Microsoft.jet.oledb.4.0;data&nbsp;source="&nbsp;+&nbsp;server.MapPath(dbPath))&nbsp; &nbsp; &nbsp; &nbsp; ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//在根目录的程序文件引用数据库连接的时候这句会执行成功，程序直接返回true<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}catch(ex){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.open("provider=Microsoft.jet.oledb.4.0;data&nbsp;source="&nbsp;+&nbsp;server.MapPath("../"&nbsp;+&nbsp;dbPath));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//在一级子目录的程序文件中引用数据库连接的时候这句会执行成功，程序返回true<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}catch(ex){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如果在其他级别子目录引用，这里可以继续try，否则返回false<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;<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;}catch(ex){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//创建组件失败，返回false<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&lt;/script&gt;</div></div><br /><br />顺手做了一个演示程序:&nbsp;<a href="upfiles/20090830013556096.rar" target="new">示例程序</a><br />运行根目录和admin目录下的index.asp，会提示数据库连接成功<br />运行admin目录下的test目录中的index.asp会提示失败，因为我们没有在conn.asp中对二级目录对数据库的引用作相应的代码处理。<br /><br />其实，再仔细想想，我们完全可以用vbs的if语句和fso来解决这个问题，思路大家应该都明白，就是判断文件是不是存在，存在就连接，不存在继续下一个路径，一般数据库连接的引用就局限在根目录和一级目录里面]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">利用下班的晚上时间对blog进行了小的改动</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_246.html" />
      <updated>2009-8-30 1:39:17</updated>
      <published>2009-8-30 1:39:17</published>
      <id>http://dev.mo.cn/article_246.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;由于最近太忙了，没有时间来管理自己的blog，因为自己美工水平有限，自己站的界面又太难看，因此去网上找了张图片，作blog的背景图片用，就是下面这张了<br /><a onfocus="this.blur()" href="css/bg.jpg" target=new><img src="css/bg.jpg" border="0" alt="´ڴ" onload="javascript:if(this.width>560)this.width=560" /></a><br /><br />好像是z-blog的一个模板里面的，这次换肤只用了这个背景图片和几个小的图标。由于整个页面全部是用div+css布局，因此每次换肤都会很快搞定，实际用了不到2小时的时间就把blog的皮给换了。今天顺便把管理相关的文件转移到一个文件夹中，使目录结构看起来更简单明了些。并且在转移文件的时候解决了一个困扰大家，包括我在内的asper的一个头疼的问题--在子目录下包含根目录的数据库连接文件的时，导致数据库路径出错的问题，尽管有很多asper通过各式个样的方法解决过这个问题，但我想我的方法会比价实用些,具体方案和代码见下面文章:<br />&nbsp;&nbsp;&nbsp;<a href="article_247.html" target="new">解决不同目录调用同一个数据库连接出现路径错误的问题&nbsp;</a>]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">对建站宝进行小的总结</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_245.html" />
      <updated>2009-8-27 21:02:01</updated>
      <published>2009-8-27 21:02:01</published>
      <id>http://dev.mo.cn/article_245.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;建站宝从开发到现在已经有两个多月了，从我来杭州，来第一商务的第一天起就和我一起并肩齐行。说实话，像自己孩子一样看他，尽管他还没长大，还没成熟，但是我要细心的把他养大，让他能独立站在蔚蓝的天空下。<br />&nbsp;&nbsp;&nbsp;7月20号发布出去的第一版，多少有些匆忙，有很多BUG，很多用户也提出了对建站宝的意见和建议，这一版我们将修正这些BUG，甚至以一个全新的面貌去面对大家，让整套程序更方便使用。我熟悉建站宝的每一句代码，每一个功能，操作起来得心顺手，不管是标签类还是模板类以及原创的上传类，还有针对商城的购物车，都熟悉不过了，因为这些都是我们自己一句句代码一个个字母敲出来的。<br />&nbsp;&nbsp;&nbsp;前几天看到有人说“函数名很多都是抄袭PJ的”，说实话，有的函数就是引用的PJ的，因为小组2个成员都是PJ开发团队的，包括我（进PJ还没有做什么贡献，有点惭愧），如果对建站宝引用PJ的函数有很大意见的话，我们会考虑自己写同样功能的函数，我不是对PJ有意见，我这里陈述一个事实。<br />&nbsp;&nbsp;&nbsp;第一版到现在，已经完善了很多，最重要的几点是：<br />&nbsp;&nbsp;&nbsp;1，实现购物车功能，并且能够在线支付，提供支付宝和网银在线接口(网银在线需要客户和对象签合同才能取现)<br />&nbsp;&nbsp;&nbsp;&nbsp;2，优化和修改模板类，实现各标签的数据缓存，完全在模板类内部实现，无需调用外部方法，是否缓存可以自己定义<br /><br />&nbsp;&nbsp;&nbsp;不管其他人怎样看建站宝，我看好他，不会放弃他，我会去努力做好他。同时，也希望大家支持。<br />&nbsp;&nbsp;&nbsp;最近发生了太多的事，同时由于建站宝的开发，因此对于自己写的一些东西没有进行更新以及及时的BUG处理，也希望大家能够原谅。]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">钱小样语录</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_244.html" />
      <updated>2009-8-25 13:00:49</updated>
      <published>2009-8-25 13:00:49</published>
      <id>http://dev.mo.cn/article_244.html</id>
      <summary type="html">
      <![CDATA[1、人不犯我，我不犯人；人若犯我，礼让三分；人再犯我，我还一针；人还犯我，斩草除根。&nbsp;<br />2、我允许你走进我的世界,但不许你在我的世界里走来走去。&nbsp;<br />3、明骚易躲，暗贱难防。&nbsp;<br />4、天没降大任于我，照样苦我心智，劳我筋骨。&nbsp;<br />5、执子之手，方知子丑，泪流满面，子不走我走。&nbsp;<br />6、红豆不长南国，长我脸上了，真相思！&nbsp;<br />7、我深信，会有一个女人是为受我的折磨而来到这世上的。&nbsp;<br />8、西游记告诉我们：凡是有后台的妖怪都被接走了，凡是没后台的都被一棒子打死了。&nbsp;<br />9、你有什么不开心的事？说出来让大家开心一下。&nbsp;<br />10、我那么喜欢你，你喜欢我一下会死啊。&nbsp;<br />11、虽然你身上喷了古龙水，但我还是能隐约闻到一股人渣味儿。&nbsp;<br />12、我诅咒你一辈子买方便面没有调料包。&nbsp;<br />13、不吃饱哪有力气减肥啊。&nbsp;<br />14、妈妈问我有女朋友了么,我说没有,妈妈说：这个可以有,我说：这个真没有……&nbsp;<br />15、理想很丰满，现实却很骨感。&nbsp;<br />16、雷锋做了好事不留名，但是每一件事情都记到日记里面。&nbsp;<br />17、我又不是人民币，怎么能让人人都喜欢我？！&nbsp;<br />18、令人不能自拔的，除了牙齿还有爱情。&nbsp;<br />19、当生活心怀歹毒地将一切都搞成了黑色幽默，我顺水推舟把自己变成了一个受过高等教育的流氓。&nbsp;<br />20、时间太瘦，指缝太宽。&nbsp;<br />21、小姑娘们梦中都想找一匹白马，睁开眼发现满世界都是灰不溜秋的驴，悲痛欲绝后，只能从驴群中挑个身强力壮的，这样的驴就被命名为：经济适用男&nbsp;。&nbsp;<br />22、我就要哭，我就要闹，一宿一宿不睡觉，手里拿瓶安眠药，拿根小绳要上吊。再丑也要谈恋爱，谈到世界充满爱。&nbsp;<br />23、我们的目标：向钱看，向厚赚。&nbsp;<br />24、我是你转身就忘的路人甲，凭什么陪你蹉跎年华到天涯？&nbsp;<br />25、&nbsp;间歇性郁闷症发作期间，生人勿扰，熟人勿找。&nbsp;<br />26、没有医保和寿险的，天黑后不要见义勇为……&nbsp;<br />27、琴棋书画不会，洗衣做饭嫌累。&nbsp;<br />28、说金钱是罪恶，都在捞；说美女是祸水，都想要；说高处不胜寒，都在爬；说烟酒伤身体，都不戒；说天堂最美好，都不去！&nbsp;<br />29、挤公交是包含散打、瑜珈、柔道、平衡木等多种体育和健身项目于一体的综合性运动。&nbsp;<br />30、老娘法眼一开就知道你是个妖孽了。&nbsp;<br />31、手插口袋，谁都不爱&nbsp;。&nbsp;<br />32、手拿菜刀砍电线，一路火花带闪电。&nbsp;<br />33、单身并不难，难的是应付那些千方百计想让你结束单身的人&nbsp;。&nbsp;<br />34、幸福是什么?幸福就是你吃鱼,我吃肉,看着别人啃骨头。&nbsp;<br />35、念了十几年书，想起来还是幼儿园比较好混！&nbsp;<br />36、他们说我是BT，让我去做CT，结果我是ET。&nbsp;<br />37、我的优点是：我很帅；但是我的缺点是：我帅的不明显。&nbsp;<br />38、我当年也是个痴情的种子，结果下了场雨……淹死了。&nbsp;<br />39、很多人说婚姻是爱情的坟墓，但是能够入土为安的爱情总比暴尸街头要好&nbsp;。&nbsp;<br />40、有空学风水去，死后占个好墓也算弥补了生前买不起好房的遗憾&nbsp;<br />41、据说，人只有两个选择，忙着死或是忙着活，我想我有了第三种选择：忙着等死&nbsp;。&nbsp;<br />42、春困夏乏秋无力，冬日正好眠。&nbsp;<br />43、思念不能自已，痛苦不能自理，结果不能自取，幸福不能自予。&nbsp;<br />44、小时候我以为自己长大后可以拯救整个世界，等长大后才发现整个世界都拯救不了我。&nbsp;<br />45、如果你注定不能给予我期待的回应.那么就保持在安全距离之外吧。&nbsp;<br />46、请不要把我对你的容忍，当成你不要脸的资本。&nbsp;<br />47、&nbsp;女子无才便是德，我一定是太缺德了。&nbsp;<br />48、诸葛亮出山前也没带过兵啊，你们凭啥要我有工作经验。&nbsp;<br />49、用嘻哈的蓝调精神来过二胡一样的生活。&nbsp;<br />50、鸵鸟的幸福，只是一堆沙子。&nbsp;<br />51、老天，太蓝！大海，太咸！人生，太难！工作，太烦！和你，有缘！想你，失眠！见你，太远！&nbsp;<br />52、一觉醒来，天都黑了。&nbsp;<br />53、喝药递瓶，上吊给绳，跳楼的挥着小手绢送行。&nbsp;<br />54、铁杵能磨成针，但木杵只能磨成牙签，材料不对，再努力也没用。&nbsp;<br />55、傻子偷乞丐的钱包，被瞎子看到了，哑巴大吼一声，把聋子吓了一跳，驼子挺身而出，瘸子飞起一脚，通辑犯要拉他去公安局，麻子说，看我的面子算了。&nbsp;<br />57、你要搞清楚自己人生的剧本——不是你父母的续集，不是你子女的前传，更不是你朋友的外篇。&nbsp;<br />59、树愈静而风不止，我愈恋而他不在。&nbsp;<br />60、多想某天醒来睁开眼，发现自己坐在小学教室的课桌椅上。老师掷来的粉笔头正好打在额头上。&nbsp;<br />61、少年不胡作妄为，大胆放肆，试问老年时哪来的题材话当年。&nbsp;<br />62、作为一个怪兽，我的愿望是至少消灭一个奥特曼。&nbsp;<br />64、再过几十年&nbsp;我们来相会&nbsp;送到火葬场&nbsp;全部烧成灰&nbsp;你一堆我一堆&nbsp;谁也不认识谁&nbsp;全部送到农村做化肥~&nbsp;<br />65、学问之美，在于使人一头雾水；诗歌之美，在于煽动男女出轨；女人之美，在于蠢得无怨无悔；男人之美，在于说谎说得白日见鬼。&nbsp;<br />66、我以为我很颓废,今天我才知道,原来我早报废了。&nbsp;<br />67、不成熟男人的标志是可以为了理想壮烈的牺牲，成熟男人的标志的可以为了理想卑贱的活着。&nbsp;<br />68、生活就像宋祖德的嘴，你永远都不知道下一个倒霉的会是谁。&nbsp;<br />69、阳光温热，岁月静好，你还不来，我怎敢老去？&nbsp;<br />70、人又不聪明，还学别人秃顶。&nbsp;<br />71、我以神的姿态,闪耀在这美的瞬间.凡人勿扰…&nbsp;<br />73、年轻的时候，我们常常冲着镜子做鬼脸；年老的时候，镜子算是扯平了。&nbsp;<br />76、要努力！！为了你的奥迪我的迪奥。&nbsp;<br />77、我是白领：今天领了薪水，交了房租水电，买了油米泡面，摸了口袋，感叹一声，这个月工资又白领了…&nbsp;<br />78、执子之手，将子拖走。子说不走，好吧，关门放狗！&nbsp;<br />79、生活,就是这样.永远占领着绝对领导的位置,当无数的傻子高呼着自己控制了生活,掌握了命运.却没看到,生活在更高的苍穹上.露出讥笑的嘲讽的面孔。&nbsp;<br />80、他就是一盆水，倒入你的米堆里，若干年后，清水变成了醇香的酒，而你变成了一堆废弃的烂米，不是没用了，还可以拿来喂猪的。&nbsp;<br />81、不愿做奴隶的人民，愿做人民币的奴隶。&nbsp;<br />83、我不是天桥上算命的，唠不出那么多你爱听的磕。&nbsp;<br />84、生活二字二几十年来回味得我大小脑抽搐，脊髓痉挛。始终不得要领。&nbsp;<br />85、真的猛士，敢于直面自己未化妆的脸。&nbsp;<br />86、天山童姥——外表正太，内心却有三百六十五道裂痕，每道裂痕上书春夏秋冬四字，沧桑到妖。&nbsp;<br />87、世事往往如此，想回头也已经来不及，即使你肯沦为劣马，不一定有回头草在等着你。&nbsp;<br />88、曾经我们都以为自己可以为爱情死，其实爱情死不了人，它只会在最疼的地方扎上一针，然后我们欲哭无泪，我们辗转反侧，我们久病成医，我们百炼成钢。你不是风儿，我也不是沙，再缠绵也到不了天涯，擦干了泪，明天早上，我们都要上班。&nbsp;<br />89、曾经和朋友一起仰望星空，随之我们泪流满面，他是因为失恋，我则是因为扭伤了脖子。&nbsp;<br />90、其实你我都一样，人人都在装，关键是要装像了，装圆了，有一个门槛，装成了就迈进去，成为传说中的性情中人，没装好，就卡在那里了。就是卡门。&nbsp;<br />]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">一年一次，人神共赏，人鬼同泣（2009高考作文语录）</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_243.html" />
      <updated>2009-8-16 23:37:17</updated>
      <published>2009-8-16 23:37:17</published>
      <id>http://dev.mo.cn/article_243.html</id>
      <summary type="html">
      <![CDATA[1、随着李鸿章签下的一款款条约，一个古老民族的尊严丧失殆尽，中国沉寂了，但是90后出现了，希望出现了。（我等着90后推翻卖国贼李鸿章的统治。）<br />2、这群刚长出羽翼的孩子。（鸟人一族？）<br />3、一个“80后”倒下去，千百个“90后”站起来。（……）<br />4、9.8级的地震把整个四川变成一片瓦砾。（同学，你太狠了吧。）<br />5、在九千年前大诗人苏轼就曾经说过……（周口店人苏轼？）<br />6、蝴蝶也是朝生暮死的东西。（珍惜蝴蝶吧，明天就看不见同一只了。）<br />7、过去的将来，人们充满希望，现在的过去，有赞扬赞许和担心忧虑，现在的将来，有坚定和迷茫，那么将来的过去会是怎样呢？（看明白这段时态的有赏）<br />8、仿佛自己才是家庭小宇宙的中心。（你们家都是圣斗士？还有小宇宙！）<br />9、没进过厨房，分不清油盐酱醋茶。（这五样外观都不一样，不至于分不清吧。）<br />10、像我这么大的十八九的青年男女有的已经有的结了婚，有的已经有了孩子。（咱国家《婚姻法》还管用不？）<br />11、也许这种心情是茅盾的。（对，不是老舍的。）<br />12、十二年寒窗苦读为的就是在今天都够实现自己的梦想，成为天空中搏击的雄鹰，成为嗷嗷叫的狼。（变成狼就够呛了，还变成“嗷嗷叫的”。）<br />13、或许我们现在娇生惯养，但我们面对风雨时并不会马上死去。（除非被雷劈死，一般都不会马上死去。）<br />14、要传承一个日不落的民族，就必须有精卫填海，夸父追日的不弃和不舍。（你们大英帝国的也到中国参加高考？）<br />15、不过我比他幸运的是我在一个较好的学校，他在下面的学校，他总跟我说他们那的学生，没有素，没有没文修养，读是白念了，三两天就会出现打架的迹象。（就您这文笔通顺程度，到底谁是差学校的学生啊？）<br />16、多少的80后的志愿者为了国家的荣誉，昌着残酷的裂日，环视着北京城的卫生。（志愿者难道是城管？）<br />17、无私应如司马迁，记录真实的历史，用“史家之绝唱”的《离骚》，为我们将历史的长河疏浚。（都怪鲁迅先生，说什么《史记》是“无韵之离骚”，让人家考生写错……）<br />18、邱绍云离我们的**远去，蒋姐的年代已经离我们渐渐走远，他们的作为我们从不忘记。（作为没忘记，名字都忘记了。）<br />19、我们要有“江山代有才人出，一代更比一代强”的坚定信念。（又见组合诗词的高手。）<br />20、在我的盘问下，您才说出“不太舒服”三个字。（……）<br />21、传说中的菲尔普斯，那个拿了八块奥运金牌的人……他教练说：“他平时就是吃饭、睡觉、游戏！”（我的生活也是这三样，怎么没拿金牌？）<br />22、二万秦关终属楚……千万越兵可吞吴。（夸张的手法？）<br />23、I’m90后，我也是90后。（同学你是小沈阳吗？英文中文的还说两遍？）<br />24、70后的人被称为英雄，他们艰苦奋战，创立了新中国。（19世纪的70后？）<br />25、力拔山兮气盖势，时不利兮骓不逝，逝不骓兮可奈何，虞姬虞姬奈若何……你面对眼前的大河，毅然投身乌江。（可怜的霸王，你要报仇就去找那考生吧。）<br />26、天津市一所中学的高三毕业生中，有一名叫做小超的同学……在病床上坚持读书，要在明天参加高考。（小超不用考语文和数学吗？为什么今天不来参加高考？）<br />27、隆美尔毅然决定违抗希特勒的指令，用自己的方式诠释青春。（隆大爷那岁数怎么诠释“青春”？）<br />28、社会以语不惊人的速度更迭着。（社会不算“语不惊人”，您“语不惊人”。）<br />29、人麻人生肉长（我师兄看了五分钟，告诉我：“考生大致要说：‘人嘛，都是人生肉长的。’”）<br />30、然就那一刻糟千人恨万人怨的地震爆发了。（你说“挨千刀的地震”多好？）<br />31、他们呀，他们，他们面对他们的选择死而无憾。（同学，你是口吃？）<br />32、马云曾经说过：“短暂的激情不算什么，长久的激情才能赚钱。”（怎么看这句话都更像是拉皮条的说的。）<br />33、灾区的处境第一时间传遍了神舟大地。（还是联想的比好好。）<br />34、70后早已作古，80后也不足挂齿。（幸好我是80后。）<br />35、徐霞客一生只写过一书，一部《霞客行》流传千载。（考生的想象力让我不得不击节叫好，我一辈子也想不出这样巧妙的句子。）<br />36、太阳一分一秒的爆炸。（爆炸一次您也活不了！）<br />37、我是业障（你这业障！）<br />38、吕蒙是三国时期的名将，但是他年轻的时候是个有勇无谋的猛将，但是在鲁豫的劝说下，他发奋苦读，最终成了一代名将。（原来吕蒙也参加过《鲁豫有约》呀）<br />39、常言人必须一生中有感情趣的事情，在你有性趣感认它。（没看明白，这句话好像在说一些不好的事似的。）<br />40、80后的人们风韵犹存。（幸好没用“昨日黄花”。）<br />41、环境不会为你而改变，既然你不能适应环境，那你就灭亡吧，留你也没用，也是浪费粮食，还不如给其他人做贡献，也算学雷锋做好事吧。（有些拙嘴笨腮的女生还是好好和这位考生学学吧，以后甩闲话用得着。）<br />42、《史记》是我们90后耳熟能详的一篇文章。（别装，你肯定没读过。）<br />43、李白在一首诗中写道：天生我材必有用，我也从李白那里学到了妄自尊大。（你学点好，行不行？）<br />44、（居里夫人）不畏辛苦终于终日的钻研除了第一个放射性元素“镭”，近而她也获得了诺贝尔文学奖。（同学，其实诺贝尔奖还有好多别的奖项呢！）<br />45、歌德花了五十八年创作出影响思想界文化界的《浮世绘》。（这老家伙不好好写浮士德，跑到日本画画去了。）<br />46、“天生我材必有用，明朝散发弄扁舟。”（唯一欣慰的一点就是这两句都是李白的。）<br />47、80后是垮掉的一代，90后是趴下的一代。80后拒绝加班，90后拒绝上班。（2000后的情形我想象不出来）<br />48、就拿我来说吧，我是伴随着苏联解体而生的，当然它们的解体和我没有关系。（同学你太谨慎了，你不说我们也知道。）<br />49、居理夫人在电闪雷鸣中奋斗着雷元素的摄取。（小心被雷倒！）<br />50、就像李白在乌苏台案被赐金放还一样。（仅仅把李白和苏轼的事情记混了，这样的事情我早就司空见惯了，问题时我想知道乌苏台到底是乌苏里江还是乌里雅苏台。）<br />51、莎士比亚在教育亚里士多德时，默罕默德在旁边讲了一句话：“不可以貌取人！”（这仨人说话互相能听懂吗？）<br />52、时间就像拉出来的屎一样无法收回。（同学，你实在是……太恶心了！）<br />53、我们90后的目标就是制造09后。（哦，那好，你们抓紧时间吧。）<br />54、大江东去浪淘尽，千古风流人物，故垒西边，人道寄奴曾住。（这两句词连得多顺！）<br />55、我们为什么要学外语，因为外国人骂我们的时候，我们能听得懂，还可以还嘴去骂他们。（这样的话，你用不着学多少句。）<br />56、机遇像雨点般向我打来，但我都一一闪过。（你够背的。）<br />57、鲁迅先生怀着曲线救国的梦想，赴日本学习医术。（……）<br />58、风筝在天空飘着，高兴地说：“好风凭借力，送我上青云。”（风筝都看过《红楼梦》不成？）<br />59、世界巨富比尔盖茨发家不也是从玩电脑开始的的吗？（盖茨小的时候有魔兽吗？）<br />60、（司马迁）有两种选择：一是享受荣华富贵，写假史，而是受尽世人凌辱，写真史。（自从《报任安书》入选课本之后，司马迁的伤疤就被考生一遍一遍地撕来撕去，不过这位考生说的，还是蛮有新意的嘛！）<br />61、90后的第一人要德才都有的，但我才真是不都。而高考在下，也是我才能的表现，也能好一点我是才子，不好一点我是啦吸。（闭嘴！你就是啦吸！）<br />62、古时候，有这样一个人，他是范进，他在考试中屡遭失败，但他懂得珍惜时间和青春，没有放弃考试，他的青春无悔。虽然范进在很老的时候考上了，但是他的青春是无悔的，因为他懂得珍惜青春。（您当时学《范进中举》时敢情一直拿范进当正面人物呢？）<br />63、还有可能是对压抑心情的排泄吧。（排遣、发泄两个词不能省略着用）<br />64、那个在指挥台上指挥若定的周周你们记得吗？他是“90后”的代表。（求你们找个正常人当代表吧！）<br />65、我也认为要使官员廉洁公正，一定要启用“90后”的我们。（先去考公务员去。）<br />66、父亲像亲人一样疼爱着我。（真可怜，后爹吗？）<br />67、我们永远也忘不了那难忘的一刻，2008年8月8日，就在那一天，奥运会成功的在我国落下了帷幕。（还没开呢就完了？）<br />68、（鲁迅）做出了一个决定：弃医从文，这个决定一般人看来觉得他很傻，觉得医学专业那么挣钱，何必去学文学？（同学，鲁迅先生要像你那么聪明就好了。）<br />69、我们要秀出自己的风格，发扬自己的性趣，爱好，不做父母手中的小玩物。（这家里面太乱了，都没法想，越想越乱。）<br />70、2008年5月12日，中国的四川被撕成两半。（你当撕卷子呢？）<br />]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">哥做的不是网站是寂寞(真实又搞笑)</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_242.html" />
      <updated>2009-8-16 13:09:18</updated>
      <published>2009-8-16 13:09:18</published>
      <id>http://dev.mo.cn/article_242.html</id>
      <summary type="html">
      <![CDATA[每当夜半三更<br />五环外管庄人民的鼾声此起彼伏<br />哥还在古董笔记本前面徘徊<br />烟屁横飞&nbsp;代码狂舞<br /><br />哥是这个圈子里的元老<br />四里八村乡亲们的电脑都是我亲自维护<br />服务周到&nbsp;还免费<br />刻录光盘&nbsp;U盘&nbsp;移动硬<br />应有尽有&nbsp;贼便宜<br />其实他们不知道<br />哥的专业是做网站<br /><br />哥今天的早餐是煎饼果子<br />加薄脆多来葱花面酱的那种<br />开封菜的发疯烧饼&nbsp;哥是不屑吃的<br />性价比太低！！！<br />其实，像哥这种夜魅族是很少吃早餐的<br />按照地球那边的作息时间<br />吃多了容易发胖<br />可是哥今天要去见客户<br /><br />哥承认&nbsp;哥做过很多网站<br />老多大客户都喜欢我的作品<br />很简单&nbsp;一定要把他们喷晕<br />网络营销&nbsp;电子商务<br />希望，哥要给他们希望<br />他们看到了希望<br />哥明天的早餐才有希望<br /><br /><br />领带，没错，今天要穿西服去接客<br />啐一口唾沫抹一抹鬓角<br />发型不乱&nbsp;才自信<br />吃了加葱薄脆的煎饼不怕<br />咱有绿贱口香糖<br />就凭我手上这三百套韩国模板<br />哥打遍天下无敌手<br /><br />胸怀天下的人是要讲究环保的<br />哥从容的身手打了一辆小排量的“蹦蹦”<br />在看到地铁保安之前<br />将剩下的半瓶雪碧喝掉<br />八通线一如既往的繁忙<br />一号线摩肩接踵的喧嚣<br />二号线亦如期待中的沙丁鱼罐头<br />东直门<br />980路<br />密云<br /><br />“找一下信息部的张主管”<br />前台美眉飞来了一丝暧昧的白眼球<br />“有约么？登个记”<br />哥也去过N多高档的写字楼<br />哥也修过无数的笔记本<br />哥没见过这么暧昧的前台美眉<br />哥掏出一张名片<br />“麻烦你帮我登一下吧，我是XXX科技公司的，昨天约好的”<br />精美的签字笔扔了过来<br />“自己写~”<br />靠！拿哥当推销保健品卖保险的么<br />哥是非常有身份的<br />哥是搞IT的<br />哥揣着一颗提高全社会信息化应用的赤子之心<br />哥头脑里装的是策略和科技<br />哥不是求着你做网站<br />好吧，哥忍了<br />就这一次，下不为例<br /><br />张主管是哥的铁子<br />我们昨天半夜在“相约同城”聊天室一起把妹<br />这是什么样的交情？<br />穿一条裤子的交情！<br />哥跟着张主管来到办公室<br />空调很猛烈<br />窗机<br />哥今天主要喷了搜索优化的重要性<br />还推荐了火爆地带等产品<br />竞价排名<br />网络实名<br />就在张主管被喷昏昏欲睡之前<br />哥拿到了本月最大的订单<br />还预拿到了百分之20的首付<br />今天的午餐、晚餐，明天的早餐都有着落了<br /><br />哥手里拿着崭新的钞票<br />一张红色的&nbsp;一张绿色<br />一共150块钱啊<br />心情无比的激动<br />哥要请张主管吃饭<br />当然哥知道红色那张是给张主管的回扣<br /><br />今天不要火烧<br />今天吃驴肉板肠锅仔<br />哥今天整点小二<br />哥不怕驴杂汤弄脏了西装<br />哥今天要开怀畅饮<br /><br />哥在回家的路上一直打饱嗝<br />看来今天的晚饭有省了<br />哥看惯了三环堵车<br />所以哥不买车<br />同样是堵<br />你们开车的坐着<br />哥站着堵而已<br /><br />每当站着的时候<br />哥就在思考<br />都说哥做的网站管生不管养<br />屁话，给几百块钱，哥也要管养么<br />每当这个时候，眼泪就止不住的往下流<br />楼下的小卖部&nbsp;烟又涨价了<br />哥凭啥就要做几百块钱的网站呢<br />哥还会平面设计<br />哥还会转视频文件<br />哥会的很多<br /><br />哥每晚在家要处理很多事务<br />要严防哥的那些网站被挂马<br />还要用ASP商城模板伺候张主管的网站<br />公司简介&nbsp;产品展示&nbsp;联系我们<br />打开PSD发现有三个飞机稿没完成<br />翻了翻记账本<br />还有700块钱的网站尾款没要回来<br />下个月要交房租了<br />哥很忙&nbsp;<br /><br />洗完澡，哥点上一支烟<br />深深的吸了一口<br />打开遨游浏览器<br />从收藏里找到“相约同城”聊天室<br />小甜甜今天不在线<br />红姐貌似有了聊友不爱搭理我<br />姗姗的大姨妈来了<br />哥三十了，还没个女朋友呢<br /><br />哥在睡觉前还做了一个手提袋的广告设计<br />新下载了三个韩国网站模板<br />哥累了<br />明天周六，哥还要去京客隆做豆浆机的促销员<br />哥坚持IT事业的理想<br />自摸一下&nbsp;睡去<br /><br />哥做的不是网站&nbsp;是寂寞]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">APerson'sLife</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_241.html" />
      <updated>2009-8-13 20:28:15</updated>
      <published>2009-8-13 20:28:15</published>
      <id>http://dev.mo.cn/article_241.html</id>
      <summary type="html">
      <![CDATA[Dim&nbsp;me,State,Result<br />Set&nbsp;me&nbsp;=&nbsp;New&nbsp;Person<br />me.age&nbsp;=&nbsp;0<br />me.sex&nbsp;=&nbsp;"boy"<br />me.name&nbsp;=&nbsp;"Aien"<br />me.grow(8)<br />State&nbsp;=&nbsp;me.gotoschool("Child")<br />if&nbsp;State&nbsp;=&nbsp;true&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;"happy&nbsp;times."<br />Else<br />&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;"So&nbsp;Badly"<br />End&nbsp;If<br />State&nbsp;=&nbsp;me.grow(5)<br />if&nbsp;State&nbsp;=&nbsp;true&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;"I&nbsp;Have&nbsp;so&nbsp;many&nbsp;friends."<br />Else<br />&nbsp;&nbsp;&nbsp;response.write&nbsp;"Meet&nbsp;a&nbsp;Ghost"<br />End&nbsp;If<br />State&nbsp;=&nbsp;me.grow(7)<br />if&nbsp;State&nbsp;=&nbsp;true&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;=&nbsp;me.meet("Tandy")<br />&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;"Go&nbsp;to&nbsp;OUC.Got&nbsp;so&nbsp;many&nbsp;things.I&nbsp;made&nbsp;a&nbsp;mistake,maybe!"<br />&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;Result&nbsp;'It&nbsp;writes&nbsp;that&nbsp;we&nbsp;have&nbsp;long&nbsp;happy&nbsp;times<br />Else<br />&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;"I&nbsp;will&nbsp;bw&nbsp;not&nbsp;here"<br />End&nbsp;If<br />State&nbsp;=&nbsp;me.grow(4)<br />response.write&nbsp;State<br />'It&nbsp;writes&nbsp;that&nbsp;i&nbsp;went&nbsp;to&nbsp;hangzhou&nbsp;after&nbsp;leaving&nbsp;OUC,and&nbsp;left&nbsp;my&nbsp;girl&nbsp;friend&nbsp;in&nbsp;Qingdao.<br /><br />NowState&nbsp;=&nbsp;me.getState(now())<br />if&nbsp;me.found(NowState)&nbsp;=&nbsp;"happy"&nbsp;Then<br />&nbsp;&nbsp;&nbsp;me.LiveTo("Tabdy")<br />Elseif&nbsp;me.found(NowState)&nbsp;=&nbsp;"unhappy"&nbsp;Then<br />&nbsp;&nbsp;&nbsp;me.Goto("Dead",Now())<br />End&nbsp;If<br /><br />me.state&nbsp;=&nbsp;"Dead"<br />me.Goto("Be&nbsp;a&nbsp;Ghost",dateadd("y",int(rnd()*400),now()))<br />Set&nbsp;me&nbsp;=&nbsp;Nothing<br /><br />]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">玩网游不会被封号的名字,搞笑</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_239.html" />
      <updated>2009-8-8 14:27:02</updated>
      <published>2009-8-8 14:27:02</published>
      <id>http://dev.mo.cn/article_239.html</id>
      <summary type="html">
      <![CDATA[不会被封的名字&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;.▂▃▄☆★取名"不认识"★☆▄▃▂&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"管理员,我举报"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"谁?"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"不认识"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"……滚……"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;2.▂▃▄☆★取名"请等等"★☆▄▃▂&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"管理员,我举报"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"谁?"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"请等等"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"好的,快点!"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;一分钟后……&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"到底是谁?"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"请等等啊!!!"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"等你个头啊,滚……"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;3.▂▃▄☆★取名:"就是我"★☆▄▃▂&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"我举报!!!"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"谁?"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"就是我"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"很好,成全你..封!"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"……救命啊……"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;4.▂▃▄☆★取名:"骗你的"★☆▄▃▂&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"管理员,我举报"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"又举报?谁?"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"骗你的"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"吃饱了没事干回家喝奶去,滚!"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;5.▂▃▄☆★&nbsp;取名"嘿嘿嘿嘿"&nbsp;★☆▄▃▂&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"管理员,有人用辅助,我举报"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"好的,是谁?"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"嘿嘿嘿嘿"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"……请问是谁?"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"嘿嘿嘿嘿"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"来人啊,拨打神经病医院电话……"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;6.▂▃▄☆★取名"我是你爸"★☆▄▃▂&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"管理员&nbsp;有人用辅助"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"谁?"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"我是你爸"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"我是你爷爷!"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;7.▂▃▄☆★取名'不是我'★☆▄▃▂&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"我举报,有人用辅助"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"****,谁?"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"不是我"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"???那是谁?"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"就不是我"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"你TM废话,不是你是谁?"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:举报人:"真的,不是我呀"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"滚***……"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;8.▂▃▄☆★取名"管理员啊"★☆▄▃▂&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"管理员哥哥,有人用辅助,我举报"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"好的,是谁?"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:是"管理员啊"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"谁?你说谁?"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"管理员啊"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"***,我有必要用辅助吗?灭了你!***."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;9.▂▃▄☆★取名:"本人已死"&nbsp;★☆▄▃▂&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"管理员,有人辅助,我举报"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"****小子我被玩了一天了,在报假案,俺宰了你,快说是谁?"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"本人已死"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"你***,死了闹什么闹,活了在来找我."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;10.▂▃▄☆★取名:打死我也不说&nbsp;★☆▄▃▂&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;举报人:"管理员&nbsp;我举报"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"又举报?谁?"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"打死我也不说"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"*!吃饱了没事干,滚***!"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;11.▂▃▄☆★取名"你去死"★☆▄▃▂&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"管理员,我举报"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"谁?"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"你去死"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"……敢骂我?你***,你给我滚~~~~~...我封你的号"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;12.▂▃▄☆★取名"你是猪"&nbsp;★☆▄▃▂&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"管理员&nbsp;有人用辅助"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"谁?"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"你是猪"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"你TMD是猪!"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;13.▂▃▄☆★取名:先给我发钱&nbsp;★☆▄▃▂&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"管理员,我举报."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"还举报?烦不烦啊?谁?"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"先给我发钱."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"@#%$^*&*(*&+"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;14.▂▃▄☆★取名&nbsp;"忘了叫啥"★☆▄▃▂&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报&nbsp;人&nbsp;:管理员.有人用辅助.我举报"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:&nbsp;好.告诉我他叫什么?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:&nbsp;"忘了叫啥"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:&nbsp;晕死.回去想想"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:&nbsp;不用想了管理员.我知道的"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:&nbsp;知道就说?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:&nbsp;忘了叫啥&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:&nbsp;回家睡觉去吧……&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;15.▂▃▄☆★取名:"逗你玩&nbsp;"&nbsp;★☆▄▃▂&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"管理员,我举报"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员&nbsp;:谁?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"逗你玩"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"想玩回家玩去.滚……"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;16.▂▃▄☆★取名"不能说"★☆▄▃▂&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"管理员,我举报"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"谁?"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"不能说"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:"别怕,有我给你撑腰,说!"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;举报人:"不能说,就是不能说"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;管理员:kao,不能说就滚……&nbsp;&nbsp;]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">好烦啊，我们的美工啊</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_238.html" />
      <updated>2009-8-7 9:33:07</updated>
      <published>2009-8-7 9:33:07</published>
      <id>http://dev.mo.cn/article_238.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;昨天，好不容易招来的美工被我们气走了，人家才来上了2天班，好郁闷。和小喻怎么留都留不住她，建站宝的升级准备工作做了一大部分了，购物车马上完成了，没了美工，工作真的很难进行下去，哎，好无语。]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">一个多月的上班生活</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_237.html" />
      <updated>2009-7-31 18:05:19</updated>
      <published>2009-7-31 18:05:19</published>
      <id>http://dev.mo.cn/article_237.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;上班一个多月了，刚到公司的第一天就开始了建站宝的开发，历时1个月左右，在7月20号匆匆忙忙把第一个版本发出去了。说实话，有点后怕，自己感觉程序还不是很成熟，还有很多小问题，功能也不是很完善，不知道会不会对以后的版本有影响。<br />&nbsp;&nbsp;&nbsp;一个多月基本都忙在建站宝的开发上了，有点累，还好是我喜欢的东西。最近半个多月发生了太多事，一个人承受了太多太多，感觉好累，好像安安静静地躺一会，哪怕是一小会。昨天晚上在公司玩了会才往家走，走在路上感觉腿发软，没有力气，想叫辆出租车了，一想才5里路，半个小时就回去了，还是慢慢走回家吧，走到半路还肚子痛，因此就走的更慢了，到家用了将近一个小时的时间。<br />&nbsp;&nbsp;&nbsp;特对不起女朋友，尽管最近给了她太多的压力，但这一切都是无意的，希望她能理解我，不管怎样都希望我们能好好在一起。想了一星期了，想让女朋友开学前来杭州玩玩，但不知道会怎样，好想她。<br />&nbsp;&nbsp;&nbsp;一直以来有种无形的压力在心头，并且是我无法摆脱的压力，也是不能逃避的压力，需要自己去淡化的压力。不管怎样，加油吧，天塌下来又怎么样了，还得生活(恐怕那时候就没有所谓的生活了)，给自己打气，努力，加油。。。。]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">常用CSS缩写语法总结</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_235.html" />
      <updated>2009-7-27 16:00:07</updated>
      <published>2009-7-27 16:00:07</published>
      <id>http://dev.mo.cn/article_235.html</id>
      <summary type="html">
      <![CDATA[使用缩写可以帮助减少你CSS文件的大小，更加容易阅读。css缩写的主要规则如下：<br /><br />颜色<br />16进制的色彩值，如果每两位的值相同，可以缩写一半，例如：<br />#000000可以缩写为#000;#336699可以缩写为#369;<br /><br />盒尺寸<br />通常有下面四种书写方法:<br /><br />property:value1;&nbsp;表示所有边都是一个值value1；&nbsp;<br />property:value1&nbsp;value2;&nbsp;表示top和bottom的值是value1,right和left的值是value2&nbsp;<br />property:value1&nbsp;value2&nbsp;value3;&nbsp;表示top的值是value1，right和left的值是value2，bottom的值是value3&nbsp;<br />property:value1&nbsp;value2&nbsp;value3&nbsp;value4;&nbsp;四个值依次表示top,right,bottom,left&nbsp;<br />方便的记忆方法是顺时针，上右下左。具体应用在margin和padding的例子如下：<br />margin:1em&nbsp;0&nbsp;2em&nbsp;0.5em;&nbsp;<br /><br />边框(border)<br />边框的属性如下：<br /><br />border-width:1px;&nbsp;<br />border-style:solid;&nbsp;<br />border-color:#000;&nbsp;<br />可以缩写为一句：border:1px&nbsp;solid&nbsp;#000;&nbsp;<br /><br />语法是border:width&nbsp;style&nbsp;color;&nbsp;<br /><br />背景(Backgrounds)<br />背景的属性如下：<br /><br />background-color:#f00;&nbsp;<br />background-image:url(background.gif);&nbsp;<br />background-repeat:no-repeat;&nbsp;<br />background-attachment:fixed;&nbsp;<br />background-position:0&nbsp;0;&nbsp;<br />可以缩写为一句：background:#f00&nbsp;url(background.gif)&nbsp;no-repeat&nbsp;fixed&nbsp;0&nbsp;0;&nbsp;<br /><br />语法是background:color&nbsp;image&nbsp;repeat&nbsp;attachment&nbsp;position;<br /><br />你可以省略其中一个或多个属性值，如果省略，该属性值将用浏览器默认值，默认值为：<br /><br />color:&nbsp;transparent&nbsp;<br />image:&nbsp;none&nbsp;<br />repeat:&nbsp;repeat&nbsp;<br />attachment:&nbsp;scroll&nbsp;<br />position:&nbsp;0%&nbsp;0%&nbsp;<br />字体(fonts)<br />字体的属性如下：<br /><br />font-style:italic;&nbsp;<br />font-variant:small-caps;&nbsp;<br />font-weight:bold;&nbsp;<br />font-size:1em;&nbsp;<br />line-height:140%;&nbsp;<br />font-family:"Lucida&nbsp;Grande",sans-serif;&nbsp;<br />可以缩写为一句：font:italic&nbsp;small-caps&nbsp;bold&nbsp;1em/140%&nbsp;"Lucida&nbsp;Grande",sans-serif;<br /><br />注意，如果你缩写字体定义，至少要定义font-size和font-family两个值。<br /><br />列表(lists)<br />取消默认的圆点和序号可以这样写list-style:none;,<br /><br />list的属性如下:<br /><br />list-style-type:square;&nbsp;<br />list-style-position:inside;&nbsp;<br />list-style-image:url(image.gif);&nbsp;<br />可以缩写为一句：list-style:square&nbsp;inside&nbsp;url(image.gif);<br /><br />]]>
      </summary>
      <category term="" label="HTML/CSS" scheme="http://dev.mo.cn/cat_diary_8.html" />
   </entry>
   <entry>
      <title type="html">忽悠移动1860话务员小姐全记录!~!</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_233.html" />
      <updated>2009-7-22 10:13:34</updated>
      <published>2009-7-22 10:13:34</published>
      <id>http://dev.mo.cn/article_233.html</id>
      <summary type="html">
      <![CDATA[那天晚上在班来上晚自习课觉得无聊,所以就拿同学电话打1860忽悠服务小姐,自己的手机不愿意打,哈哈...过程如下!&nbsp;<br />第1个电话~!&nbsp;<br />拨叫方法:1860-1(普通话服务)-2(继续服务)-0(人工服务)&nbsp;<br />服务器:现在是*****号话务员为您服务~!&nbsp;<br />话务员小姐:先生,有什么要服务的吗?&nbsp;<br />秋木:你猜我是谁?&nbsp;<br />话务员小姐:........&nbsp;<br />秋木:你猜嘛!&nbsp;<br />话务员小姐:先生,如果没什么其他要服务的我们将挂断电话,再见!&nbsp;<br />秋木:......&nbsp;<br /><br />第2个电话~!&nbsp;<br />拨叫方法:1860-1(普通话服务)-2(继续服务)-3(投诉建议)&nbsp;<br />服务器:现在是*****号话务员为您服务~!&nbsp;<br />话务员小姐:先生,请问有什么问题吗?&nbsp;<br />秋木:我要投诉~!&nbsp;<br />话务员小姐:先生有什么要投诉的?&nbsp;<br />秋木:刚才嫩有个小姐挂我电话~!&nbsp;<br />话务员小姐:几号小姐?他为什么挂您电话?&nbsp;<br />秋木:我忘了多少号了,反我记得是个女的!嫩帮我查查.我刚说了一句话,他就把我电话挂了!&nbsp;<br />话务员小姐:我们这都是女的....先生请问您说什么?&nbsp;<br />秋木:我就说你猜我是谁?...他直接就给挂了.!&nbsp;<br />话务员小姐:.......啊.啊.啊....?!&nbsp;<br />秋木:他猜不出来,你猜我是谁?&nbsp;<br />话务员小姐:先生...再见&nbsp;<br />秋木:.......&nbsp;<br /><br />第3个电话~!&nbsp;<br />拨叫方法:1860-1(普通话服务)-2(继续服务)-0(人工服务)&nbsp;<br />服务器:现在是*****号话务员为您服务~!&nbsp;<br />话务员小姐:先生,有什么要服务的吗?&nbsp;<br />秋木:小姐,麻烦问一下,我今天买了个100的冲值卡已经不好用~!&nbsp;<br />话务员小姐:先生,请问嫩在哪买的?&nbsp;<br />秋木:我在台东联通营业厅买的~!&nbsp;<br />话务员小姐:....(听到这位小姐在憋着笑..)先生,我们是移动的服务台~!&nbsp;<br />秋木:哎呀,嫩不是一家的?我还心思嫩一家的来~!&nbsp;<br />话务员小姐:先生,我们真不是一家的!&nbsp;<br />秋木:那你没有利用价值了....再见&nbsp;<br />话务员小姐:......&nbsp;<br /><br />第４个电话~!&nbsp;<br />拨叫方法:1860-1(普通话服务)-2(继续服务)-3(投诉建议)&nbsp;<br />服务器:现在是*****号话务员为您服务~!&nbsp;<br />话务员小姐:先生,有什么要服务的吗?&nbsp;<br />秋木:我带投诉...哎哎...我带投诉.....&nbsp;<br />话务员小姐:先生您先冷静一下,有什么要投诉的?&nbsp;<br />秋木:我今天再嫩营业厅买了个东西不好用...&nbsp;<br />话务员小姐:请问嫩买的是什么?&nbsp;<br />秋木:皮搋子...&nbsp;<br />话务员小姐:..(这位小姐以为自己听错了)先生,什么?&nbsp;<br />秋木:我说,投厕所用的皮搋子...&nbsp;<br />话务员小姐这小姐郁闷了....-_-!)先生,你说什么????&nbsp;<br />秋木:就是扑哧扑哧,投厕所的皮搋子.....&nbsp;<br />话务员小姐:........先生.再见-_-|||&nbsp;<br /><br />第5个电话~!&nbsp;<br />拨叫方法:1860-1(普通话服务)-2(继续服务)-3(投诉建议)&nbsp;<br />服务器:现在是*****号话务员为您服务~!&nbsp;<br />话务员小姐:先生,有什么要服务的吗?&nbsp;<br />秋木:我今天在嫩营业厅买了个50的充值卡出了点问题....&nbsp;<br />话务员小姐:先生请问什么问题?&nbsp;<br />秋木:我没给钱....哎(←这个字调号发三声)...我没给钱...哈哈!&nbsp;<br />话务员小姐:....先生....~~!~!~!-_-!&nbsp;<br />秋木:哈哈哈哈...&nbsp;<br />话务员小姐:.....-_-&nbsp;<br /><br />第6个电话~!&nbsp;<br />拨叫方法:1860-1(普通话服务)-2(继续服务)-3(投诉建议)&nbsp;<br />服务器:现在是*****号话务员为您服务~!&nbsp;<br />话务员小姐:先生,有什么要服务的吗?&nbsp;<br />秋木:我要投诉..&nbsp;<br />话务员小姐:请问什么事?&nbsp;<br />秋木:俺家刚买的牛不产奶....!!!!!&nbsp;<br />话务员小姐这小姐直接塄了)先.........生,怎....么...回.....事?&nbsp;<br />秋木:俺家刚买的牛不产奶,tmd全是蜗牛...&nbsp;<br />话务员小姐小姐忍住笑声,感觉快喷了..)先生,再见....!&nbsp;<br />秋木:...俺下半年可怎么过....?~!救命呀...全是蜗牛...&nbsp;<br /><br />第7个电话~!这是我最满意的,服务态度相当好~!而且很有耐心拨叫方法:1860-1(普通话服务)-2(继续服务)-0(人工服务)&nbsp;<br />服务器:现在是*****号话务员为您服务~!&nbsp;<br />话务员小姐:先生,有什么要服务的吗?&nbsp;<br />秋木:我今天新买的手机卡,想咨询一下!&nbsp;<br />话务员小姐:先生,请说!&nbsp;<br />秋木:我先问问嫩这个1860收费吗?&nbsp;<br />话务员小姐:我们服务是免费的!&nbsp;<br />秋木:免费?你是不是在搞笑?还有这种好事?&nbsp;<br />话务员小姐:真的是完全免费的!&nbsp;<br />秋木:太好了,那就聊吧....&nbsp;<br />话务员小姐:-_-!好..好..呀...先生,很愿意接受您的咨询!&nbsp;<br />秋木:我不是刚该的手机卡,一条短信多少钱?&nbsp;<br />话务员小姐:平均每条5分多..每月360条!&nbsp;<br />秋木:昂.那如果我360条7天发完了多少钱?&nbsp;<br />话务员小姐:-_-|||....这个我们不知道!&nbsp;<br />秋木:除不尽是吧?那360条15天发完每天带多少钱?&nbsp;<br />话务员小姐:先生,您可以自己算一下!&nbsp;<br />秋木:我不识数.&nbsp;<br />话务员小姐:-_-o..&nbsp;<br />秋木:那我问问话费吧,一分钟多少钱?&nbsp;<br />话务员小姐:两角5分,先生&nbsp;<br />秋木:昂,那3分37秒多少钱?&nbsp;<br />话务员小姐:按4分钟算&nbsp;<br />秋木:4分17秒多少钱?&nbsp;<br />话务员小姐:按5分钟算!&nbsp;<br />秋木:那5分09秒是不是按6分钟算?我聪明吧?&nbsp;<br />话务员小姐:-_-||||||.....是.是..呀!聪~~明~!&nbsp;<br />秋木:谢谢..谢谢,那我问一下gprs的问题吧!&nbsp;<br />话务员小姐小姐这时肯定很郁闷..心想还来?-_-)好呀,先生!&nbsp;<br />秋木:请问你们gprs多少钱?&nbsp;<br />话务员小姐:不一定的,不同的网站服务是不一样的,我们没法查询!&nbsp;<br />秋木:啊..你不厚道,你不告诉我,让网站坑我钱?讹人是吧???&nbsp;<br />话务员小姐:...不...是...呀.先生!您误会了.....gprs不是我们扣除的!&nbsp;<br />秋木:哎,这么回事!不好意思昂,我太冲动了,冲动是魔鬼!你的服务真好..声音也很好听..&nbsp;<br />话务员小姐:呵呵,先生,这是应该的...&nbsp;<br />秋木:要不说嘛.嫩联通服务就是好!&nbsp;<br />话务员小姐:先生,我们是移动的!&nbsp;<br />秋木:啊?移动?我晕,我打错了~!不好意思昂...拜拜...&nbsp;<br />话务员小姐:-_-|||||||||||||||........(持续吐血中.....)&nbsp;]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">我国主要城市日全食见食时间表</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_232.html" />
      <updated>2009-7-21 22:45:22</updated>
      <published>2009-7-21 22:45:22</published>
      <id>http://dev.mo.cn/article_232.html</id>
      <summary type="html">
      <![CDATA[　　我国主要城市日全食见食时间表(7月22日)：<br /><br />　　地名&nbsp;　&nbsp;初亏&nbsp;&nbsp;&nbsp;全食始(食既)&nbsp;&nbsp;&nbsp;食甚&nbsp;&nbsp;&nbsp;全食终(生光)&nbsp;&nbsp;&nbsp;复圆<br /><br />　　上海&nbsp;8时23分25秒&nbsp;9时36分44秒&nbsp;9时39分16秒&nbsp;9时41分49秒&nbsp;11时01分36秒<br /><br />　　重庆&nbsp;8时07分54秒&nbsp;9时12分59秒&nbsp;9时15分08秒&nbsp;9时17分17秒&nbsp;10时30分34秒<br /><br />　　常州&nbsp;8时21分44秒&nbsp;9时35分23秒&nbsp;9时36分28秒&nbsp;9时37分34秒&nbsp;10时57分55秒<br /><br />　　无锡&nbsp;8时22分03秒&nbsp;9时35分10秒&nbsp;9时37分05秒&nbsp;9时39分01秒&nbsp;10时58分48秒<br /><br />　　苏州&nbsp;8时22分21秒&nbsp;9时35分13秒&nbsp;9时37分41秒&nbsp;9时40分10秒&nbsp;10时59分41秒<br /><br />　　杭州&nbsp;8时21分26秒&nbsp;9时34分11秒&nbsp;9时36分55秒&nbsp;9时39分40秒&nbsp;10时59分21秒<br /><br />　　宁波&nbsp;8时23分07秒&nbsp;9时37分20秒&nbsp;9时39分34秒&nbsp;9时41分50秒&nbsp;11时02分44秒<br /><br />　　嘉兴&nbsp;8时22分20秒&nbsp;9时35分01秒&nbsp;9时37分59秒&nbsp;9时40分57秒&nbsp;11时00分21秒<br /><br />　　湖州&nbsp;8时21分31秒&nbsp;9时33分50秒&nbsp;9时36分45秒&nbsp;9时39分41秒&nbsp;10时58分50秒<br /><br />　　绍兴&nbsp;8时21分52秒&nbsp;9时35分19秒&nbsp;9时37分42秒&nbsp;9时40分05秒&nbsp;11时00分26秒<br /><br />　　舟山&nbsp;8时23分54秒&nbsp;9时38分01秒&nbsp;9时40分38秒&nbsp;9时43分16秒&nbsp;11时03分53秒<br /><br />　　合肥&nbsp;8时18分39秒&nbsp;9时30分48秒&nbsp;9时31分48秒&nbsp;9时32分49秒&nbsp;10时52分07秒<br /><br />　　芜湖&nbsp;8时19分37秒&nbsp;9时31分06秒&nbsp;9时33分38秒&nbsp;9时36分10秒&nbsp;10时54分45秒<br /><br />　　马鞍山&nbsp;8时19分57秒&nbsp;9时32分15秒&nbsp;9时33分52秒&nbsp;9时35分29秒&nbsp;10时54分47秒<br /><br />　　铜陵&nbsp;8时18分49秒&nbsp;9时29分47秒&nbsp;9时32分39秒&nbsp;9时35分31秒&nbsp;10时53分46秒<br /><br />　　安庆&nbsp;8时17分46秒&nbsp;9时28分30秒&nbsp;9时31分15秒&nbsp;9时34分01秒&nbsp;10时52分15秒<br /><br />　　黄山&nbsp;8时18分58秒&nbsp;9时32分40秒&nbsp;9时33分29秒&nbsp;9时34分19秒&nbsp;10时55分27秒<br /><br />　　巢湖&nbsp;8时19分10秒&nbsp;9时30分47秒&nbsp;9时32分46秒&nbsp;9时34分46秒&nbsp;10时53分29秒<br /><br />　　六安&nbsp;8时17分45秒&nbsp;9时28分58秒&nbsp;9时30分29秒&nbsp;9时32分00秒&nbsp;10时50分31秒<br /><br />　　宣州&nbsp;8时19分55秒&nbsp;9时31分26秒&nbsp;9时34分17秒&nbsp;9时37分10秒&nbsp;10时55分47秒<br /><br />　　贵池&nbsp;8时18分19秒&nbsp;9时29分13秒&nbsp;9时32分03秒&nbsp;9时34分54秒&nbsp;10时53分10秒<br /><br />　　九江&nbsp;8时16分19秒&nbsp;9时28分46秒&nbsp;9时29分23秒&nbsp;9时30分00秒&nbsp;10时50分15秒<br /><br />　　武汉&nbsp;8时14分53秒&nbsp;9时23分56秒&nbsp;9时26分39秒&nbsp;9时29分24秒&nbsp;10时46分15秒<br /><br />　　黄石&nbsp;8时15分31秒&nbsp;9时25分32秒&nbsp;9时27分53秒&nbsp;9时30分16秒&nbsp;10时48分05秒<br /><br />　　荆州&nbsp;8时12分48秒&nbsp;9时20分47秒&nbsp;9时23分21秒&nbsp;9时25分57秒&nbsp;10时41分56秒<br /><br />　　宜昌&nbsp;8时12分11秒&nbsp;9时19分27秒&nbsp;9时22分07秒&nbsp;9时24分48秒&nbsp;10时40分01秒<br /><br />　　荆门&nbsp;8时13分09秒&nbsp;9时20分58秒&nbsp;9时23分32秒&nbsp;9时26分07秒&nbsp;10时41分48秒<br /><br />　　鄂州&nbsp;8时15分25秒&nbsp;9时25分00秒&nbsp;9时27分37秒&nbsp;9时30分14秒&nbsp;10时47分37秒<br /><br />　　孝感&nbsp;8时14分41秒&nbsp;9时23分25秒&nbsp;9时26分08秒&nbsp;9时28分53秒&nbsp;10时45分22秒<br /><br />　　黄冈&nbsp;8时15分25秒&nbsp;9时24分56秒&nbsp;9时27分35秒&nbsp;9时30分15秒&nbsp;10时47分33秒<br /><br />　　咸宁&nbsp;8时14分35秒&nbsp;9时24分52秒&nbsp;9时26分31秒&nbsp;9时28分12秒&nbsp;10时46分26秒<br /><br />　　随州&nbsp;8时14分36秒&nbsp;9时24分08秒&nbsp;9时25分30秒&nbsp;9时26分53秒&nbsp;10时44分02秒<br /><br />　　恩施&nbsp;8时10分28秒&nbsp;9时16分50秒&nbsp;9时19分23秒&nbsp;9时21分58秒&nbsp;10时36分26秒<br /><br />　　成都&nbsp;8时07分05秒&nbsp;9时11分06秒&nbsp;9时12分47秒&nbsp;9时14分29秒&nbsp;10时26分22秒<br /><br />　　自贡&nbsp;8时06分44秒&nbsp;9时10分55秒&nbsp;9时13分01秒&nbsp;9时15分07秒&nbsp;10时27分27秒<br /><br />　　遂宁&nbsp;8时07分51秒&nbsp;9时12分09秒&nbsp;9时14分25秒&nbsp;9时16分43秒&nbsp;10时28分59秒<br /><br />　　内江&nbsp;8时07分01秒&nbsp;9时11分08秒&nbsp;9时13分26秒&nbsp;9时15分45秒&nbsp;10时27分59秒<br /><br />　　乐山&nbsp;8时06分15秒&nbsp;9时09分31秒&nbsp;9时11分54秒&nbsp;9时14分19秒&nbsp;10时25分38秒<br /><br />　　南充&nbsp;8时08分22秒&nbsp;9时13分10秒&nbsp;9时15分12秒&nbsp;9时17分15秒&nbsp;10时30分00秒<br /><br />　　广安&nbsp;8时08分30秒&nbsp;9时13分16秒&nbsp;9时15分42秒&nbsp;9时18分09秒&nbsp;10时30分56秒<br /><br />　　达州&nbsp;8时09分34秒&nbsp;9时15分44秒&nbsp;9时17分07秒&nbsp;9时18分30秒&nbsp;10时32分34秒<br /><br />　　雅安&nbsp;8时06分05秒&nbsp;9时08分57秒&nbsp;9时11分16秒&nbsp;9时13分36秒&nbsp;10时24分24秒<br /><br />　　眉山&nbsp;8时06分35秒&nbsp;9时09分52秒&nbsp;9时12分14秒&nbsp;9时14分38秒&nbsp;10时25分53秒<br /><br />　　资阳&nbsp;8时07分05秒&nbsp;9时10分46秒&nbsp;9时13分11秒&nbsp;9时15分37秒&nbsp;10时27分18秒<br /><br />　　康定&nbsp;8时05分34秒&nbsp;9时08分06秒&nbsp;9时10分10秒&nbsp;9时12分16秒&nbsp;10时22分38秒<br /><br />]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">建站宝(EBdiy)正式发布了，完全免费、绝对开源</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_231.html" />
      <updated>2009-7-20 22:38:06</updated>
      <published>2009-7-20 22:38:06</published>
      <id>http://dev.mo.cn/article_231.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;EBdiy企业建站宝官方发布网址：<a href="http://www.ebdiy.com" target="new"><span style="color:#FF0000;"><span style="font-size:16px;">www.ebdiy.com</span></span></a>，该系统所有的代码程序、企业网站模板免费开源下载，<br />欢迎大家下载使用，在发布之日，对提供优秀模板的用户，经EBdiy建站宝小组审核通过，我们将赠送空间和<br />域名，EBdiy建站宝开发团队欢迎大家踊跃下载和提供模板，空间域名数量有限，送完为止！<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;EBdiy企业建站宝是一款开源免费的企业建站系统，该系统做到企业站动态模版化，代码界面分离，是一<br />套为网站用户提供无技术门坎、操作简单、维护方便、功能强大、&nbsp;安全可靠的建站工具。网站模版丰富，可<br />任您满意选择，让您在几分钟内快速掌握并拥有自己理想的网站。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;官方网站：<a href="http://www.ebdiy.com" target="new"><span style="color:#FF0000;"><span style="font-size:16px;">www.ebdiy.com</span></span></a><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;EBdiy建站宝开发团队联系方式：<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;联系电话：0571-88276011&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0571-88276022<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;客服qq&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;客服小喻:89931633&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E_mial:yujc@eb.com.cn<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;客服小沈:89931685&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E_mial:shenyj@eb.com.cn<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;客服小张:89931669&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;E_mial:zhanghg@eb.com.cn<br /><br /><br /><span style="font-size:20px;"><b><span style="color:#FF0000;">安装注意事项:</span></b></span><br /><br />请首先运行instal/index.asp进行安装，程序将安装到本目录，若程序未删除install文件夹，为了安全起见，请手动删除。<br /><br />请尽量在不含有空格或中文的目录下安装，在安装之前要注意设置安装目录得权限，以允许程序的正常安装<br />否则可能会出现500错误<br />&nbsp; &nbsp; &nbsp; &nbsp; Microsoft&nbsp;VBScript&nbsp;runtime&nbsp;(0x800A0046)<br />&nbsp; &nbsp; &nbsp; &nbsp; Permission&nbsp;denied<br /><br /><br />安装完成后，一定要进入后台，选一套模板，否则会出现"读取模板错误"的错误信息]]>
      </summary>
      <category term="" label="其他" scheme="http://dev.mo.cn/cat_diary_18.html" />
   </entry>
   <entry>
      <title type="html">就这样了</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_230.html" />
      <updated>2009-7-19 19:12:31</updated>
      <published>2009-7-19 19:12:31</published>
      <id>http://dev.mo.cn/article_230.html</id>
      <summary type="html">
      <![CDATA[就这样了~]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">欲哭无泪</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_229.html" />
      <updated>2009-7-19 15:48:51</updated>
      <published>2009-7-19 15:48:51</published>
      <id>http://dev.mo.cn/article_229.html</id>
      <summary type="html">
      <![CDATA[真他妈的想扇自己，干了件天下最蠢的蠢事~~~~，做事谨慎些，不要贪图便宜。。。果子很苦的，明天系统上线，今天又冒出这么的事，天哪。。。午饭都吃不下去了。]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">关于无组件类的使用说明文档</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_228.html" />
      <updated>2009-7-18 0:17:45</updated>
      <published>2009-7-18 0:17:45</published>
      <id>http://dev.mo.cn/article_228.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;近来发现很多"盟友"使用我的这个类，反映也不错，也有很多人提出修改意见，先谢谢大家的支持。以前写过一个很详细的PDF格式的开发说明手册，里面的内容很详尽，甚至说有点罗嗦。觉得写一个简洁明了的帮助文档非常必要，让大家在最短的时间内学会使用这个类，毕竟这个类使用起来非常方便，你只需要做很少的工作就能实现安全的上传。<br />&nbsp;&nbsp;由于刚来杭州上班，手头上有一些紧急的项目要完成，除了修改一些技术BUG，没有对整个类进行大的修改，在手头上的系统完成后，一定会仔细修改这个类，并且写一个让用户最容易上手的文档，好实现ASP"简单"上传的目标。<br />&nbsp;&nbsp;我会努力，也希望大家能够支持。<br />&nbsp;&nbsp;很晚了，准备睡觉了。。。]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">BLOG程序小改版完成</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_227.html" />
      <updated>2009-7-12 4:29:22</updated>
      <published>2009-7-12 4:29:22</published>
      <id>http://dev.mo.cn/article_227.html</id>
      <summary type="html">
      <![CDATA[搞了一晚上，把自己的blog改版啦<br />具体改版内容如下。。。<br /><br />1.同时支持静态和动态<br />2.无需后台，任何用户可以在动态和静态之间无缝切换<br />如果访问<a href="http://dev.mo.cn/index.html" target="new">http://dev.mo.cn/index.html</a>，系统会自动识别为静态，链接将全部是静态链接<br />如果访问<a href="http://dev.mo.cn/index.asp" target="new">http://dev.mo.cn/index.asp</a>，系统会自动识别为动态，链接将全部是动链接(<span style="color:#FF0000;">测试完成，动态已取消，访问动态地址不会报错，但页面的链接保持静态</span>)<br /><br />欢迎网友进行测试并提出意见或建议，谢谢]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">一头猪重400斤，一座桥承重200斤，猪怎么过桥？</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_226.html" />
      <updated>2009-7-9 0:50:14</updated>
      <published>2009-7-9 0:50:14</published>
      <id>http://dev.mo.cn/article_226.html</id>
      <summary type="html">
      <![CDATA[题目：一头猪重400斤，一座桥承重200斤，猪怎么过桥？<br /><br />条件：<br /><br />1.猪是活猪，任何解决方案都不得切割猪<br /><br />2.故事发生在猪王国，不要引入人的因素<br /><br />3.是过桥，不是过河，不要说是游泳过去<br /><br />4.是过桥，不是过涧，不要说是飞过去丫<br /><br />5.桥是承重两百斤的桥，把桥挪到平地上抑或过另一座承重超过四百斤的桥都属改变性状<br /><br />6.不是文字游戏，不要说“猪晕过去了”<br /><br />答案汇编：<br /><br />1、PS张过了桥的照片，让政府出面证实猪是过了桥的，谁敢说它没有过！<br /><br />2、猪把体内注的水放掉就过去了···<br /><br />3、叫上统计局的“砖家”，只要统计局一来,四万斤的猪也能给你弄过去&nbsp;···<br /><br />4、地球是圆的，反个方向走过去不就行了。<br /><br />5、把桥命名为有中国特色的社会主义桥，再让CCTV“现场直播”，大家就都能看到它过去了。<br /><br />6、找个领导（譬如淋输记、曾小狗）张嘴一吹就过去了，别说400斤，4000斤都能安然无恙的过桥。<br /><br />7、花点钱，给猪贴个ZF认可的标签，此猪200斤；或者花点钱，请专家出据报告，此桥承重400斤。<br /><br />8、进A股市场呆一段再出来就可以过了···<br /><br />9、一只大河蟹托过去，河蟹的力量最大了，400斤不在话下！所以咱们要共建河蟹社会···<br /><br />10、周正龙手拿一架佳能数码相机，一边调着焦距一边念叨：“靠，400斤算什么？800斤我也能叫它过桥”于是按下了快门。很快就打印出来一张猪的照片。只见周正龙高举着猪的照片，走上桥头：“我才一百来斤，我过！”很快，林业局发布新闻：“谁说400斤的猪，过不了200斤承重的桥。”<br /><br />11、桥比猪短，猪没有全部站在桥上&nbsp;···<br /><br />12、是只母猪，过桥前生了10只小猪“`一只20J&nbsp;“`HOHO&nbsp;“然后全过去了···<br /><br />13、从相对论来说，速度越快质量越轻，所以猪要过去就必须达到某个速度，也就是说跑过去：猪对地面产生的压力就为&nbsp;mg/2&nbsp;（g&nbsp;=&nbsp;9.8&nbsp;地表重力加速度）<br /><br />mg/2&nbsp;=&nbsp;mv**2/r<br />v&nbsp;=&nbsp;(gr/2)**0.5&nbsp;=&nbsp;0.7071<br />第一宇宙速度&nbsp;=&nbsp;7.9千米/秒<br /><br />如果这头猪跑的够快的话，即它的速度超过&nbsp;7.9千米/秒&nbsp;就可以安全过桥&nbsp;···<br /><br />14、这头猪马上改名朱坚强，只靠雨水存活1个月后，体重从400降到150，可轻松过桥···<br /><br />15、猪肉一降价，自然就可轻松过桥啦···<br /><br />16、反方向想，猪正面的系只可以承受200斤的桥，将猪反方向行走，就等于猪已经過桥啦！！！<br /><br />17、猪直接可以行过桥，因为只猪名叫四百斤，不是猪重四百斤···<br /><br />18、寄快递（EMS）···<br /><br />19、过桥这个概念有两种，走桥的纵向是过桥，走桥的横向也可以叫过桥；走横向的过桥，举例来说比如，一只船从桥下驶过，可以说是过桥。通常我们说过天安门，并非穿过了天安门城楼，而是从侧面过去了。过桥一样。这个猪只需要从一端走过即可，和承重能力无关。<br /><br />20、假定这坐桥的长度这只猪会走N步，就是N步过桥。猪迈出第一步的时候，桥会塌吗？显然不会。迈出第二步的时候，桥会塌吗？显然也不会。迈出第三步的时候，桥会塌吗？显然也不会。第四步呢？第五步呢？~~~~~~55步呢？~~~~~99步呢？<br />于是得出结论在这只四百斤的猪走完桥长，迈过N步后，桥仍然完好无损。于是大摇大摆的过去了。<br /><br />21、桥变说<br /><br />1）、这座桥是承重200斤的，是说桥建成初期标称的理论承重值是200斤，这种标称承重值其实有保守的成分，也就是说桥可以承受的极限即便是&nbsp;250斤，或者300，400斤也会“保守的说承重200斤”；这个现象如同食品的保质期，标称是12个月的食品，你即便13个月去吃亦然不会有问题，而且味道不会有变化，14~15个月去吃同样也可能得到相同的味道。如此，这座桥完全，而且肯定可以通过400斤重的猪。<br /><br />2）、这座桥是承重200斤的，是说桥建成初期标称的理论承重值是200斤。根据分子原子运动原理，建造桥的结构之间，也就是每个基本部件之间存在着分子原子的运动，而且是一个组件融合的过程。举例：如果这座桥是用大冰块建造的，建造初期桥是承重200斤的，可是冰块之间水分子原子是互相融合运动的，慢慢的结构成一个整体。注意，一个整体的冰结构一定比搭建初期的建筑冰结构的承重能力强很多很多的哦。所以，初期结构承重不能证明当前结构承重，这只&nbsp;400斤重的猪就安然过桥了<br /><br />22、意识说<br /><br />1）、猪过桥的目的是到达彼岸，其实人生如猪孤苦无依总在大海漂泊一样寻找彼岸，佛语有云“苦海无边回头是岸”，彼岸看似遥远而不可及，事实上不过是“回头”这么简单。猪想通这个道理后，思想达到了彼岸就已经过了桥。<br /><br />2）、儒家提倡“知其不可为而为之”，过桥这件事情就是一件知其不可而为的事情，有这样的勇气去做，不论成功与否我们都会认为他过去了，或者追认它为“过桥英雄”，他的精神已经超越了这座桥本身。<br /><br />易中天版：<br /><br />400斤的猪居然要去过承重200斤的桥？这下它的朋友一听吃惊坏了！它要过桥？它没事过什么桥啊？因为它的朋友们知道，过桥那不是一般猪能过的啊？那哪是一般猪能过的?于是它们马上跑去劝它。说你不要过桥了，你一过桥就怎么样怎么样的，大概意思就是过桥的时候，桥塌了你就完了，用现代话讲就是&nbsp;OVER&nbsp;了。其实400斤的猪过承重200斤桥有危险吗？有人说了它毕竟有前辈啊，它的前辈就成功的过了桥。其实正史不是这样，据《历代杂食类动物过桥志－豚之父别传》中记载，其实豚的父亲并没有过桥。所以其实豚的父亲过桥只是后人的杜撰。那么据《历代飞禽鸟类动物过桥志－动物鹰传》记载：豚之父欲过桥，恐桥毁，欲飞未果，动物鹰出爪，逐载豚父飞过桥也。所以啊，豚的父亲其实是被动物鹰带过桥去的。<br /><br />刘心武版：<br /><br />其实，要解答400斤的猪怎么过承重200斤的桥，我们要从字面上分析一下，我也是参考了很多史料得出的结论。首先我们看“猪”这个字是什么意思呢？那么这就涉及到《红楼梦》里的黑话了，曹雪芹在创作的时候因为有些东西是不能直接往书中写的，所以就用了很多黑话，这些是非常有研究价值的。可能观众朋友们不懂，其实我只要帮你们稍微解释一下你们就明白了。猪在12生肖里排位是多少呀？12位，最后一位呀，其实这就暗示我们是最小的意思。再看看承重&nbsp;200斤的桥是什么意思呢？什么桥能承重200斤呀，一定是一座小桥呀。那这小桥代表什么呢？我查找了许多资料，找到了“遥想公瑾当年，小乔出嫁了”小乔，那是具有皇室血统的女成员呀。那么就是说那个猪是具有皇室血统最小的女皇室成员的小母猪呀。这其实就说明了，这个小母猪其实就是前太子的后代，而皇室成员的小母猪过桥，应该就是它要采取行动了。那么是什么样的行动呢？<br /><br />周汝昌版：<br /><br />400斤的猪怎么过承重200斤的桥？其实是一们很深奥的科学，里面有太多东西让我们深思了。我们首先来分析一下猪：曹雪芹为什么要提到猪？《红楼梦》里是没有废话的，既然提到了就必然有他的价值。那么400斤的猪价值在什么地方？嗯？其实啊，“这里面倾注了作者曹雪芹很深的情感在里面。”12生肖就代表金陵12钗，那么这里面其实就暗示了很多东西。首先，大观园里有多少人和属猪的有关？王熙凤，还有一个，就是史湘云。凤和麒麟都是祥瑞，是同类的。那么，我们都知道了，王熙凤已经嫁了人了。她就被排除了，唯一剩下的未婚的就是史湘云。其实啊，400斤的猪过承重200斤的桥正好暗示了宝玉最后娶了史湘云。而史湘云恰好有个金猪。在这里我们不能不敬佩作者的良苦用心啊。那么400斤的猪过承重200斤的桥，想想，宝玉娶史湘云难度多大呀？<br /><br />阎崇年版：<br /><br />400斤的猪怎么过承重200斤的桥，可以写一部一百万字的大书都不为过。但是我们今天只有四十多分钟的时间，我想概略来说一下。明朝的主要优长是坚城，坚城下面都布上一些桥。后金的主要长处是骑兵，骑兵善于野战，基本都是骑着猪。和努尔哈赤的铁猪争锋，造一些承重200斤桥这叫以静制动、以主待客，反了，你出了城了，你过那桥，变成以动制静，反主为客，放弃城战，进行野战。其实啊，这个早有人批评过了。我觉得400斤的这个猪，它身上有一股气，就叫做正气，用孟子的话来说，叫做“浩然正气”；它要过承重200斤的桥，身上有一种精神，叫爱国精神，他这个爱国精神，是强烈的爱国，不是一般的说出来的。这个浩然正气和爱国精神深深的震撼了我，我愿意把我受到的这个震撼传递给全国广大电视观众，也震撼他们。从哲理上来说，死是一个大关节，也是一种大境界，400斤的猪过桥摔死，虽死犹生，因为他精神超越时空，永存。<br /><br />纪连海版：<br /><br />我们应该怎么来正确的看待400斤的猪过承重200斤桥的这件事呢？首先，我们应该理性的分析一下这件事情的起因。当我们真的在书中看到，或听到&nbsp;400斤的猪怎么过承重200斤的桥。我们脑子里的第一反应是什么？危险！哎，400斤的小猪本来是个非常弱小的动物，它想要过承重200斤的桥，这可以说是非常冒险的事情。但是呢，我们要理性的看待这件事的话，其实事实并不想我们想象当中的那样。首先我们先来看看400斤的猪，那么小的猪是什么样的呢？清史里的记载是哺乳动物、身体肥壮、四肢短小，猪其实不笨，速度快，意思是很灵活。啊，看上去啊，过承重200斤的桥是比较危险。但是也有好处，什么呢？灵活，速度快，所以呢它桥塌的机会也比较低，你要是换个比较笨比较大的动物，比如骆驼啊大象啊什么的那肯定就把桥压塌了。第二呢，就是猪要过的桥，这个也是有特殊原因的。怎么呢？它选择的时机非常恰当，什么时机呢？晚上，晚上过桥上人非常少。车呢？您别忘了那是什么时代。清朝啊！那时候哪有汽车啊。自行车都没有，当时是什么？是马车，速度比较慢。这样,你就算闭着眼睛飞奔过桥，其实都是十分安全的。<br /><br />孔庆东版：<br /><br />我今天准备“漫谈400斤的猪怎么过承重200斤的桥”，为什么叫漫谈呢？因为我感觉400斤在猪怎么过承重200斤的桥是说不完的，这个话题可以无穷地拓展出去，起码在若干年内是说不完的。我自己也写过一些有关400斤的猪怎么国承重200斤桥的东西，我也在一些大学、一些媒体上讲过这猪是怎么过桥的，每次都觉得意犹未尽。我们先看看金庸的原文：这是一条宽不过N丈的河，上面横架一条承重200斤的桥，桥头站着一头威武的体重400斤的猪。今天我们来欣赏和探讨是金庸小说中的爱情问题，而金庸笔下那些奇绝的爱情，有时候更令读者来深思，透过这些奇绝的爱情我们看到一些奇绝的人性，奇绝的人生。像这头要飞身过桥的猪，明知过桥有杀身之祸，可它偏要过桥去华山论剑，这就是爱情的力量。像郭靖，像杨过这样大侠的爱情，其实金庸小说他写爱情令人佩服，不仅仅写这些高山大河式的爱情，连这头猪的爱情，我给它命名过一个词，就叫做“猪的爱情”，猪的爱情都写得非常好，这是他跟其他武侠小说言情小说家相比，更高出一筹的地方，使我们觉得他笔下的爱情，不仅仅是琳琅满目，而且真是惊心动魄，刻骨铭心。<br /><br />于丹版：<br /><br />400斤的猪怎么过承重200斤的桥是政治？政治并不一定让猪都过上一种物质文明上的发达生活，它仅仅是一个标志，这些都是来源于信仰。这就是一种理念，他认为信仰的力量足矣把一群猪凝聚起来。其实猪的视力是有两种功能的，一个是向外去无限等待喂食的人，另外是向内无限深情的注视槽里的食物。400&nbsp;斤的猪过承重200斤的桥，能够带给它快乐的秘诀就是，必须亲自丈量桥面的每一步路。它敢于亮出自己的弱项，生和死只是一个形态的变化。它对待死的态度：①不怕死；②绝不找死。这是一种境界、感悟和超越。它觉是过桥只是一个瞬间，悟是一个过程，“无为而无不为”才是大境界。它坚持过桥，在它成长中一定有某种潜能从没有被开发出来。有些奇迹其实就是在坚持中完成，有些奇迹永远不是那些自认为最机灵和最聪明的人能做完成的。]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">艾恩Asp无组件带进度条上传最新更新（7.2日）</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_225.html" />
      <updated>2009-7-2 14:44:13</updated>
      <published>2009-7-2 14:44:13</published>
      <id>http://dev.mo.cn/article_225.html</id>
      <summary type="html">
      <![CDATA[<span style="color:#FF0000;"></span>&nbsp;<br />&nbsp;&nbsp;&nbsp;完全修正了在虚拟主机使用本程序是出现的js错误，主要原因是没有处理好JSON数据，导致解析错误，现已修正。<br /><br />&nbsp;&nbsp;&nbsp;请放心下载使用<br /><br />&nbsp;&nbsp;升级方法为:用本下载包内的JS文件夹内的<span style="color:#009900;">anplus.js</span>覆盖原来的<span style="color:#009900;">anplus.js</span>，打开<span style="color:#009900;">AjaxUploader.js</span>,在<span style="color:#FF0000;">var&nbsp;pro=_this.getInformation(msg);</span>前面加一句if(msg==null){return;}<br /><br />&nbsp;&nbsp;&nbsp;<a href="http://dev.mo.cn/source_188.html" target="new"><span style="font-size:24px;"><span style="color:#FF0000;"><b>下载地址</b></span></span></a>]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">对本人及建站宝的一个小声明，哈</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_224.html" />
      <updated>2009-7-1 20:23:18</updated>
      <published>2009-7-1 20:23:18</published>
      <id>http://dev.mo.cn/article_224.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;由于刚来杭州上班，工作比较忙，我发布的各种源码及作品没有及时更新及修改BUG，等系统开发完成后，会及时将现存的各种BUG修正。<br />&nbsp;&nbsp;从上周一到公司来之后就开始开发建站宝，以前公司发布过一个版本，主要用来测试用户的反应，我们正在开发的版本发出后，一定会给大家带来良好的用户体验，我们会加油，尽早让新版本发布。]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">呀呀呀呀呀呀呀呀呀呀</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_223.html" />
      <updated>2009-6-27 18:03:00</updated>
      <published>2009-6-27 18:03:00</published>
      <id>http://dev.mo.cn/article_223.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;这周公司双休，真不知道该干点什么。。。<br />&nbsp;&nbsp;&nbsp;今天睡了个懒觉，9点多才起来，没吃本来想在家里呆一天了，想想没什么事做就提着本本到公司来了，至少在公司能上网，还能写点东西。公司人不多，连姐回来待了一会就出去了，整个大办公室就我一个人。<br />&nbsp;&nbsp;&nbsp;XP用了很久了，现在上班了发现用起来很不方便，下午就把本本系统换成2003了，好多东西2003都不支持，郁闷的很，IE7还得必须要SP1以上的系统版本，300多M，在公司下载超慢，一下载就打不开网页，整整一下午就下了不到一半。想想自己的鞋子坏了，刚来也不知道哪里有卖的，就查了下最近的超市位置，然后跑了去，发现里面的东西好“便宜”，花120买了双打5.5折的鞋子，本来想再买点吃的了，没什么胃口就没有买。下午天一直阴沉沉的，很是不舒服，感觉风扇吹出来的风都是潮湿的。<br />&nbsp;&nbsp;&nbsp;6点喽，给老婆发的信息老婆也还没回，不知道忙啥去了。明天周日去干什么去呢，好迷茫。。。要不就在家睡一天觉吧。]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">来杭州两天了</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_222.html" />
      <updated>2009-6-24 13:27:55</updated>
      <published>2009-6-24 13:27:55</published>
      <id>http://dev.mo.cn/article_222.html</id>
      <summary type="html">
      <![CDATA[到杭州两天多了。。。第一次出来工作。。。贴几张图片<br /><br />住处距公司半个多小时的路，上下班要不行，我们住在22楼，本来房东今天要给我们安空调，但是不知道怎么就耽误了，得等到7月1号左右，好热啊。<br /><br /><a onfocus="this.blur()" href="upfiles/20090625082105733.jpg" target=new><img src="upfiles/20090625082105733.jpg" border="0" alt="´ڴ" onload="javascript:if(this.width>560)this.width=560" /></a><br /><br />住的小区<br /><br /><a onfocus="this.blur()" href="upfiles/hz/1.jpg" target=new><img src="upfiles/hz/1.jpg" border="0" alt="´ڴ" onload="javascript:if(this.width>560)this.width=560" /></a><br /><br />产品部办公室<br /><br /><a onfocus="this.blur()" href="upfiles/hz/2.jpg" target=new><img src="upfiles/hz/2.jpg" border="0" alt="´ڴ" onload="javascript:if(this.width>560)this.width=560" /></a><br /><br />上班要走的路（到公司要半个小时）<br /><br /><a onfocus="this.blur()" href="upfiles/hz/3.jpg" target=new><img src="upfiles/hz/3.jpg" border="0" alt="´ڴ" onload="javascript:if(this.width>560)this.width=560" /></a><br /><br />我的桌子<br /><br /><a onfocus="this.blur()" href="upfiles/hz/4.jpg" target=new><img src="upfiles/hz/4.jpg" border="0" alt="´ڴ" onload="javascript:if(this.width>560)this.width=560" /></a><br /><br />我的床（晚上有蚊子，在22楼比较少）<br /><br /><a onfocus="this.blur()" href="upfiles/hz/5.jpg" target=new><img src="upfiles/hz/5.jpg" border="0" alt="´ڴ" onload="javascript:if(this.width>560)this.width=560" /></a><br /><br />我的衣橱<br /><br /><a onfocus="this.blur()" href="upfiles/hz/6.jpg" target=new><img src="upfiles/hz/6.jpg" border="0" alt="´ڴ" onload="javascript:if(this.width>560)this.width=560" /></a><br /><a onfocus="this.blur()" href="upfiles/hz/7.jpg" target=new><img src="upfiles/hz/7.jpg" border="0" alt="´ڴ" onload="javascript:if(this.width>560)this.width=560" /></a><br /><br />上下楼都要用电梯，22层呀<br /><br /><a onfocus="this.blur()" href="upfiles/hz/8.jpg" target=new><img src="upfiles/hz/8.jpg" border="0" alt="´ڴ" onload="javascript:if(this.width>560)this.width=560" /></a><br /><br />杭州的自行车<br /><br /><a onfocus="this.blur()" href="upfiles/hz/9.jpg" target=new><img src="upfiles/hz/9.jpg" border="0" alt="´ڴ" onload="javascript:if(this.width>560)this.width=560" /></a><br /><br />上班路上的我<br /><br /><a onfocus="this.blur()" href="upfiles/hz/10.jpg" target=new><img src="upfiles/hz/10.jpg" border="0" alt="´ڴ" onload="javascript:if(this.width>560)this.width=560" /></a><br /><br />丰潭桥。。。潭潭潭。。。<br /><br /><a onfocus="this.blur()" href="upfiles/hz/11.jpg" target=new><img src="upfiles/hz/11.jpg" border="0" alt="´ڴ" onload="javascript:if(this.width>560)this.width=560" /></a><br /><br />我的办公桌，除了本本，啥也没有]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">到杭州了</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_221.html" />
      <updated>2009-6-22 12:39:52</updated>
      <published>2009-6-22 12:39:52</published>
      <id>http://dev.mo.cn/article_221.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;坐了一整天的火车，终于来到了杭州，下车第一感觉---热，也是阴天的原因，一直阴沉沉的。根据小沈的指点，自己坐公交车到了公司，公司不错，很多人，大家都很好，杭州市第一商务。<br />&nbsp;&nbsp;&nbsp;不论如何，要加油了。。。]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">PJBlog介绍</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_220.html" />
      <updated>2009-6-19 11:44:19</updated>
      <published>2009-6-19 11:44:19</published>
      <id>http://dev.mo.cn/article_220.html</id>
      <summary type="html">
      <![CDATA[<div align="center"><a onfocus="this.blur()" href="upfiles/20090619114230105.jpg" target=new><img src="upfiles/20090619114230105.jpg" border="0" alt="´ڴ" onload="javascript:if(this.width>560)this.width=560" /></a></div>　　PJBlog是由舜子（陈子舜，英文名字PuterJam，PJblog就是以他英文名字缩写命名的，他本人就职于腾讯公司QZONE开发组）所开发的一套开源免费的中文个人博客系统程序，采用asp+Access的技术，PJBlog同时支持简繁中文，UTF-8编码，相对于其他系统，PJBlog具有相当高的运作效能以及更新率，也支持目前Blog所使用的新技术。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:18px;"><b>系统配置：</b></span><br />&nbsp;&nbsp;&nbsp;&nbsp;服务器：Windows&nbsp;2000及IIS5.0以上，需要ADO数据库、FSO、XMLDOM、ADODB.stream、VBScript&nbsp;5.6以上脚本解释器等系统组件支持。&nbsp;<br />　　客户端：支持IE6.0及以上版本、Mozilla&nbsp;FireFox&nbsp;1.0及以上版本、Opear&nbsp;8及以上版本、Safari。客户端需要JavaScript脚本支持。原则上只要支持W3C网页标准的浏览器皆能正确浏览。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:18px;"><b>主要功能和特点：</b></span><br />　　支持全静态化、半静态化、动态化三种页面生成模式；&nbsp;<br />　　多浏览器相容，能够相容IE、Firefox、Safari等主流浏览器；&nbsp;<br />　　功能强大的文章编辑器，同时兼容两种编辑方式，在线编辑器采用FCKEditor；&nbsp;<br />　　PJBlog3采用的UBB编辑器由Blog作者独立开发，支持自定义面板和CSS，内建HTML转换UBB代码功能；&nbsp;<br />　　自定义模块，可以自己修改页面上的的布局。可以让不懂制作网页的用户也能自己增加和修改页面上的版块；&nbsp;<br />　　自定义Skin功能，随时可以给自己的Blog换上新的CSS样式界面；&nbsp;<br />　　自定义分类，可以同时定制外部连接分类和Blog内置分类，可以自定义分类显示的位置，由用户自己定义顶部导航条和侧边导航条；&nbsp;<br />　　权限分组，管理员还可以对每个分组成员指定上传文件的权限等等；&nbsp;<br />　　Blog数据采用缓存方式保存，减轻服务器负担和增加运行速度；&nbsp;<br />　　用户密码用SHA1算法加密。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:18px;"><b>PJblog3&nbsp;版权申明</b></span><br />　　PJBlog3程序版权归作者&nbsp;陈子舜(PuterJam)&nbsp;所有。&nbsp;使用者必须遵循&nbsp;创作共用（Creative&nbsp;Commons）&nbsp;协议&nbsp;你可以免费:&nbsp;拷贝、分发、呈现和表演当前作品,制作派生作品,但是不得移除&nbsp;PJBlog3&nbsp;标识。&nbsp;非商业用途。&nbsp;你不可将当前作品用于商业目的。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:18px;"><b>PJblog开发历程</b></span><br />　　PL-Blog&nbsp;1.0b(L-blog&nbsp;1.06的基础上修改)&nbsp;2004-8-20&nbsp;11:30&nbsp;发布<br />　　PL-Blog&nbsp;1.1&nbsp;2004-09-13发布<br />　　PL-Blog&nbsp;V1.2&nbsp;2004-09-13发布<br />　　PL-Blog&nbsp;1.2&nbsp;(SP2)&nbsp;2004-12-01发布<br />　　PL-Blog&nbsp;2&nbsp;2005-02-16开始制作<br />　　L-Blog&nbsp;1.2的升级(PL-Blog&nbsp;2)正式更名为PJ-Blog2&nbsp;2005-06-20<br />　　PJBlog2&nbsp;2005-07-26发布<br />　　PJBlog2&nbsp;2.1.0802&nbsp;2005-08-02发布<br />　　PJBlog2&nbsp;繁体中文发布站开通&nbsp;2005-09-05<br />　　PJBlog2&nbsp;v2.3.0905&nbsp;2005-09-06发布<br />　　PJBlog2&nbsp;v2.6&nbsp;2006-07-02发布<br />　　PJBlog2&nbsp;v2.7&nbsp;Build05&nbsp;2007-11-09发布<br />　　PJBlog3&nbsp;v2.8.5.150&nbsp;2008-08-25发布<br />　　PJBlog3.0&nbsp;最终版&nbsp;v3.0.6.170&nbsp;发布&nbsp;2009-2-24&nbsp;发布<br />　　PJBlog3&nbsp;3.1.6.227&nbsp;公测版本发布&nbsp;2009-5-26&nbsp;发布<br />　　......<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size:18px;"><b>PJblog3相关资源</b></span><br />　　随着PJBLOG3的开发，PJBLOG3项目已经架设到了Google&nbsp;Code上，项目所有进展情况及程序源码更新均会在Google&nbsp;Code和PJblog官方网站上及时公布。PJHOME&nbsp;BBS是PJblog的官方技术论坛，论坛汇集有PJblog基础使用教程及常用问题解决集、成千的PJblog皮肤、各种强大的功能扩展源码及绿色易用的后台插件，是pjblog用户使用交流的聚集地。<br />　　PJBlog3&nbsp;最终版主要更新功能<br />　　1.&nbsp;增加了'别名系统'，利于SEO。<br />　　以特定分类名作为目录名,比如&nbsp;<br />　　http://你的网址/article/分类目录自定义/生成页面自定义.html&nbsp;<br />　　后台操作FSO能准确&nbsp;移动&nbsp;删除&nbsp;更新&nbsp;文章<br />　　兼容日志加密功能<br />　　对SEO友好,使文章更容易本搜索引擎收录<br />　　2.&nbsp;修复了Cookie不能保存的问题。<br />　　3.&nbsp;修复了[mdown]标签在静态下失效的问题。<br />　　4.&nbsp;对友情链接的批量删除。<br />　　5.&nbsp;snail.rison进行了部分BUG修复。<br />　　6.&nbsp;建立Ajax模型。<br />　　7.&nbsp;对代码进行优化。<br />　　8.&nbsp;其他修正，修正以往版本中存在的已知问题，具体细节不再一一描述。<br />　　PJhome&nbsp;BBS官方论坛：http://bbs.pjhome.net&nbsp;<br />　　PuterJam个人官方博客：http://www.pjhome.net<br />　　PJblog&nbsp;Code：http://code.google.com/p/pjblog<br />　　PJblog3非官方资源站：http://www.pjblog3.com.cn<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />]]>
      </summary>
      <category term="" label="其他" scheme="http://dev.mo.cn/cat_diary_18.html" />
   </entry>
   <entry>
      <title type="html">答辩结束了，都要结束了</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_219.html" />
      <updated>2009-6-14 13:15:46</updated>
      <published>2009-6-14 13:15:46</published>
      <id>http://dev.mo.cn/article_219.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;不知道怎么了，从起床到现在答辩完，总感觉不舒服，但也说不出哪里不舒服。答辩进行了4个多小时，说实话-很无聊，好的论文确实有，但很大一部分感觉做了根本没什么意义，包括自己的论文，我也说不出来到底干了什么，采集--计数、称量--数据统计--结论--完稿，三个月下来，是感觉挺累的，看着一大堆数据也挺欣慰的，但总感觉不像是论文，而只是例行的调查。<br />&nbsp;&nbsp;&nbsp;不管怎样，现在一切都要结束了，也要离开海大了。多少有点留恋，毕竟是待了整整4年的地方，生活、学习。。。天下没有不散的宴席，希望认识我的和我认识的每位同学和老师，都有份好的工作，有好的发展前途。<br />&nbsp;&nbsp;&nbsp;该说再见的时候了，我们一定会再见的。]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">论文终于要答辩了，大学生活也要面临结束</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_218.html" />
      <updated>2009-6-12 8:34:56</updated>
      <published>2009-6-12 8:34:56</published>
      <id>http://dev.mo.cn/article_218.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;答辩时间定在了14号，忙活了3个多月终于要结束了。这几天更是累的要死，提交申请，论文完稿，打印，PPT制作（为了制作PPT自己专门PS的模版，第一次PS出自己比较满意的东西），昨天急急忙忙跑去打印，人家下班了，今天得排队打印了，打印完还得去找一堆老师签字画押，晕死啊。<br />&nbsp;&nbsp;&nbsp;今天恐怕得忙活一整天了。<br />&nbsp;&nbsp;&nbsp;不过，忙归忙，没有忘记写PJ平台的权限管理程序，昨天熄灯后又写了2个多小时，基本把主干程序全部写出来了，剩下的就是一些小的细节和与其他模块整合的问题了，答辩完后全力写程序。<br />&nbsp;&nbsp;&nbsp;眼看大学生活就要结束了，说实话，感觉有点遗憾，不后悔自己学习编程以及网页制作，因为自己的学习有成果了。唯一有一点感觉不舒服的是没有学好自己专业，既然以经这样，剩下的就靠自己的努力打拼了，不仅仅是为了家人，更是为自己的前途打拼。<br />&nbsp;&nbsp;&nbsp;给自己加油！加油努力！&nbsp;&nbsp;&nbsp;]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">PJBlog，我们一起加油</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_217.html" />
      <updated>2009-6-10 23:38:53</updated>
      <published>2009-6-10 23:38:53</published>
      <id>http://dev.mo.cn/article_217.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;这两天大体把PJ的程序看了下，PJ还是一个很不错的系统，拥有广大的用户群以及支持者，以及无数的插件开发者，是一个最易用的博客系统，完全支持皮肤、插件、以及自定义页面。PJ是一个完全开源的系统，只要一个ASP的初学者就能完全看懂和修改代码，系统并没有进行高度的封装，在GoogleSvn可以查看所有源码及开发进度。<br />&nbsp;&nbsp;&nbsp;非常感谢evio的邀请，加入一个开发团队，这也是一直以来的一个小目标，我喜欢很多人一起讨论一起开发的感觉，在PJ，我也会努力工作，争取和大家一起把PJ做的更好，敬请大家拭目以待不久的新版本。]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">网页刷新后保持菜单的原状态</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_216.html" />
      <updated>2009-5-24 0:09:56</updated>
      <published>2009-5-24 0:09:56</published>
      <id>http://dev.mo.cn/article_216.html</id>
      <summary type="html">
      <![CDATA[一般菜单刷新后，当前的选中状态会失效，本代码用cookie和jquery来解决这个问题，代码如下；<br />其中，jquery仅仅用了他的each方法，以减少代码量，你完全可以把onclick事件要执行的代码分离出来，然后通过其他方式调用，而不是像我这样批量处理<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;!DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN"&nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;<br />&lt;html&nbsp;xmlns="http://www.w3.org/1999/xhtml"&nbsp;xml:lang="zh-cn"&nbsp;lang="zh-cn"&gt;<br />&nbsp;&lt;head&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;meta&nbsp;http-equiv="Content-Type"&nbsp;content="text/html;&nbsp;charset=gb2312"&nbsp;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;艾恩ASP学习Blog-天下没有免费的午餐,这里有免费的Asp大餐&lt;/title&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;script&nbsp;type="text/javascript"&nbsp;src="jquery.js"&gt;&lt;/script&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;script&nbsp;type="text/javascript"&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$(document).ready(function(){<br />&nbsp;&nbsp;&nbsp;&nbsp;$("#menu&nbsp;&gt;&nbsp;a").each(function(i){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.onclick=function(){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cookie.SET("Aien_currentID",this.id,365);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; };<br />&nbsp;&nbsp;&nbsp;&nbsp;});<br />&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;currentID=cookie.GET("Aien_currentID");<br />&nbsp;&nbsp;&nbsp;&nbsp;if(currentID!=null){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $("#"&nbsp;+&nbsp;currentID).css({"background-color":"#eee","color":"red"});<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />});<br />var&nbsp;cookie={<br />&nbsp;&nbsp;&nbsp;&nbsp;SET&nbsp; &nbsp; &nbsp; &nbsp; :&nbsp;function(name,&nbsp;value,&nbsp;days)&nbsp;{var&nbsp;expires&nbsp;=&nbsp;"";if&nbsp;(days)&nbsp;{var&nbsp;d&nbsp;=&nbsp;new&nbsp;Date();d.setTime(d.getTime()&nbsp;+&nbsp;days&nbsp;*&nbsp;24&nbsp;*&nbsp;60&nbsp;*&nbsp;60&nbsp;*&nbsp;1000);expires&nbsp;=&nbsp;";&nbsp;expires="&nbsp;+&nbsp;d.toGMTString();}document.cookie&nbsp;=&nbsp;name&nbsp;+&nbsp;"="&nbsp;+&nbsp;value&nbsp;+&nbsp;expires&nbsp;+&nbsp;";&nbsp;path=/";},<br />&nbsp; &nbsp; &nbsp; &nbsp; GET&nbsp; &nbsp; &nbsp; &nbsp; :&nbsp;function&nbsp;(name)&nbsp;{var&nbsp;re&nbsp;=&nbsp;new&nbsp;RegExp("(\;|^)[^;]*("&nbsp;+&nbsp;name&nbsp;+&nbsp;")\=([^;]*)(;|$)");var&nbsp;res&nbsp;=&nbsp;re.exec(document.cookie);return&nbsp;res&nbsp;!=&nbsp;null&nbsp;?&nbsp;res[3]&nbsp;:&nbsp;null;}<br />};<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;/script&gt;<br />&nbsp;&lt;/head&gt;<br /><br />&nbsp;&lt;body&gt;<br />&nbsp;&lt;div&nbsp;id="container"&gt;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;id="menu"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;a&nbsp;href="index.html"&nbsp;id="m1"&gt;首页&lt;/a&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;a&nbsp;href="index.html"&nbsp;id="m2"&gt;心情日志&lt;/a&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;a&nbsp;href="index.html"&nbsp;id="m3"&gt;程序随笔&lt;/a&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;a&nbsp;href="index.html"&nbsp;id="m4"&gt;资源分享&lt;/a&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;a&nbsp;href="index.html"&nbsp;id="m5"&gt;艾恩作品&lt;/a&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;a&nbsp;href="index.html"&nbsp;id="m6"&gt;留言簿&lt;/a&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br />&lt;/div&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</div></div><br /><a href="http://dev.mo.cn/upfiles/20090524000456847.rar" target="new">下载源码</a>]]>
      </summary>
      <category term="" label="JavaScript/DOM" scheme="http://dev.mo.cn/cat_diary_9.html" />
   </entry>
   <entry>
      <title type="html">Asp用来生成json数据的类</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_215.html" />
      <updated>2009-5-20 15:30:52</updated>
      <published>2009-5-20 15:30:52</published>
      <id>http://dev.mo.cn/article_215.html</id>
      <summary type="html">
      <![CDATA[艾恩Asp生成Json数据类<br /><span style="color:#FF0000;">除jsEncode函数为json官方类函数外</span>，其他内容均原创，转载请注明出处<br /><a href="http://dev.mo.cn" target="new">http://dev.mo.cn</a>&nbsp;&nbsp;QQ:1034555083&nbsp;Email:zhanghuiguoanlige@126.com<br /><br />1.支持生成对象和数组两种json数据格式，通过设置JsonType来选择，本属性有两个可用值object和array；<br />2.json中的数据支持数字(整形，单精度，双精度)、字符串、日期、布尔值、数组以及对象<br />3.程序会自动转换vb数组为js数组，添加到json对象<br />4.重名键值，程序会自动以,分隔，仅限于数字、字符串、日期等基本数据类型<br />5.支持json数据无限嵌套，示例中最多嵌套了3层<br />下载地址&nbsp;<span style="font-size:24px;"><a href="http://dev.mo.cn/source_186.html" target="new">http://dev.mo.cn/source_186.html</a></span>]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">哈，写了个迅雷漫画频道的采集程序，分享出来</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_214.html" />
      <updated>2009-5-13 10:57:23</updated>
      <published>2009-5-13 10:57:23</published>
      <id>http://dev.mo.cn/article_214.html</id>
      <summary type="html">
      <![CDATA[本程序可以采集&nbsp;迅雷漫画频道&nbsp;所有的漫画，<br /><br />&nbsp;&nbsp;本程序功能:<br />&nbsp;&nbsp;1.提供多种检索方式，可以按字母，类型，状态，地区，颜色以及页码进行检索<br />&nbsp;&nbsp;2.各种检索方式都提供缓存机制，第一次加载可能会比较慢，第二次加载会比较快<br />&nbsp;&nbsp;3.既可以在线浏览，也可以采集到本地收藏<br />&nbsp;&nbsp;4.直接在右边点击链接是在线浏览；选中后，点击下面的"批量采集"，会自动保存到本地<br />&nbsp;&nbsp;5.程序根据漫画名和卷名称或话名称自动建立文件夹<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;声明:&nbsp;本程序为作者原创，请保留页面底部信息；<br />漫画来源为&nbsp;迅雷漫画频道，请勿将采集结果用于非法用途；否则，一切法律后果自负。<br /><br /><br />&nbsp;&nbsp;注意:&nbsp;因为是采集程序，如果某个类别下的漫画项目过多，加载时间可能会过长，请耐心等待；<br />加载速度取决于服务器和迅雷之间的通讯状况<br />可以到这里来下载：<a href="http://dev.mo.cn/source_185.html" target="new">http://dev.mo.cn/source_185.html</a><br />&nbsp;&nbsp;QQ:1034555083/Email:zhanghuiguoanlige@126.com]]>
      </summary>
      <category term="" label="AJAX" scheme="http://dev.mo.cn/cat_diary_2.html" />
   </entry>
   <entry>
      <title type="html">男朋友和男的朋友的区别</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_213.html" />
      <updated>2009-4-29 10:43:26</updated>
      <published>2009-4-29 10:43:26</published>
      <id>http://dev.mo.cn/article_213.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;男的朋友：半夜会找你打电话聊天到很晚。&nbsp;　&nbsp;&nbsp;<br />　　　男朋友：半夜看你在网上会赶你下线。&nbsp;　&nbsp;&nbsp;<br />　　　男的朋友：他会找你出去玩，叫你放弃正事或逃课。&nbsp;　&nbsp;&nbsp;<br />　　　男朋友：他会催你快写作业，或者与你讨论功课。&nbsp;　&nbsp;&nbsp;<br />　　　男的朋友：在你生病时，会讲好话关心你。&nbsp;　&nbsp;&nbsp;<br />　　　男朋友：在你生病时，他会关心到你烦，并强迫你去看医生。&nbsp;　&nbsp;&nbsp;<br />　　　男的朋友：他会尽量说好话来讨好你，你也会觉得他很棒。&nbsp;　&nbsp;&nbsp;<br />　　　男朋友：他所说的话，都是关心你的，但通常象是在命令。&nbsp;　&nbsp;&nbsp;<br />　　　男的朋友：他什么事情都配合着你，只要你高兴。&nbsp;　&nbsp;&nbsp;<br />　　　男朋友：他会帮你辨别是非，但你会觉得他管得太多。&nbsp;　&nbsp;&nbsp;<br />　　　男的朋友：他会说他要给你最大的快乐。&nbsp;　&nbsp;&nbsp;<br />　　　男朋友：他只能给你保证，你跟他在一起，他是最快乐的。&nbsp;　&nbsp;&nbsp;<br />　　　男的朋友：他在意你的生活细节，即使你做错了什么，他也不会指出来。&nbsp;　&nbsp;&nbsp;<br />　　　男朋友：他会注意你的一举一动，告诉你什么地方做错了，什么地方该如何做，该&nbsp;　　&nbsp;&nbsp;<br />　　　如何与别人交往。&nbsp;　&nbsp;&nbsp;<br />　　　男的朋友：他会帮你买夜宵，送夜宵，载你上下课或上下班。&nbsp;　&nbsp;&nbsp;<br />　　　男朋友：他会帮你吃夜宵，不过他会提醒你吃什么比较健康；他会载你上下课或上&nbsp;　&nbsp;&nbsp;<br />　　　下班，但通常是顺路，因为他不会为你逃课或旷工。因为他知道，他要为你们的将&nbsp;　　&nbsp;&nbsp;<br />　　　来而努力。&nbsp;　&nbsp;&nbsp;<br />　　　男的朋友：他不在意你去做什么，与什么人交往。&nbsp;　&nbsp;&nbsp;<br />　　　男朋友：他很在意你做什么，与什么人交往。他还会告诫你不要与什么人交往。&nbsp;　&nbsp;&nbsp;<br />　　　男的朋友：他只想现在。&nbsp;　&nbsp;&nbsp;<br />　　　男朋友：他已经预见将来，该怎么自我努力，好好给你幸福。&nbsp;　&nbsp;&nbsp;<br />　　　男的朋友：他会说，我喜欢你。&nbsp;　&nbsp;&nbsp;<br />　　　男朋友：他会说，我爱你&nbsp;]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">用于Asp的base64编码/解码函数</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_212.html" />
      <updated>2009-4-29 0:45:06</updated>
      <published>2009-4-29 0:45:06</published>
      <id>http://dev.mo.cn/article_212.html</id>
      <summary type="html">
      <![CDATA[网上很多关于base64编/解码的代码，找到的这个是最好的了，有个不尽人意的地方是--编/解码调用一堆函数，我给增加了2个函数用来编/解码,调用方法：<br />将第二段代码保存到base64.inc,在需要编码的页面将base64.inc包含进来，调用相应函数即可，例如<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;!--#include&nbsp;file="base64.inc"--&gt;<br />&lt;%<br />'---------------------------------------------------------------------------------<br />str="我爱你tandy"<br />encodestr=encode64(str)&nbsp;'编码<br />response.write&nbsp;encodestr&nbsp;&&nbsp;"&lt;hr&gt;"<br />response.write&nbsp;decode64(encodestr)&nbsp;&&nbsp;"&lt;hr&gt;"&nbsp;'解码<br />%&gt;</div></div><br /><br />代码段二：<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;%<br />sBASE_64_CHARACTERS&nbsp;=&nbsp;"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"<br />sBASE_64_CHARACTERS&nbsp;=&nbsp;strUnicode2Ansi(sBASE_64_CHARACTERS)<br /><br />'计算unicode字符串的Ansi编码的长度<br />Function&nbsp;strUnicodeLen(asContents)<br />&nbsp;'计算unicode字符串的Ansi编码的长度<br />&nbsp;asContents1="a"&asContents<br />&nbsp;len1=len(asContents1)<br />&nbsp;k=0<br />&nbsp;for&nbsp;i=1&nbsp;to&nbsp;len1<br />&nbsp;&nbsp;asc1=asc(mid(asContents1,i,1))<br />&nbsp;&nbsp;if&nbsp;asc1&lt;0&nbsp;then&nbsp;asc1=65536+asc1<br />&nbsp;&nbsp;if&nbsp;asc1&gt;255&nbsp;then<br />&nbsp;&nbsp;&nbsp;k=k+2<br />&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;k=k+1<br />&nbsp;&nbsp;end&nbsp;if<br />&nbsp;next<br />&nbsp;strUnicodeLen=k-1<br />End&nbsp;Function<br /><br />'将Unicode编码的字符串，转换成Ansi编码的字符串<br />Function&nbsp;strUnicode2Ansi(asContents)<br />&nbsp;'将Unicode编码的字符串，转换成Ansi编码的字符串<br />&nbsp;strUnicode2Ansi=""<br />&nbsp;len1=len(asContents)<br />&nbsp;for&nbsp;i=1&nbsp;to&nbsp;len1<br />&nbsp;&nbsp;varchar=mid(asContents,i,1)<br />&nbsp;&nbsp;varasc=asc(varchar)<br />&nbsp;&nbsp;if&nbsp;varasc&lt;0&nbsp;then&nbsp;varasc=varasc+65536<br />&nbsp;&nbsp;if&nbsp;varasc&gt;255&nbsp;then<br />&nbsp;&nbsp;&nbsp;varHex=Hex(varasc)<br />&nbsp;&nbsp;&nbsp;varlow=left(varHex,2)<br />&nbsp;&nbsp;&nbsp;varhigh=right(varHex,2)<br />&nbsp;&nbsp;&nbsp;strUnicode2Ansi=strUnicode2Ansi&nbsp;&&nbsp;chrb("&H"&nbsp;&&nbsp;varlow&nbsp;)&nbsp;&&nbsp;chrb("&H"&nbsp;&&nbsp;varhigh&nbsp;)<br />&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;strUnicode2Ansi=strUnicode2Ansi&nbsp;&&nbsp;chrb(varasc)<br />&nbsp;&nbsp;end&nbsp;if<br />&nbsp;next<br />End&nbsp;function<br /><br />'将Ansi编码的字符串，转换成Unicode编码的字符串<br />Function&nbsp;strAnsi2Unicode(asContents)<br />&nbsp;'将Ansi编码的字符串，转换成Unicode编码的字符串<br />&nbsp;strAnsi2Unicode&nbsp;=&nbsp;""<br />&nbsp;len1=lenb(asContents)<br />&nbsp;if&nbsp;len1=0&nbsp;then&nbsp;exit&nbsp;function<br />&nbsp;for&nbsp;i=1&nbsp;to&nbsp;len1<br />&nbsp;&nbsp;varchar=midb(asContents,i,1)<br />&nbsp;&nbsp;varasc=ascb(varchar)<br />&nbsp;&nbsp;if&nbsp;varasc&nbsp;&gt;&nbsp;127&nbsp;then<br />&nbsp;&nbsp;&nbsp;strAnsi2Unicode&nbsp;=&nbsp;strAnsi2Unicode&nbsp;&&nbsp;chr(ascw(midb(asContents,i+1,1)&nbsp;&&nbsp;varchar))<br />&nbsp;&nbsp;&nbsp;i=i+1<br />&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;strAnsi2Unicode&nbsp;=&nbsp;strAnsi2Unicode&nbsp;&&nbsp;chr(varasc)<br />&nbsp;&nbsp;end&nbsp;if<br />&nbsp;next<br />End&nbsp;function<br /><br />'将Ansi编码的字符串进行Base64编码<br />Function&nbsp;Base64encode(asContents)<br />&nbsp;'将Ansi编码的字符串进行Base64编码<br />&nbsp;'asContents应当是ANSI编码的字符串（二进制的字符串也可以）<br />&nbsp;Dim&nbsp;lnPosition<br />&nbsp;Dim&nbsp;lsResult<br />&nbsp;Dim&nbsp;Char1<br />&nbsp;Dim&nbsp;Char2<br />&nbsp;Dim&nbsp;Char3<br />&nbsp;Dim&nbsp;Char4<br />&nbsp;Dim&nbsp;Byte1<br />&nbsp;Dim&nbsp;Byte2<br />&nbsp;Dim&nbsp;Byte3<br />&nbsp;Dim&nbsp;SaveBits1<br />&nbsp;Dim&nbsp;SaveBits2<br />&nbsp;Dim&nbsp;lsGroupBinary<br />&nbsp;Dim&nbsp;lsGroup64<br />&nbsp;Dim&nbsp;m4,len1,len2<br /><br />&nbsp;len1=Lenb(asContents)<br />&nbsp;if&nbsp;len1&lt;1&nbsp;then<br />&nbsp;&nbsp;Base64encode=""<br />&nbsp;&nbsp;exit&nbsp;Function<br />&nbsp;end&nbsp;if<br /><br />&nbsp;m3=Len1&nbsp;Mod&nbsp;3<br />&nbsp;If&nbsp;M3&nbsp;&gt;&nbsp;0&nbsp;Then&nbsp;asContents&nbsp;=&nbsp;asContents&nbsp;&&nbsp;String(3-M3,&nbsp;chrb(0))<br />&nbsp;'补足位数是为了便于计算<br />&nbsp;IF&nbsp;m3&nbsp;&gt;&nbsp;0&nbsp;THEN<br />&nbsp;&nbsp;len1=len1+(3-m3)<br />&nbsp;&nbsp;len2=len1-3<br />&nbsp;else<br />&nbsp;&nbsp;len2=len1<br />&nbsp;end&nbsp;if<br />&nbsp;lsResult&nbsp;=&nbsp;""<br />&nbsp;For&nbsp;lnPosition&nbsp;=&nbsp;1&nbsp;To&nbsp;len2&nbsp;Step&nbsp;3<br />&nbsp;&nbsp;lsGroup64&nbsp;=&nbsp;""<br />&nbsp;&nbsp;lsGroupBinary&nbsp;=&nbsp;Midb(asContents,&nbsp;lnPosition,&nbsp;3)<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;Byte1&nbsp;=&nbsp;Ascb(Midb(lsGroupBinary,&nbsp;1,&nbsp;1)):&nbsp;SaveBits1&nbsp;=&nbsp;Byte1&nbsp;And&nbsp;3<br />&nbsp;&nbsp;Byte2&nbsp;=&nbsp;Ascb(Midb(lsGroupBinary,&nbsp;2,&nbsp;1)):&nbsp;SaveBits2&nbsp;=&nbsp;Byte2&nbsp;And&nbsp;15<br />&nbsp;&nbsp;Byte3&nbsp;=&nbsp;Ascb(Midb(lsGroupBinary,&nbsp;3,&nbsp;1))<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;Char1&nbsp;=&nbsp;Midb(sBASE_64_CHARACTERS,&nbsp;((Byte1&nbsp;And&nbsp;252)&nbsp;\&nbsp;4)&nbsp;+&nbsp;1,&nbsp;1)<br />&nbsp;&nbsp;Char2&nbsp;=&nbsp;Midb(sBASE_64_CHARACTERS,&nbsp;(((Byte2&nbsp;And&nbsp;240)&nbsp;\&nbsp;16)&nbsp;Or&nbsp;(SaveBits1&nbsp;*&nbsp;16)&nbsp;And&nbsp;&HFF)&nbsp;+&nbsp;1,&nbsp;1)<br />&nbsp;&nbsp;Char3&nbsp;=&nbsp;Midb(sBASE_64_CHARACTERS,&nbsp;(((Byte3&nbsp;And&nbsp;192)&nbsp;\&nbsp;64)&nbsp;Or&nbsp;(SaveBits2&nbsp;*&nbsp;4)&nbsp;And&nbsp;&HFF)&nbsp;+&nbsp;1,&nbsp;1)<br />&nbsp;&nbsp;Char4&nbsp;=&nbsp;Midb(sBASE_64_CHARACTERS,&nbsp;(Byte3&nbsp;And&nbsp;63)&nbsp;+&nbsp;1,&nbsp;1)<br />&nbsp;&nbsp;lsGroup64&nbsp;=&nbsp;Char1&nbsp;&&nbsp;Char2&nbsp;&&nbsp;Char3&nbsp;&&nbsp;Char4<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;lsResult&nbsp;=&nbsp;lsResult&nbsp;&&nbsp;lsGroup64<br />&nbsp;Next<br />&nbsp;&nbsp;<br />&nbsp;'处理最后剩余的几个字符<br />&nbsp;if&nbsp;M3&nbsp;&gt;&nbsp;0&nbsp;then<br />&nbsp;&nbsp;lsGroup64&nbsp;=&nbsp;""<br />&nbsp;&nbsp;lsGroupBinary&nbsp;=&nbsp;Midb(asContents,&nbsp;len2+1,&nbsp;3)<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;Byte1&nbsp;=&nbsp;Ascb(Midb(lsGroupBinary,&nbsp;1,&nbsp;1)):&nbsp;SaveBits1&nbsp;=&nbsp;Byte1&nbsp;And&nbsp;3<br />&nbsp;&nbsp;Byte2&nbsp;=&nbsp;Ascb(Midb(lsGroupBinary,&nbsp;2,&nbsp;1)):&nbsp;SaveBits2&nbsp;=&nbsp;Byte2&nbsp;And&nbsp;15<br />&nbsp;&nbsp;Byte3&nbsp;=&nbsp;Ascb(Midb(lsGroupBinary,&nbsp;3,&nbsp;1))<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;Char1&nbsp;=&nbsp;Midb(sBASE_64_CHARACTERS,&nbsp;((Byte1&nbsp;And&nbsp;252)&nbsp;\&nbsp;4)&nbsp;+&nbsp;1,&nbsp;1)<br />&nbsp;&nbsp;Char2&nbsp;=&nbsp;Midb(sBASE_64_CHARACTERS,&nbsp;(((Byte2&nbsp;And&nbsp;240)&nbsp;\&nbsp;16)&nbsp;Or&nbsp;(SaveBits1&nbsp;*&nbsp;16)&nbsp;And&nbsp;&HFF)&nbsp;+&nbsp;1,&nbsp;1)<br />&nbsp;&nbsp;Char3&nbsp;=&nbsp;Midb(sBASE_64_CHARACTERS,&nbsp;(((Byte3&nbsp;And&nbsp;192)&nbsp;\&nbsp;64)&nbsp;Or&nbsp;(SaveBits2&nbsp;*&nbsp;4)&nbsp;And&nbsp;&HFF)&nbsp;+&nbsp;1,&nbsp;1)<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;if&nbsp;M3=1&nbsp;then<br />&nbsp;&nbsp;&nbsp;lsGroup64&nbsp;=&nbsp;Char1&nbsp;&&nbsp;Char2&nbsp;&&nbsp;ChrB(61)&nbsp;&&nbsp;ChrB(61)&nbsp;'用=号补足位数<br />&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;lsGroup64&nbsp;=&nbsp;Char1&nbsp;&&nbsp;Char2&nbsp;&&nbsp;Char3&nbsp;&&nbsp;ChrB(61)&nbsp;'用=号补足位数<br />&nbsp;&nbsp;end&nbsp;if<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;lsResult&nbsp;=&nbsp;lsResult&nbsp;&&nbsp;lsGroup64<br />&nbsp;end&nbsp;if<br />&nbsp;&nbsp;<br />&nbsp;Base64encode&nbsp;=&nbsp;lsResult&nbsp;&nbsp;<br />End&nbsp;Function<br /><br />'将Base64编码字符串转换成Ansi编码的字符串<br />Function&nbsp;Base64decode(asContents)<br />&nbsp;'将Base64编码字符串转换成Ansi编码的字符串<br />&nbsp;'asContents应当也是ANSI编码的字符串（二进制的字符串也可以）<br />&nbsp;Dim&nbsp;lsResult<br />&nbsp;Dim&nbsp;lnPosition<br />&nbsp;Dim&nbsp;lsGroup64,&nbsp;lsGroupBinary<br />&nbsp;Dim&nbsp;Char1,&nbsp;Char2,&nbsp;Char3,&nbsp;Char4<br />&nbsp;Dim&nbsp;Byte1,&nbsp;Byte2,&nbsp;Byte3<br />&nbsp;Dim&nbsp;M4,len1,len2<br />&nbsp;<br />&nbsp;len1=&nbsp;Lenb(asContents)<br />&nbsp;M4&nbsp;=&nbsp;len1&nbsp;Mod&nbsp;4<br />&nbsp;<br />&nbsp;if&nbsp;len1&nbsp;&lt;&nbsp;1&nbsp;or&nbsp;M4&nbsp;&gt;&nbsp;0&nbsp;then<br />&nbsp;&nbsp;'字符串长度应当是4的倍数<br />&nbsp;&nbsp;Base64decode&nbsp;=&nbsp;""<br />&nbsp;&nbsp;exit&nbsp;Function<br />&nbsp;end&nbsp;if<br /><br />&nbsp;'判断最后一位是不是&nbsp;=&nbsp;号<br />&nbsp;'判断倒数第二位是不是&nbsp;=&nbsp;号<br />&nbsp;'这里m4表示最后剩余的需要单独处理的字符个数<br />&nbsp;if&nbsp;midb(asContents,&nbsp;len1,&nbsp;1)&nbsp;=&nbsp;chrb(61)&nbsp;then&nbsp;m4=3<br />&nbsp;if&nbsp;midb(asContents,&nbsp;len1-1,&nbsp;1)&nbsp;=&nbsp;chrb(61)&nbsp;then&nbsp;m4=2<br />&nbsp;<br />&nbsp;if&nbsp;m4&nbsp;=&nbsp;0&nbsp;then<br />&nbsp;&nbsp;len2=len1<br />&nbsp;else<br />&nbsp;&nbsp;len2=len1-4<br />&nbsp;end&nbsp;if<br /><br />&nbsp;For&nbsp;lnPosition&nbsp;=&nbsp;1&nbsp;To&nbsp;Len2&nbsp;Step&nbsp;4<br />&nbsp;&nbsp;lsGroupBinary&nbsp;=&nbsp;""<br />&nbsp;&nbsp;lsGroup64&nbsp;=&nbsp;Midb(asContents,&nbsp;lnPosition,&nbsp;4)<br />&nbsp;&nbsp;Char1&nbsp;=&nbsp;InStrb(sBASE_64_CHARACTERS,&nbsp;Midb(lsGroup64,&nbsp;1,&nbsp;1))&nbsp;-&nbsp;1<br />&nbsp;&nbsp;Char2&nbsp;=&nbsp;InStrb(sBASE_64_CHARACTERS,&nbsp;Midb(lsGroup64,&nbsp;2,&nbsp;1))&nbsp;-&nbsp;1<br />&nbsp;&nbsp;Char3&nbsp;=&nbsp;InStrb(sBASE_64_CHARACTERS,&nbsp;Midb(lsGroup64,&nbsp;3,&nbsp;1))&nbsp;-&nbsp;1<br />&nbsp;&nbsp;Char4&nbsp;=&nbsp;InStrb(sBASE_64_CHARACTERS,&nbsp;Midb(lsGroup64,&nbsp;4,&nbsp;1))&nbsp;-&nbsp;1<br />&nbsp;&nbsp;Byte1&nbsp;=&nbsp;Chrb(((Char2&nbsp;And&nbsp;48)&nbsp;\&nbsp;16)&nbsp;Or&nbsp;(Char1&nbsp;*&nbsp;4)&nbsp;And&nbsp;&HFF)<br />&nbsp;&nbsp;Byte2&nbsp;=&nbsp;lsGroupBinary&nbsp;&&nbsp;Chrb(((Char3&nbsp;And&nbsp;60)&nbsp;\&nbsp;4)&nbsp;Or&nbsp;(Char2&nbsp;*&nbsp;16)&nbsp;And&nbsp;&HFF)<br />&nbsp;&nbsp;Byte3&nbsp;=&nbsp;Chrb((((Char3&nbsp;And&nbsp;3)&nbsp;*&nbsp;64)&nbsp;And&nbsp;&HFF)&nbsp;Or&nbsp;(Char4&nbsp;And&nbsp;63))<br />&nbsp;&nbsp;lsGroupBinary&nbsp;=&nbsp;Byte1&nbsp;&&nbsp;Byte2&nbsp;&&nbsp;Byte3<br /><br />&nbsp;&nbsp;lsResult&nbsp;=&nbsp;lsResult&nbsp;&&nbsp;lsGroupBinary<br />&nbsp;Next<br /><br />&nbsp;'处理最后剩余的几个字符<br />&nbsp;if&nbsp;M4&nbsp;&gt;&nbsp;0&nbsp;then<br />&nbsp;&nbsp;lsGroupBinary&nbsp;=&nbsp;""<br />&nbsp;&nbsp;lsGroup64&nbsp;=&nbsp;Midb(asContents,&nbsp;len2+1,&nbsp;m4)&nbsp;&&nbsp;chrB(65)&nbsp;'chr(65)=A，转换成值为0<br />&nbsp;&nbsp;if&nbsp;M4=2&nbsp;then&nbsp;'补足4位，是为了便于计算<br />&nbsp;&nbsp;&nbsp;lsGroup64&nbsp;=&nbsp;lsGroup64&nbsp;&&nbsp;chrB(65)<br />&nbsp;&nbsp;end&nbsp;if<br />&nbsp;&nbsp;Char1&nbsp;=&nbsp;InStrb(sBASE_64_CHARACTERS,&nbsp;Midb(lsGroup64,&nbsp;1,&nbsp;1))&nbsp;-&nbsp;1<br />&nbsp;&nbsp;Char2&nbsp;=&nbsp;InStrb(sBASE_64_CHARACTERS,&nbsp;Midb(lsGroup64,&nbsp;2,&nbsp;1))&nbsp;-&nbsp;1<br />&nbsp;&nbsp;Char3&nbsp;=&nbsp;InStrb(sBASE_64_CHARACTERS,&nbsp;Midb(lsGroup64,&nbsp;3,&nbsp;1))&nbsp;-&nbsp;1<br />&nbsp;&nbsp;Char4&nbsp;=&nbsp;InStrb(sBASE_64_CHARACTERS,&nbsp;Midb(lsGroup64,&nbsp;4,&nbsp;1))&nbsp;-&nbsp;1<br />&nbsp;&nbsp;Byte1&nbsp;=&nbsp;Chrb(((Char2&nbsp;And&nbsp;48)&nbsp;\&nbsp;16)&nbsp;Or&nbsp;(Char1&nbsp;*&nbsp;4)&nbsp;And&nbsp;&HFF)<br />&nbsp;&nbsp;Byte2&nbsp;=&nbsp;lsGroupBinary&nbsp;&&nbsp;Chrb(((Char3&nbsp;And&nbsp;60)&nbsp;\&nbsp;4)&nbsp;Or&nbsp;(Char2&nbsp;*&nbsp;16)&nbsp;And&nbsp;&HFF)<br />&nbsp;&nbsp;Byte3&nbsp;=&nbsp;Chrb((((Char3&nbsp;And&nbsp;3)&nbsp;*&nbsp;64)&nbsp;And&nbsp;&HFF)&nbsp;Or&nbsp;(Char4&nbsp;And&nbsp;63))<br /><br />&nbsp;&nbsp;if&nbsp;M4=2&nbsp;then<br />&nbsp;&nbsp;&nbsp;lsGroupBinary&nbsp;=&nbsp;Byte1<br />&nbsp;&nbsp;elseif&nbsp;M4=3&nbsp;then<br />&nbsp;&nbsp;&nbsp;lsGroupBinary&nbsp;=&nbsp;Byte1&nbsp;&&nbsp;Byte2<br />&nbsp;&nbsp;end&nbsp;if<br /><br />&nbsp;&nbsp;lsResult&nbsp;=&nbsp;lsResult&nbsp;&&nbsp;lsGroupBinary<br />&nbsp;end&nbsp;if<br /><br />&nbsp;Base64decode&nbsp;=&nbsp;lsResult<br /><br />End&nbsp;Function<br /><br />function&nbsp;encode64(byval&nbsp;str)<br />&nbsp; &nbsp; &nbsp; &nbsp; encode64=strAnsi2Unicode(Base64encode(strUnicode2Ansi(str)))<br />end&nbsp;function<br /><br />function&nbsp;decode64(byval&nbsp;str)<br />&nbsp; &nbsp; &nbsp; &nbsp; decode64=strAnsi2Unicode(Base64decode(strUnicode2Ansi(str)))<br />end&nbsp;function<br />%&gt;</div></div>]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">利用404错误页实现整站静态化-本站采用的方法</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_210.html" />
      <updated>2009-4-20 23:53:33</updated>
      <published>2009-4-20 23:53:33</published>
      <id>http://dev.mo.cn/article_210.html</id>
      <summary type="html">
      <![CDATA[原理说明：<br />1.请求http://dev.mo.cn/source_175.html的时候&nbsp;，出现404错误，会转向404.asp，但浏览器地址不会变，<br />&nbsp;&nbsp;&nbsp;这时候的request.querystring的值类似于：404;http://dev.mo.cn/source_175.html&nbsp;<br /><br />2.然后在404.asp分析这个request.querystring，找出你要transfer的地址(使用正则，我的是detial.asp)，&nbsp;<br /><br />3.server.transfer("detial.asp")后，request.querystring会传递到detial.asp&nbsp;<br /><br />4.在detial.asp分析http://dev.mo.cn/source_175.html,主要是分析source_175.html,我的程序是用_分割，分隔后的数组第二个项就是id，然后修改你源程序获取参数的方法为这种方法&nbsp;<br /><br />5.下面就是你原来的程序<br /><br />这样，整个流程就结束了，具体实现方法比较复杂，包括正则分析，参数分析，参数获取等&nbsp;<br /><br />具体实例请下载Demo包进行查看<a href="http://dev.mo.cn/upfiles/20090608160059216.rar" target="new">http://dev.mo.cn/upfiles/20090608160059216.rar</a>]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">win2003服务器的基本安全</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_209.html" />
      <updated>2009-4-16 14:26:58</updated>
      <published>2009-4-16 14:26:58</published>
      <id>http://dev.mo.cn/article_209.html</id>
      <summary type="html">
      <![CDATA[以下是一台win2003服务器的基本安全，设置完相对会安全些。<br /><br />1，打全补丁<br />&nbsp;&nbsp;&nbsp;新装好的系统直接用360安全卫士打补丁最快。还有就是别忘记查查系统是不是已经是SP2了。有时机房给装的是sp1的。那就必须下载sp2。<br />&nbsp;&nbsp;&nbsp;打开自动更新(我的电脑，右键属性，自动更新)。一般默认是晚上3：00自动更新并重启。这比较&nbsp;重要。如果不是一定不能重启的机器，这个一定要开。不然机器一多，你平时没空管，那有新补丁出来你也就没给服务器打上了。<br /><br /><br />2，帐号安全<br />&nbsp;&nbsp;&nbsp;1)禁用guest帐号并改名。<br />&nbsp;&nbsp;&nbsp;2)网站IIS帐号最好用独立的。（网站目录也是）<br />&nbsp;&nbsp;&nbsp;3)用户名和密码一定不能用容易被人猜到的。最好用杂乱的&nbsp;7uxj2A这类。例如你是sms服务器，你密码用smsserver就是弱密码，容易被人猜到。人家只要通过你某个漏洞查到你的管理员名字就直接进了。<br />&nbsp;&nbsp;&nbsp;4）不让系统显示上次登录的用户名，具体操作如下：修改注册表“HKLM\Software\Microsoft\WindowsNT\Current&nbsp;Version\Winlogon\Dont&nbsp;Display<br />&nbsp;Last&nbsp;User&nbsp;Name”的键值，把REG_SZ&nbsp;的键值改成1。<br /><br /><br />3，修改远程端口<br />&nbsp;&nbsp;&nbsp;运行--&gt;&nbsp;regedit<br />&nbsp;&nbsp;&nbsp;查找&nbsp;portnumber，查以的所有原来为：3389的，全部更换为你的新端口号。（同样如果你的防火墙原来有开了，记得要更改端口号，否则一重启就生效，你就连不进服务器了）<br /><br />4，关闭无用服务<br />&nbsp;&nbsp;&nbsp;管理工具-&nbsp;服务&nbsp;（这里仅列出默认装好的SP2系统要关闭的，要更高安全还有其它的要关，但会影响到其它服务）<br />&nbsp;&nbsp;&nbsp;DHCP&nbsp;Client&nbsp;停用，禁用。这是自动分配IP用的，正常的服务器我们都有指定了固定IP了，所以这个服务多余了。<br />&nbsp;&nbsp;&nbsp;Print&nbsp;Spooler&nbsp;停用，禁用，打印服务，服务器谁能用来打印？<br />&nbsp;&nbsp;&nbsp;Remote&nbsp;Registry&nbsp;停用，禁用，远程注册表操作，无用。漏洞。<br />&nbsp;&nbsp;&nbsp;Wireless&nbsp;Configuration&nbsp;停用，禁用，服务器都是用网卡的，都不需要无线网卡，如果这个不关掉，去设置网卡属性的时候老是会弹出个东西，极度不爽。所以一定要关掉。<br />&nbsp;&nbsp;&nbsp;TCP/IP&nbsp;NetBIOS&nbsp;Helper&nbsp;&nbsp;停用，禁用。常用漏洞。<br />&nbsp;&nbsp;&nbsp;<br /><br />5，开启win2003自带的防火墙。<br />&nbsp;&nbsp;&nbsp;虽然这个系统网卡里的自带防火墙并不强，但是有总比没有好。至少不会把一些现成的漏洞直接暴露到黑客眼前。<br />&nbsp;&nbsp;&nbsp;网上邻居-右键属性-网卡-右键属性<br />&nbsp;&nbsp;&nbsp;1）删除文件共享服务。-&nbsp;服务器哪里需要和别人共享？！<br />&nbsp;&nbsp;&nbsp;2）打开防火墙&nbsp;-&nbsp;记得设置好端口再打开，否则没设置好就连不上远程桌面了。<br /><br />6，关掉关机提醒<br />&nbsp;&nbsp;&nbsp;关机或注销的时候老弹出个提示要你填原因。麻烦。<br />&nbsp;&nbsp;&nbsp;运行：gpedit.msc&nbsp;，计算机配置&nbsp;-&nbsp;管理模板&nbsp;-&nbsp;系统<br />&nbsp;&nbsp;&nbsp;显示&nbsp;“关闭事件跟踪程序”-&nbsp;选&nbsp;“已禁用”<br /><br />7，管理工具--&nbsp;本地安全策略<br />&nbsp;&nbsp;&nbsp;这个也比较&nbsp;重要，当你系统出漏洞的时候，有时候你都不知道人家从哪里进的，因为你日志什么都没开。<br />&nbsp;&nbsp;&nbsp;安全策略--本地策略--&nbsp;审核策略&nbsp;(这里正常是这么设置：第1，2项和最后两项，选上成功与失败，其余的只记录失败)<br />&nbsp;&nbsp;&nbsp;本地策略--安全选项&nbsp;-&nbsp;可远程访问的注册表路径和子路径（有两项），清空。<br /><br />8，IIS安全及优化<br />&nbsp;&nbsp;&nbsp;直接删掉默认站点，删除c:\Inetpub&nbsp;，(早期这个下面会有漏洞，现在应该没了，但留着也碍眼)<br />&nbsp;&nbsp;&nbsp;关掉默认的FTP服务，系统有时候有些装机的人会给装上FTP服务，最好关掉。<br />&nbsp;&nbsp;&nbsp;站点属性--&nbsp;主目录--配置&nbsp;--里面有一些如&nbsp;.cdx&nbsp;.cer&nbsp;.idc要删掉。这是非常老的漏洞。不管现在还能不能用，删了最好。<br />&nbsp;&nbsp;&nbsp;主目录下，执行权限，普通的网站，只能给“纯脚本”权限，这样正常的php,asp..net这些就已经可以运行了。有些新手选择了“脚本和可执行文件”，天大的漏洞，我传个.exe上来，直接IE用URL来执行.exe都可以了。所以这里千万要小心。<br />&nbsp;&nbsp;&nbsp;WEB服务扩展-&nbsp;看具体情况打开。服务器安全有一个准则：不用的服务坚决不打开。<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;关闭IIS错误日志，经常服务器C盘被占满，都是这个原因。直接关了。(日志文件在C:\WINDOWS\system32\LogFiles\HTTPERR)<br />&nbsp;&nbsp;&nbsp;http://www.1982y.com/soft2222/httperr.rar&nbsp;（下载后把后缀改为.reg，执行，重启生效）<br />]]>
      </summary>
      <category term="" label="IIS配置相关" scheme="http://dev.mo.cn/cat_diary_7.html" />
   </entry>
   <entry>
      <title type="html">关于sql语句使用变量的问题</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_208.html" />
      <updated>2009-4-12 10:24:08</updated>
      <published>2009-4-12 10:24:08</published>
      <id>http://dev.mo.cn/article_208.html</id>
      <summary type="html">
      <![CDATA[(下例中表名为table,字段id为数字，字段uname为文本)<br /><br />一、通过ID检索<br />sql="select&nbsp;*&nbsp;from&nbsp;table&nbsp;where&nbsp;id=1"<br />等价于<br />dim&nbsp;t:t="table"<br />dim&nbsp;n:n=1&nbsp;'dim&nbsp;n:n="1",这样写也没问题<br />sql="select&nbsp;*&nbsp;from&nbsp;"&nbsp;&&nbsp;t&nbsp;&&nbsp;"&nbsp;where&nbsp;id="&nbsp;&&nbsp;n&nbsp;&&nbsp;""&nbsp;<br />&nbsp;<br />二、通过uname检索,uname用变量表示了<br />sql="select&nbsp;*&nbsp;from&nbsp;table&nbsp;where&nbsp;uname='anlige'"<br />等价于<br />dim&nbsp;t:t="table"<br />dim&nbsp;n:n="anlige"<br />dim&nbsp;field:field="uname"<br />sql="select&nbsp;*&nbsp;from&nbsp;"&nbsp;&&nbsp;t&nbsp;&&nbsp;"&nbsp;where&nbsp;"&nbsp;&&nbsp;field&nbsp;&&nbsp;"='"&nbsp;&&nbsp;n&nbsp;&&nbsp;"'"&nbsp;<br /><br /><span style="color:#FF0000;"><b>其实，只要注意一个问题就好，就是组合起来的SQL语句是合法的</b></span><br />想检查是不是合法，只要输出下SQL语句，就能很明显的看出来]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">flash钢琴，附歌谱</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_207.html" />
      <updated>2009-4-11 22:13:52</updated>
      <published>2009-4-11 22:13:52</published>
      <id>http://dev.mo.cn/article_207.html</id>
      <summary type="html">
      <![CDATA[<div align="center"><br /><object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=4,0,2,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="290"><param name="movie" value="http://dev.mo.cn/upfiles/music.swf"><param name=quality value=high><embed src="http://dev.mo.cn/upfiles/music.swf" quality="high" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?p1_prod_version=shockwaveflash" type="application/x-shockwave-flash" width="400" height="290">http://dev.mo.cn/upfiles/music.swf</embed></object><br /></div><br />今天发现个有意思的玩意，发上来给大家玩玩。<br />先用鼠标在钢琴上点一下。键盘输入字母<br />歌谱：<br />童话：LONOL&nbsp;LONOL&nbsp;LONO&nbsp;OOMML&nbsp;LONOL&nbsp;LQPPO&nbsp;LONOM&nbsp;MMOTS&nbsp;PPRRQQ&nbsp;QQNPOONO&nbsp;ONOR&nbsp;LSRQP&nbsp;PPRRQQ&nbsp;QQVUTUV&nbsp;VPOT&nbsp;TTSSS<br />LSRQQRQ&nbsp;QRQ&nbsp;RQPO&nbsp;OQST&nbsp;TTSPPRQ&nbsp;OQST&nbsp;TTSPPRQRQPO&nbsp;PQMMOONO<br />月亮代表我的心<br />LOQSONQS&nbsp;STUVTS&nbsp;QPOOO&nbsp;QPOOO&nbsp;PQPOMPQP<br />LOQSONQS&nbsp;STUVTS&nbsp;QPOOO&nbsp;QPOOO&nbsp;PQPMNOPO<br />QSQPOSN&nbsp;MNMNMLQ&nbsp;SQPOSN&nbsp;MNOOOPQP<br />LOQSONQS&nbsp;STUVTS&nbsp;QPOOO&nbsp;QPOOO&nbsp;PQPMNOPO<br />痴心绝对<br />OPQQQRQPPOPPSP&nbsp;ONOOOQQOOMNNQN<br />MLMMMRRQSO&nbsp;MLMMMRROOMP<br />OOPQQQRQPPOPPSP&nbsp;ONOOOQQOOMNNQN<br />MLMMRRQSO&nbsp;MLMMMRROOONO<br />北京欢迎你》歌谱&nbsp;<br />QSQPQPQQPMO&nbsp;QP&nbsp;<br />北京欢迎你<br />POMOPQSPQTSSPO&nbsp;<br />POMOPQSPQTSSQ&nbsp;<br />PQPOSTQMQPPO&nbsp;<br />QSVSTTS&nbsp;QQ&nbsp;SS&nbsp;QS&nbsp;TV&nbsp;WV&nbsp;SQ&nbsp;P&nbsp;S&nbsp;Q&nbsp;Q&nbsp;<br />QS&nbsp;VS&nbsp;TV&nbsp;WV&nbsp;SQ&nbsp;SVT&nbsp;QP&nbsp;QS&nbsp;XW&nbsp;VV&nbsp;<br />千千阙歌<br />HHIJ&nbsp;LMONNNLJ<br />IIIJK&nbsp;MOQPPNL<br />HHIJ&nbsp;LMONNNLJ<br />IIIJK&nbsp;MOQPPNL<br />MLMLMNNMN&nbsp;PPPPNOPQ<br />QQPPPOQ&nbsp;NLM<br />LMOPQQPQ&nbsp;QPOP&nbsp;OMM<br />LMOP&nbsp;QQPQ&nbsp;QSTSQQ<br />QQPPOPOM&nbsp;QQRQPOP&nbsp;QQ&nbsp;Q&nbsp;P<br />POP&nbsp;OMOO<br />会呼吸的痛<br />STVTXXTW&nbsp;WWVUVWXWSV<br />VUTUVRRRVVWVSSS&nbsp;SYXWXX<br />STVTXXTW&nbsp;WWVUVWXWSVV<br />VUTUVRRRVVWVSSS&nbsp;STUVVUVV]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">艾恩Asp上传组件(类)最新更新</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_206.html" />
      <updated>2009-4-11 15:36:06</updated>
      <published>2009-4-11 15:36:06</published>
      <id>http://dev.mo.cn/article_206.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;艾恩Asp无组件上传类及上传组件最新更新！更新版本为9.4.10，本次更新优化可上传类的代码，修正了用户发现的bug，重新写了简单的示例程序，同时修改了无刷新上传的js代码，对程序进行优化。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;本次更新的内容有:<ol type="1"><li>&nbsp;修改AnUpload类的Err属性为ErrorID，防止与系统对象冲突<li>&nbsp;严格定义各变量，修正了使用Option&nbsp;Explicit选项时的BUG<li>&nbsp;开放fileAction类的NewName和LocalName的可读属性<li>&nbsp;修正Ajax无刷新上传时上传3个文件不能上传的BUG<li>&nbsp;舍弃以前的示例，重新写了示例程序</ol><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;详细示例请参考<a href="http://dev.mo.cn/show.asp?id=192" target="new">http://dev.mo.cn/show.asp?id=192</a>]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">如何通过使用XMLHTTP发送二进制流</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_205.html" />
      <updated>2009-4-10 11:19:23</updated>
      <published>2009-4-10 11:19:23</published>
      <id>http://dev.mo.cn/article_205.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;<span style="color:#FF0000;">本文章摘自&nbsp;"Microsoft帮助和支持"中心</span>，由于没有测试环境，未对下面代码进行测试<br />&nbsp;&nbsp;&nbsp;有些情况下，您可能需要向服务器发送二进制数据流。要这样做，一种方法是使用IXMLHTTPRequest&nbsp;对象。本文说明如何从服务器中检索&nbsp;ADO&nbsp;记录集，修改它，然后将它作为二进制数据流发送回服务器。&nbsp;<br />&nbsp;&nbsp;本例使用ADODB.Stream&nbsp;对象来保存将发送回服务器的二进制数据。&nbsp;如果已经以并列模式安装了更高版本的&nbsp;MSXML，要使用该特定版本运行示例代码，必须明确使用该版本的&nbsp;GUID&nbsp;或&nbsp;ProgID。例如，MSXML&nbsp;第&nbsp;4&nbsp;版仅在并列模式下安装。请参考以下&nbsp;Microsoft&nbsp;知识库文章，了解使用&nbsp;MSXML&nbsp;4.0&nbsp;分析器运行示例代码需要更改哪些代码：Q305019&nbsp;INFO:MSXML&nbsp;4.0&nbsp;Specific&nbsp;GUIDs&nbsp;and&nbsp;ProgIds（MSXML&nbsp;4.0&nbsp;特定的&nbsp;GUID&nbsp;和&nbsp;ProgId）。<br /><br />例如，在以下代码中，您将用&nbsp;MSXML&nbsp;4.0&nbsp;和下面的语句创建对象：&nbsp;<br />var&nbsp;xmlhttp&nbsp;=&nbsp;new&nbsp;ActiveXObject("Msxml2.XMLHTTP.4.0");<br />xmldoc&nbsp;=&nbsp;new&nbsp;ActiveXObject("Msxml2.DOMDocument.4.0");<br />var&nbsp;xmlhttp&nbsp;=&nbsp;new&nbsp;ActiveXObject("Msxml2.XMLHTTP.4.0");<br />要用&nbsp;XMLHTTP&nbsp;向服务器发送二进制数据流，请遵循以下步骤：&nbsp;<br />1.将下面的代码粘贴到默认&nbsp;Web&nbsp;文件夹中的某个文件中并将该文件命名为&nbsp;Receiver.asp。<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;%<br />dim&nbsp;Connection<br />dim&nbsp;rs<br />Connection&nbsp;=&nbsp;"Provider=SQLOLEDB.1;Data&nbsp;Source=servername;User&nbsp;Id=username;Password=password;Initial&nbsp;Catalog=Northwind;"<br />sql&nbsp;=&nbsp;&nbsp;"Select&nbsp;*&nbsp;from&nbsp;Customers"<br /><br /><br />set&nbsp;rs&nbsp;=&nbsp;server.CreateObject("ADODB.Recordset")<br /><br />if&nbsp;Request.QueryString("getRecordset")&nbsp;=&nbsp;"YES"&nbsp;then<br />&nbsp; &nbsp; &nbsp; &nbsp; rs.ActiveConnection&nbsp;=&nbsp;Connection<br />&nbsp; &nbsp; &nbsp; &nbsp; rs.CursorLocation&nbsp;=&nbsp;3&nbsp;'Client&nbsp;Side<br />&nbsp; &nbsp; &nbsp; &nbsp; rs.CursorType&nbsp;=&nbsp;3&nbsp;'Static&nbsp;Recordset<br />&nbsp; &nbsp; &nbsp; &nbsp; rs.LockType&nbsp;=&nbsp;4&nbsp;'Batch&nbsp;Optimistic<br />&nbsp; &nbsp; &nbsp; &nbsp; rs.Open&nbsp;sql<br />&nbsp; &nbsp; &nbsp; &nbsp; rs.Save&nbsp;response,&nbsp;1&nbsp;'persist&nbsp;adPersistXML<br />&nbsp; &nbsp; &nbsp; &nbsp; Response.End<br />else<br />&nbsp; &nbsp; &nbsp; &nbsp; rs.open&nbsp;Request&nbsp;'.BinaryRead(Request.TotalBytes)<br />&nbsp; &nbsp; &nbsp; &nbsp; rs.activeconnection&nbsp;=&nbsp;Connection&nbsp;'Reconnect<br />&nbsp; &nbsp; &nbsp; &nbsp; rs.updatebatch&nbsp;'Update&nbsp;adAffectAll<br />&nbsp; &nbsp; &nbsp; &nbsp; rs.close<br />&nbsp; &nbsp; &nbsp; &nbsp; Response.Write&nbsp;"Recordset&nbsp;Saved"&nbsp;'Send&nbsp;back&nbsp;response<br />&nbsp; &nbsp; &nbsp; &nbsp; Response.End<br />end&nbsp;if<br /><br />%&gt;</div></div><br /><br />2.将下面的代码粘贴到默认&nbsp;Web&nbsp;文件夹中的某个文件中并将该文件命名为&nbsp;Sender.asp<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;SCRIPT&nbsp;ID=clientEventHandlersJS&nbsp;LANGUAGE=javascript&gt;<br />&lt;!--<br /><br />var&nbsp;rs;<br />var&nbsp;xmldoc;&nbsp;<br />var&nbsp;xmlstream;<br /><br />function&nbsp;SendRS_onclick()&nbsp;{<br />&nbsp; &nbsp; &nbsp; &nbsp; xmlstream&nbsp;=&nbsp;new&nbsp;ActiveXObject("ADODB.Stream");<br />&nbsp; &nbsp; &nbsp; &nbsp; xmlstream.Mode&nbsp;=&nbsp;3;&nbsp;//read&nbsp;write<br />&nbsp; &nbsp; &nbsp; &nbsp; xmlstream.Open();<br />&nbsp; &nbsp; &nbsp; &nbsp; xmlstream.Type&nbsp;=&nbsp;1;&nbsp;//&nbsp;adTypeBinary<br />&nbsp; &nbsp; &nbsp; &nbsp; rs.Save(xmlstream,0);&nbsp;//adpersistadtg<br />&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; var&nbsp;xmlhttp&nbsp;=&nbsp;new&nbsp;ActiveXObject("Msxml2.XMLHTTP");<br />&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; xmlhttp.Open("POST","http://localhost/Receiver.asp?getRecordset=NO",false);<br />&nbsp; &nbsp; &nbsp; &nbsp; xmlhttp.setRequestHeader("Content-Length",xmlstream.Size);&nbsp;//set&nbsp;the&nbsp;length&nbsp;of&nbsp;the&nbsp;content<br />&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; xmlhttp.send(xmlstream.Read(xmlstream.Size));&nbsp;//Send&nbsp;the&nbsp;stream<br />&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; alert(xmlhttp.responseText);<br />}<br /><br />function&nbsp;getRS_onclick()&nbsp;{<br />&nbsp; &nbsp; &nbsp; &nbsp; rs&nbsp;=&nbsp;new&nbsp;ActiveXObject("ADODB.Recordset");<br />&nbsp; &nbsp; &nbsp; &nbsp; xmldoc&nbsp;=&nbsp;new&nbsp;ActiveXObject("Msxml2.DOMDocument");<br />&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; var&nbsp;xmlhttp&nbsp;=&nbsp;new&nbsp;ActiveXObject("Msxml2.XMLHTTP");<br />&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; xmlhttp.Open("Get","http://localhost/Receiver.asp?getRecordset=YES",false);<br />&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; xmlhttp.send();<br />&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; xmldoc.loadXML(xmlhttp.responseText);&nbsp;//load&nbsp;the&nbsp;returned&nbsp;stream&nbsp;into&nbsp;the&nbsp;dom&nbsp;document<br />&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; rs.Open(xmldoc);&nbsp;//load&nbsp;the&nbsp;dom&nbsp;document&nbsp;into&nbsp;the&nbsp;recordset<br />&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; alert("Recordset&nbsp;Loaded");<br />}<br /><br />function&nbsp;Update_onclick()&nbsp;{<br />&nbsp; &nbsp; &nbsp; &nbsp; alert("before:&nbsp;"&nbsp;+&nbsp;rs.Fields(2).Value);<br />&nbsp; &nbsp; &nbsp; &nbsp; rs.Fields(2).Value&nbsp;=&nbsp;rs.Fields(2).Value&nbsp;+&nbsp;"!";<br />&nbsp; &nbsp; &nbsp; &nbsp; rs.Update();<br />&nbsp; &nbsp; &nbsp; &nbsp; alert("after:&nbsp;"&nbsp;+&nbsp;rs.Fields(2).Value);<br />}<br /><br />//--&gt;<br />&lt;/SCRIPT&gt;<br />&lt;INPUT&nbsp;type="button"&nbsp;value="Get&nbsp;Recordset"&nbsp;id=getRS&nbsp;name=getRS&nbsp;LANGUAGE=javascript&nbsp;onclick="return&nbsp;getRS_onclick()"&gt;<br />&lt;INPUT&nbsp;type="button"&nbsp;value="Update"&nbsp;id=Update&nbsp;name=Update&nbsp;LANGUAGE=javascript&nbsp;onclick="return&nbsp;Update_onclick()"&gt;<br />&lt;INPUT&nbsp;type="button"&nbsp;value="Send&nbsp;Recordset"&nbsp;id=SendRS&nbsp;name=SendRS&nbsp;LANGUAGE=javascript&nbsp;onclick="return&nbsp;SendRS_onclick()"&gt;</div></div><br /><br />3.修改&nbsp;Receiver.asp&nbsp;页，使连接变量包含&nbsp;Microsoft&nbsp;SQL&nbsp;Server&nbsp;名称和有效的&nbsp;SQL&nbsp;用户&nbsp;ID&nbsp;和密码。<br />4.启动&nbsp;Microsoft&nbsp;Internet&nbsp;Explorer，然后浏览到&nbsp;http://localhost/sender.asp。<br />5.单击Get&nbsp;Recordset（获得记录集）。出现一个消息框，告诉您记录集已成功加载。<br />6.单击Update（更新）。出现一个消息框，显示更新前的值。出现第二个消息框，显示更新后的值。<br />7.单击Send&nbsp;Recordset（发送记录集）。出现一个消息框，告诉您记录集已更新。<br /><br />虽然这使您可以使用持久的机制向客户端来回传递数据，但在&nbsp;SQL&nbsp;Server&nbsp;2000&nbsp;中，建议您使用&nbsp;UpdateGrams&nbsp;或OpenXML&nbsp;来传递和发送&nbsp;XML&nbsp;格式的记录集数据。<br />成形记录集&nbsp;(Shaped&nbsp;Recordset)&nbsp;中有些限制。编辑过的成形记录集不能以&nbsp;XML&nbsp;格式保持。另外，参数化的成形命令根本不可能保持。有关保持和限制的其他相关信息，请参见下面的&nbsp;Microsoft&nbsp;Developer&nbsp;Network&nbsp;(MSDN)&nbsp;Web&nbsp;站点：<br />XML&nbsp;Persistence&nbsp;Format（XML&nbsp;持久格式）<br /><a href="http://msdn.microsoft.com/library/psdk/dasdk/xmli3vsk.htm" target="new">http://msdn.microsoft.com/library/psdk/dasdk/xmli3vsk.htm</a>]]>
      </summary>
      <category term="" label="JavaScript/DOM" scheme="http://dev.mo.cn/cat_diary_9.html" />
   </entry>
   <entry>
      <title type="html">XML技术上传文件</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_204.html" />
      <updated>2009-4-10 11:14:16</updated>
      <published>2009-4-10 11:14:16</published>
      <id>http://dev.mo.cn/article_204.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;为了在HTML网页中获得上传功能，在客户端我们可以使用如下格式的FORM：<br /><br />&lt;&nbsp;FORM&nbsp;NAME="myForm"&nbsp;ACTION="TargetURL.asp"&nbsp;ENCTYPE="multipart/form-data"METHOD="post"&nbsp;&gt;<br />&lt;&nbsp;INPUT&nbsp;TYPE="file"&nbsp;NAME="myFile"&nbsp;&gt;<br />&lt;&nbsp;INPUT&nbsp;TYPE="submit"&nbsp;VALUE="Upload&nbsp;File"&nbsp;&gt;<br />&lt;&nbsp;/FORM&nbsp;&gt;<br /><br />　　这种方案在客户端和服务器端的使用都有很多限制。首先，我们必须使用POST方法，因为GET方法无法处理这样的表单数据。并且，没有什么方法可以在不使用表单的情况下引发一个POST动作。把数据发送给表单处理程序后，浏览器将会把处理程序作为新页面加载，然后使用者会看到一个不讨人喜欢的页面转换过程。<br /><br />　　ENCTYPE属性为表单定义了MIME编码方式，上传文件的表单的ENCTYPE属性必须使用“multipart/form-data”。把这个属性设置为“multipart/form-data”就创建了一个与传统结构不同的POST缓冲区（复合结构），ASP的Request对象无法访问这样的表单内容。所以，我们可以使用Request.binaryRead方法来访问这些数据，但是无法使用脚本语言来完成这一切。Request.binaryRead方法返回一个VTarray型数据（只包含无符号一字节字符的Variant型数组）。但是脚本语言只能处理Variant型数据。为了解决这个问题，只能使用专用的ASP上传组件，或者ISAPI扩展程序，比如CPSHOST.DLL。这是设计上的限制。<br /><br />新的上传方案<br /><br />需要按照如下步骤操作。<br />客户端：<br /><br />使用MSXML&nbsp;3.0创建一个XML文档<br />创建一个针对二进制内容的XML节点<br />使用ADO&nbsp;Stream&nbsp;object将上传的文件数据放入该节点<br />使用XMLHTTP对象把这个XML文档发送给Web服务器<br /><br /><br /><br />服务器端：<br /><br />　　从Request对象中读出XML文档读出二进制节点中的数据并且存储到服务器上的文件中。当然，我们也可以将其存储到数据库的BLOB型字段中。<br />　　在解释这段代码之前，我们可以对这个方案进行一些思考。<br /><br />对XML的思考<br /><br />　　XML格式支持很多数据类型，比如numeric,&nbsp;float,&nbsp;character等等。很多作者将XML定义为ASCII格式，但是我们不能忽视，XML技术还可以使用“bin.base64”数据类型来描述二进制信息。这个特性在MS&nbsp;XML3.0解析器重得到完全的支持，但是目前还需要一些特别设置。该对象提供一些可以对二进制数据进行完全控制的属性：<br /><br />　　obj_node.dataType&nbsp;-&nbsp;该可读写的属性定义了特定节点的数据类型。MSXML解析器支持更多的数据类型（参见MSDN：http://msdn.microsoft.com/library/psdk/xmlsdk/xmls3z1v.htm）<br />对于二进制数据，我们可以使用“bin.base64”类型。<br /><br />　　obj_node.nodeTypedValue&nbsp;-&nbsp;该可读写属性包含了按照制定类型表示的指定节点的数据。<br />我们可以创建一个包含多个bin.base64类型节点的XML文档，节点中包含上传的文件。这点特性可以使用一个POST一次上传多个文件。<br /><br />　　我们可以使用XMLHttpRequest对象和POST方法发送一个XML文档给Web服务器。该对象为HTTP服务器提供了客户端协议支持，允许在Web服务器上发送和接受MS&nbsp;XMLDOM对象。XMLHttpRequest是Internet&nbsp;Explorer&nbsp;5内置的COM对象（不需要定制安装），并且发送完毕后无需转换页面。<br /><br /><br />对ADO&nbsp;Stream对象的思考<br /><br />　　我们可以在客户端创建一个包含一个或者多个二进制节点的XML文档。我们还必须把文件内容填入节点中。但是很不幸，脚本语言不能访问本地文件系统，并且Scripting.FileSystem对象（是Win32系统的内置对象）到目前为止还不能访问二进制文件。这是设计上的限制。所以我们需要另外找一个可以提供对本地二进制文件的访问的COM对象。<br /><br />　　ADO&nbsp;Stream对象（MDAC&nbsp;2.5中的组件）提供了读、写和管理二进制流数据的手段。字节流的内容可以是文本，或者二进制数据，并且没有容量上的限制。在ADO&nbsp;2.5中，Microsoft对Stream对象的介绍不属于ADO对象结构的任何一层，所以，我们无需捆绑即可使用该对象。<br /><br />　　本文中使用Stream对象来访问文件内容，再把内容存入XML节点。<br /><br />客户端<br /><br />以下示例代码使用Stream和MSXML对象完成文件上传动作。<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;&nbsp;HTML&nbsp;&gt;<br />&lt;&nbsp;HEAD&nbsp;&gt;&lt;&nbsp;TITLE&nbsp;&gt;File&nbsp;Send&lt;&nbsp;/TITLE&nbsp;&gt;&lt;&nbsp;/HEAD&nbsp;&gt;<br />&lt;&nbsp;BODY&nbsp;&gt;<br />&lt;&nbsp;INPUT&nbsp;id=btn_send&nbsp;name="btn_send"&nbsp;type=button&nbsp;value="FILE&nbsp;SEND"&nbsp;&gt;<br />&lt;&nbsp;DIV&nbsp;id=div_message&nbsp;&gt;Ready<br /><br /><br />&lt;&nbsp;/BODY&nbsp;&gt;<br />&lt;&nbsp;/HTML&nbsp;&gt;<br /><br />&lt;&nbsp;SCRIPT&nbsp;LANGUAGE=JavaScript&nbsp;&gt;<br /><br />//&nbsp;上传函数<br />function&nbsp;btn_send.onclick()<br />{<br />//&nbsp;创建&nbsp;ADO-stream&nbsp;对象<br />var&nbsp;ado_stream&nbsp;=&nbsp;new&nbsp;ActiveXObject("ADODB.Stream");<br /><br />//&nbsp;创建包含默认头信息和根节点的&nbsp;XML文档<br />var&nbsp;xml_dom&nbsp;=&nbsp;new&nbsp;ActiveXObject("MSXML2.DOMDocument");<br />xml_dom.loadXML('&nbsp;');<br />//&nbsp;指定数据类型<br />xml_dom.documentElement.setAttribute("xmlns:dt",&nbsp;"urn:schemas-microsoft-com:datatypes");<br /><br />//&nbsp;创建一个新节点，设置其为二进制数据节点<br />var&nbsp;l_node1&nbsp;=&nbsp;xml_dom.createElement("file1");<br />l_node1.dataType&nbsp;=&nbsp;"bin.base64";<br />//&nbsp;打开Stream对象，读源文件<br />ado_stream.Type&nbsp;=&nbsp;1;&nbsp;//&nbsp;1=adTypeBinary&nbsp;<br />ado_stream.Open();&nbsp;<br />ado_stream.LoadFromFile("c:\\tmp\\myfile.doc");<br />//&nbsp;将文件内容存入XML节点<br />l_node1.nodeTypedValue&nbsp;=&nbsp;ado_stream.Read(-1);&nbsp;//&nbsp;-1=adReadAll<br />ado_stream.Close();<br />xml_dom.documentElement.appendChild(l_node1);<br /><br />//&nbsp;可以创建多个二进制节点，一次上传多个文件<br /><br />//&nbsp;把XML文档发送到Web服务器<br />var&nbsp;xmlhttp&nbsp;=&nbsp;new&nbsp;ActiveXObject("Microsoft.XMLHTTP");<br />xmlhttp.open("POST","./file_recieve.asp",false);<br />xmlhttp.send(xml_dom);<br />//&nbsp;显示服务器返回的信息<br />div_message.innerHTML&nbsp;=&nbsp;xmlhttp.ResponseText;<br />}<br />&lt;&nbsp;/SCRIPT&nbsp;&gt;<br /></div></div><br /><br />服务器端<br /><br />以下代码使用相同的对象提供服务器端的上传处理功能。<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;&nbsp;%@&nbsp;LANGUAGE=VBScript%&nbsp;&gt;<br />&lt;&nbsp;%&nbsp;Option&nbsp;Explicit<br />Response.Expires&nbsp;=&nbsp;0&nbsp;<br /><br />'&nbsp;定义变量和对象。<br />dim&nbsp;ado_stream<br />dim&nbsp;xml_dom<br />dim&nbsp;xml_file1<br /><br />'&nbsp;创建&nbsp;Stream&nbsp;对象<br />set&nbsp;ado_stream&nbsp;=&nbsp;Server.CreateObject("ADODB.Stream")<br />'&nbsp;从Request对象创建&nbsp;XMLDOM对象<br />set&nbsp;xml_dom&nbsp;=&nbsp;Server.CreateObject("MSXML2.DOMDocument")<br />xml_dom.load(request)<br />'&nbsp;读出包含二进制数据的节点<br />set&nbsp;xml_file1&nbsp;=&nbsp;xml_dom.selectSingleNode("root/file1")<br /><br />'&nbsp;打开Stream对象，把数据存入其中&nbsp;<br />ado_stream.Type&nbsp;=&nbsp;1&nbsp;'&nbsp;1=adTypeBinary&nbsp;<br />ado_stream.open&nbsp;<br />ado_stream.Write&nbsp;xml_file1.nodeTypedValue<br />'&nbsp;文件存盘<br />ado_stream.SaveToFile&nbsp;"c:\tmp\upload1.doc",2&nbsp;'&nbsp;2=adSaveCreateOverWrite&nbsp;<br />ado_stream.close<br /><br />'&nbsp;销毁对象&nbsp;<br />set&nbsp;ado_stream&nbsp;=&nbsp;Nothing&nbsp;<br />set&nbsp;xml_dom&nbsp;=&nbsp;Nothing<br />'&nbsp;向浏览器返回信息<br />Response.Write&nbsp;"Upload&nbsp;successful!"<br />%&nbsp;&gt;</div></div><br />也可以使用Stream对象把数据放到数据库的BLOB型字段中。<br /><br />使用该方法的益处<br /><br />不引起页面转换。<br />不需要专用组件。<br />可同时上传多个文件。<br /><br />　　这段程序是纯脚本写成的，可以很容易的插入到其他代码中，而不需要任何HTML对象的配合。还可以把这个逻辑在任何支持COM标准的语言中实现。<br /><br />系统安全考虑<br /><br />　　该方法只能使用于内部网络，因为它需要IE5的安全级别设置为“低”。必须：<br /><br />　　允许脚本和ActiveX对象。该设置允许浏览器执行类似&nbsp;"myobj&nbsp;=&nbsp;new&nbsp;activexobject(...)"的&nbsp;JScript语句；<br /><br />　　必须允许穿越域访问数据源。这个设置允许在客户端使用Stream对象。还必须在服务器和客户端都安装MS&nbsp;XML&nbsp;DOM&nbsp;3.0&nbsp;和MDAC&nbsp;2.5&nbsp;。<br />]]>
      </summary>
      <category term="" label="JavaScript/DOM" scheme="http://dev.mo.cn/cat_diary_9.html" />
   </entry>
   <entry>
      <title type="html">强烈推荐的一本JS书籍《悟透JavaScript》</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_203.html" />
      <updated>2009-4-10 9:19:52</updated>
      <published>2009-4-10 9:19:52</published>
      <id>http://dev.mo.cn/article_203.html</id>
      <summary type="html">
      <![CDATA[突然发现这本书的作者太强了，讨论js的同时连物理，哲学，文学...一起讨论了，值得一看，况且内容也不错<br /><br />下面几个段落摘自本书<br /><br />段落1<br /><div class="quote">&nbsp;&nbsp;&nbsp;编程世界里只存在两种基本元素，一个是数据，一个是代码。编程世界就是在数据和代码千丝万缕的纠缠中呈现出无限力。&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;数据天生就是文静的，总想保持自己固有的本&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;你看，数据代码间的关系与物质能量间的关系有着惊人的相似。数据也是有惯性的，如果没有代码来施加外力，她总保持自己原来的状态。而代码就象能量，他存在的唯一目的，就是要努力改变数据原来的状态。在代码改变数据的同时，也会因为数据的抗拒而反过来影响或改变代码原有的趋势。甚至在某些情况下，数据可以转变为代码，而代码却又有可能被转变为数据，或许还存在一个类似E=MC2形式的数码转换方程呢。然而，就是在数据和代码间这种即矛盾又统一的运转中，总能体现出计算机世界的规律，这些规律正是我们编写的程序逻辑。&nbsp;</div><br /><br />段落2<br /><div class="quote">&nbsp;&nbsp;&nbsp;我们知道，数组应该算是线性数据结构，线性数据结构一般有一定的规律，适合进行统一的批量迭代操作等，有点像波。而离散数据结构，适合描述分散的和个性化的东西，有点像粒子。因此，我们也可以这样问：JavaScript里的对象到底是波还是粒子？&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;如果存在对象量子论，那么答案一定是：波粒二象性！</div><br /><br />段落3<br /><div class="quote">&nbsp;&nbsp;&nbsp;&nbsp;还记得儿时那个“小蝌蚪找妈妈”的童话吗？也许就在昨天晚，你的孩子刚好是在这个美丽的童话中进入梦乡的吧。可爱的小蝌蚪也就是在其自身类型不断演化过程中，逐渐变成了和妈妈一样的“类”，从而找到了自己的妈妈。这个童话故事中蕴含的编程哲理就是：对象的“类”是从无到有，又不断演化，最终又消失于无形之中的...&nbsp;<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;“类”，的确可以帮助我们理解复杂的现实世界，这纷乱的现实世界也的确需要进行分类。但如果我们的思想被“类”束缚住了，“类”也就变成了“累”。想象一下，如果一个生命对象开始的时就被规定了固定的“类”，那么它还能演化吗？蝌蚪还能变成青蛙吗？还可以给孩子们讲小蝌蚪找妈妈的故事吗？&nbsp;</div><br /><span style="font-size:20px;">下载地址：<a href="http://dev.mo.cn/upfiles/20090410091404072.rar" target="new">upfiles/20090410091404072.rar</a></span>]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">“正式”回到学校了</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_202.html" />
      <updated>2009-4-9 16:37:47</updated>
      <published>2009-4-9 16:37:47</published>
      <id>http://dev.mo.cn/article_202.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;回来啦！<br />&nbsp;&nbsp;&nbsp;回家待了5天，昨天下午回来啦，回来发现累的要死，不知道怎么了，心情也特别不好，宿舍也不能上网了，就睡了一下午，哈。<br />&nbsp;&nbsp;&nbsp;今天大早上又去薛家岛采集生物样品，本来要挖50个蛤蛎的，跑遍整个沙滩就挖了18个(亲自数的，哈哈)。一直忙到下午1点才吃午饭，吃午饭也吃的很郁闷，海边的餐馆太黑，吃碗炒面好几十块钱(人家说里面有鲍鱼，超汗)，9个人要了10个菜1个汤再加主食花了350，很吓人的，以后再也不去那边吃饭了，估计他们也没啥回头客。<br />&nbsp;&nbsp;&nbsp;本来打算下午继续去挖挖看，吃完饭大家都没心情了，就坐轮渡(在青岛待了四年，第一次坐，惭愧)直接回青岛了。<br />&nbsp;&nbsp;&nbsp;好累。。。Now。。。]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">清明了，回家看看</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_201.html" />
      <updated>2009-4-3 9:15:18</updated>
      <published>2009-4-3 9:15:18</published>
      <id>http://dev.mo.cn/article_201.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;清明到了，准备回家看看。以前不管什么节日，很少回家过，现在特别想回家了，哈，顺便带上女朋友一起回去。<br />&nbsp;<br />&nbsp;&nbsp;下周二才能回来，不在的这几天可能就不会上网了，网站备份一下，暂停维护。如果期间有什么问题，可以将问题发送到我的邮箱，回来的时候我会第一时间查看。<br /><br />&nbsp;&nbsp;劳累在网站制作第一线的朋友们借假期好好休息两天，回来继续加油。哈哈<br /><br />&nbsp;&nbsp;闪人，回家了！再见，我的朋友们！节日快乐！<br /><br />&nbsp;&nbsp;PS：假期联系方式&nbsp;&nbsp;0539-2886529]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">乞丐给我上了一课</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_200.html" />
      <updated>2009-4-2 22:20:56</updated>
      <published>2009-4-2 22:20:56</published>
      <id>http://dev.mo.cn/article_200.html</id>
      <summary type="html">
      <![CDATA[我拎着刚买的levis从茂业出来，站在门口等一个朋友。一个职业乞丐发现了我，非常专业的、径直的停在我面前。这一停，于是就有了后面这个让我深感震撼的故事，就象上了一堂生动的市场调查案例课。为了忠实于这个乞丐的原意，我凭记忆尽量重复他原来的话。<br />"先生……行行好，给点吧。"我一时无聊便在口袋里找出一个硬币扔给他并同他&nbsp;攀谈起来。&nbsp;<br />乞丐很健谈。"……我只在华强北一带乞讨，你知道吗？我一扫眼就见到你。在茂业买levis，一定舍得花钱……"&nbsp;<br />"哦？你懂的蛮多嘛！"我很惊讶。&nbsp;<br />"做乞丐，也要用科学的方法。"他说。<br />我一愣，饶有兴趣地问"什么科学的方法？"&nbsp;<br />"你看看我和其它乞丐有什么不同的地方先？"我仔细打量他，头发很乱、衣很&nbsp;破、手很瘦，但都不脏。&nbsp;<br />他打断我的思考，说："人们对乞丐都很反感，但我相信你并没有反感我，这点&nbsp;我&nbsp;看的出来。这就是我与其它乞丐的不同之处。"&nbsp;<br />我点头默认，确实不反感，要不我怎么同一个乞丐攀谈起来。<br />"我懂得swot分析，优势、劣势、机会和威胁。对于我的竞争对手，我的优势是我&nbsp;不令人反感。机会和威胁都是外在因素，无非是深圳人口多和深圳将要市容整改等。&nbsp;"<br />"我做过精确的计算。这里每天人流上万，穷人多，有钱人更多。理论上讲，我若是每天向每人讨1块钱，那我每月就能挣30万。但是，并不是每个人都会给，而且每天也讨不了这么多人。所以，我得分析，哪些是目标客户，哪些是潜在客户。"他润润嗓子继续说，"在华强北区域，我的目标客户是总人流量的3成，成功几率70%。潜在客户占2成，成功几率50%；剩下5成，我选择放弃，因为我没有足够的时间在他们身上碰运气。"&nbsp;<br />"那你是怎样定义你的客户呢？"我追问。<br />"首先，目标客户。就像你这样的年轻先生，有经济基础，出手大方。另外还有那些情侣也属于我的目标客户，他们为了在异性面前不丢面子也会大方施舍。其次，我把独自一人的漂亮女孩看作潜在客户，因为她们害怕纠缠，所以多数会花钱免灾。这两类群体，年龄都控制在20~30岁。年龄太小，没什么经济基础；年龄太大，可能已结婚，财政大权掌握在老婆手中。这类人，根本没戏，恨不得反过来找我要钱。"&nbsp;<br />"那你每天能讨多少钱。"我继续问。&nbsp;<br />"周一到周五，生意差点，两百块左右吧。周末，甚至可以讨到四、五百。"&nbsp;<br />"这么多？"<br />见我有些怀疑，他给我算了一笔帐。"和你们一样，我也是每天工作8小时，上午11点到晚上7点，周末正常上班。我每乞讨1次的时间大概为5秒钟，扣除来回走动和搜索目标的时间，大概1分钟乞讨1次得1块钱，8个小时就是480块，再乘以成功几率60%[（70%+50%）÷2]，得到将近300块。"&nbsp;<br />"千万不能黏着客户满街跑。如果乞讨不成，我决不死缠滥打。因为他若肯给钱的话早就给了，所以就算腆着脸纠缠，成功的机会还是很小。不能将有限的时间浪费在无施舍欲望的客户身上，不如转而寻找下一个目标。"&nbsp;<br />强！这个乞丐听上去真不可貌相，倒像是一位资深的市场营销总监。&nbsp;<br />"你接着说。"我更感兴趣了，看来今天能学到新的东西了。<br />"有人说做乞丐是靠运气吃饭，我不以然。给你举个例子，女人世界门口，一个帅气的男生，一个漂亮的女孩，你选哪一个乞讨？"<br />我想了想，说不知道&nbsp;。&nbsp;<br />"你应该去男的那儿。身边就是美女，他不好意思不给。但你要去了女的那边，&nbsp;她大可假装害怕你远远地躲开。"<br />"再给你举个例子。那天cocopark门口，一个年轻女孩，拿着一个购物袋，刚买完东西；还有一对青年男女，吃着冰淇淋；第三个是衣着考究的年轻男子，拿着笔记本包。我看一个人只要3秒钟，我毫不犹豫地走到女孩面前乞讨。女孩在袋子里掏出两个硬币扔给我，并奇怪我为什么只找她乞讨。我回答说，那对情侣，在吃东西，不方便掏钱；那个男的是高级白领，身上可能没有零钱；你刚从超市买东西出来，身上肯定有零钱。"&nbsp;<br />有道理！我越听越有意思。&nbsp;<br />"所以我说，知识决定一切！"我听十几个总裁讲过这句话，第一次听乞丐也这么说。<br />"要用科学的方法来乞讨。天天躺在天桥上，怎么能讨到钱？走天桥的都是行色匆匆的路人，谁没事走天桥玩，爬上爬下的多累。要用知识武装自己，学习知识可以把一个人变得很聪明，聪明的人不断学习知识就可以变成人才。21世纪最需要的是什么？&nbsp;就是人才。"&nbsp;<br />"有一次，一人给我50块钱，让我替他在楼下喊'安红，我想你'，喊100声。我一合计，喊一声得花5秒钟，跟我乞讨一次花费的时间相当，所得的酬劳才5毛钱，于是我拒绝了他。<br />"在深圳，一般一个乞丐每月能讨个千儿八百。运气好时的大概两千多点。全深圳十万个乞丐，大概只有十个乞丐，每月能讨到一万以上。我就是这万中挑一的一个。&nbsp;而且很稳定，基本不会有很大的波动。"&nbsp;<br />太强了！我越发佩服这个乞丐了。<br />我常说我是一个快乐的乞丐。其它乞丐说是因为我讨的钱多，所以快乐。我对他们说，你们正好错了。正是因为我有快乐、积极的心态，所以讨的钱多。"&nbsp;<br />说的多好啊！&nbsp;<br />"乞讨就是我的工作，要懂得体味工作带来的乐趣。雨天人流稀少的时候，其它&nbsp;乞丐都在抱怨或者睡觉。千万不要这样，用心感受一下这坐城市的美。晚上下班后带着老婆孩子逛街玩耍看夜景，一家三口其乐融融，也不枉此生了。若是碰到同行，有时也会&nbsp;扔个硬币，看着他们高兴的道谢走开，就仿佛看见自己的身影。"&nbsp;<br />"你还有老婆孩子？"我不禁大声赞叹，引来路人侧目。&nbsp;<br />"我老婆在家做全职太太，孩子念小学。我在福田区贷款买了一套房，十年分期，<br />还差六年就还清了。我要努力挣钱，供我儿子读大学念市场营销专业，然后子承父业当一个比我更出色的乞丐。"、<br />"我5年前在微软大中华区做市场策划，2年前升为营销经理，月薪5千。那时分期付款买了一台1万多的三星笔记本计算机，每个月还款2千，要死要活的。后来我想这样永远也出不了头，就辞职不干了，下海来做乞丐，我愿意做一个高素质的乞丐。"&nbsp;<br />听完，我激动地说："你有没有兴趣收我做徒弟？"......&nbsp;<br />]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">超搞笑段子,哈哈</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_199.html" />
      <updated>2009-3-31 17:01:41</updated>
      <published>2009-3-31 17:01:41</published>
      <id>http://dev.mo.cn/article_199.html</id>
      <summary type="html">
      <![CDATA[1.我以后生个儿子名字要叫“好帅”，那别人看到我就会说“好帅的爸爸”<br />2.工作，退一步海阔天空，爱情，退一步人去楼空。<br />3.工作的最高境界就是看着别人上班，领着别人的工资。<br />4.钱不是问题，问题是没钱！<br />5.喝醉了我谁也不服,我就扶墙!<br /><br />6.我就像一只趴在玻璃上的苍蝇，前途一片光明，但又找不到出路．<br />7.大师兄，你知道吗？二师兄的肉现在比师傅的都贵了<br /><br />8.如果多吃鱼可以补脑让人变聪明的话，那么你至少得吃一对儿鲸鱼……<br />9.水至清则无鱼，人至贱则无敌。<br />10.青春就像卫生纸，看着挺多得，用着用着就不够了<br />11.我身边的朋友们啊，你们快点出名吧，这样我的回忆录就可以畅销了<br />12.一女同学黑了些,她男友又太白了些,有天宿舍里得毒舌天后突然对她冒出一句：“你们这样不行,你们会生出斑马来的”<br /><br />13.老娘一向视帅哥与金钱如粪土，而他们也一直是这样看我的<br />14.不要和我比懒,我懒得和你比<br />15.我不是个随便的人&nbsp;我随便起来不是人<br />16.上帝说,要有光,我说我反对,从此世界上有了黑暗<br />17.今天心情不好.我只有四句话想说.包括这句和前面的两句.我的话说完了&nbsp;.<br />18.做人就要做一个徘徊在牛A和牛C之间的人<br />19.我的大名叫上帝，小名叫耶稣，英文名God，&nbsp;法号是如来...<br />20.树不要皮，必死无疑；人不要脸，天下无敌。<br /><br />21.农夫三拳有点疼&nbsp;<br />22.其实我一直很受人欢迎的：小时候的我人见人爱，如今的我人贱人爱<br />23.不怕虎一样的敌人，就怕猪一样的队友<br /><br />24.走自己的路，让别人打车去吧(走别人的路,让别人走投无路)<br /><br />25.老鼠扛刀，满街找猫<br />26.只要功夫深，拉屎也认真&nbsp;R&gt;)<br />27.中国人谁跑的最快？是曹操（非刘翔）。因为说曹操曹操到&nbsp;<br />28.思想有多远，你就给我滚多远&nbsp;<br />29.只有在火车站大排长龙时，才能真正意识到自己是“龙的传人”。<br />30.有情人终成家属&nbsp;<br />31.春天来了,一群大雁正向北飞,一会儿排成B字型,一会儿排成T字型..<br />32.在哪里跌倒&nbsp;就在哪里躺下&nbsp;<br />33.老虎不发威&nbsp;你当我是HELLO&nbsp;KITTY！&nbsp;<br />34.驴是的念来过倒~&nbsp;<br />35.吃自助最高境界：扶墙进，扶墙出。<br />36.丢失...<br />37.没有钱，没有权，再不对你好点，你能跟我？&nbsp;<br />38.拿份报纸上厕所，俺是读书人。&nbsp;<br />39.上Google上百度一下。&nbsp;<br />40.女人一定要对自己好一点。一旦累死了，就会有别的女人花你的钱，住你的房，睡你的老公，打你的娃！&nbsp;<br />41.你的丑和你的脸没有关系…<br />42.爷爷都是从孙子走过来的……<br /><br />43.老天，你让夏天和冬天同居了吗？！生出这种鬼天气！&nbsp;<br />44.鸟大了什么林子都有！<br /><br />45.不怕虎一样的敌人，就怕猪一样的队友。&nbsp;<br />46.夏天就是不好，穷的时候我连西北风都没得喝……&nbsp;<br />47.随你大小便！<br />48.怀才就像怀孕，时间久了才能让人看出来。&nbsp;<br />49.没什么事就不要找我，有事了更不要找我。<br />50.你以为我会眼睁睁地看着你去送死？我会闭上眼睛的。&nbsp;<br />51.天使之所以会飞，是因为她们把自己看得很轻……<br />52.我想早恋，可是已经晚了……<br />53.请你以后不要在我面前说英文了，<br />54.思想有多远，你就给我滚多远！<br />55.好久没有人把牛皮吹的这么清新脱俗了！&nbsp;<br />56.老板，钱对你来说真的就那么重要吗？讲了三个多小时了一分钱都不降？<br />57.一觉醒来，天都黑了。<br />58.我要是做了人事部经理，第一件事就是提拔自己做老总。<br />59.我每天除了吃饭的时间全在减肥，你还说我没有毅力？&nbsp;<br />60.水能载舟，亦能煮粥。&nbsp;<br />61.买了电脑不上宽带，就好比酒肉都准备好了却在吃饭前当了和尚。<br />62.有一个很古老的传说??能在XX校园里看到美女的人会长生不老<br />63.生，容易；活，容易；生活，不容易。<br /><br />64.打死你我也不会说。&nbsp;<br />65.钱可以解决的问题都不是问题。&nbsp;<br />66.念了十几年书，想起来还是幼儿园比较好混！&nbsp;<br />67.连广告也信，读书读傻了吧？<br /><br />68.不吃饱哪有力气减肥啊？<br />69.睡眠是一门艺术??谁也不能阻挡我追求艺术的脚步。&nbsp;<br />70.早起的鸟儿有虫吃，早起的虫虫被鸟吃。<br />71.天哪，我的衣服又瘦了！<br /><br />72.我在女友手机里的名字是“他”，分手后，我就变成了“它”。<br />73.我和你不一样，因为我是人。<br /><br />74.问君能有几多愁，恰似一群太监上青楼<br /><br />75.我喝水只喝纯净水，牛奶只喝纯牛奶，所以我很单纯<br />76&nbsp;上天赐予我们青春的同时也赐予了我们青春痘。&nbsp;<br />77&nbsp;出问题先从自己身上找原因，别一便秘就怪地球没引力。<br /><br />78&nbsp;虽然我长的不是很帅，但小时候也有人夸我左边鼻孔很偶像派。<br />79&nbsp;老妈的规劝：闺女，要适当吃一点才有劲减肥啊！<br />80&nbsp;春天是感冒和感情高发的季节，有人不小心感冒了，有人不小心恋爱了，我属于前者。<br /><br />81&nbsp;我当年也是个痴情的种子，结果下了场雨~~~~~~~~~~~~~~~淹死啦。<br />82&nbsp;钞票不是万能的，有时还需要信用卡。<br />83&nbsp;我允许你走进我的世界，但决不允许你在我的世界里走来走去。<br />84&nbsp;我希望有一天能用鼠标双击我的钱包，然后选中一张百元大钞，按下“CTRL+C”.接着不停地“CTRL+V”.&nbsp;<br />85&nbsp;我是一棵孤独的树，千百年来矗立在路旁，寂寞的等待，只为有一天你从我身边走过时为你倾倒，砸不扁你就算我白活了。&nbsp;<br />86&nbsp;爱我的请举手，不爱我的请倒立。<br />87&nbsp;人怕出名猪怕壮，男怕没钱女怕胖。<br />88&nbsp;如果有钱也是一种错，我情愿一错再错。<br />89&nbsp;如果婚姻是爱情的坟墓，那么我期待有一个人把我埋了。<br />90&nbsp;千万别在一棵树上吊死，可以到周围的树上都试几次。<br />91&nbsp;不要把银行卡密码设成女朋友的生日，不然总要换多麻烦。&nbsp;<br />92&nbsp;最幸福的事：睡觉睡到自然醒。数钱数到手抽筋。最悲哀的事：睡觉睡到手抽筋，数钱数到自然醒。&nbsp;<br />93&nbsp;钱可以买房子但买不到家，可以买婚姻但买不到爱情，可以买钟表但买不到时间，钱不是一切，反而是痛苦的根源。把你的钱给我，让我一个人承担痛苦把！<br />94&nbsp;男孩穷着养，不然不晓得奋斗，女孩富着养，不然人家一块蛋糕就哄走了。<br /><br />95&nbsp;士为知己者装死，女为悦己者整容。<br />96&nbsp;命运负责洗牌，但是玩牌的是我们自己！&nbsp;<br />97&nbsp;年轻的时候，我们常常冲着镜子做鬼脸，年老的时候，镜子算是扯平了。<br />98&nbsp;爱人是种无奈，被爱是种姿态，等爱是种期待，无爱是种能耐。<br />99&nbsp;女人之美，在于蠢的无怨无悔，男人之美，在于说谎说的白日见鬼。<br />100&nbsp;明月几时有，把酒问室友，不知隔壁帅哥，可有女朋友？<br />101&nbsp;武功在高，也怕菜刀。]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">艾恩Javascript插件及Asp无组件上传综合演示</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_198.html" />
      <updated>2009-3-26 18:15:48</updated>
      <published>2009-3-26 18:15:48</published>
      <id>http://dev.mo.cn/article_198.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;欢迎使用艾恩<b><span style="color:#FF0000;">Javascript</span></b>系列插件以及Asp无组件上传类，本示例综合演示了各功能，各插件除日历外均为原创。<br />&nbsp;&nbsp;演示的功能包括：拖动，UBB编辑器，Ajax无刷新上传以及<span style="color:#FF0000;">日历插件(本插件非原创，经他人修改而来，版权归"UANV_日历"原作者所有)</span><br />&nbsp;&nbsp;<div align="center"><a href="http://dev.mo.cn/source_179.html" target="new"><b>演示包下载地址</b></a></div><br /><br /><div class="quote"><br />&nbsp;&nbsp;<b>几个上传示例程序的下载地址(示例使用的最后版本均为V9.2.09):</b><br /><ol type="1"><li>&nbsp;&nbsp;<a href="http://dev.mo.cn/source_143.html" target="new">艾恩ASP无组件上传类(An-Upload)V9.2.09</a><li>&nbsp;&nbsp;<a href="http://dev.mo.cn/source_167.html" target="new">艾恩ASP文件上传组件v9.2.09</a><li>&nbsp;&nbsp;<a href="http://dev.mo.cn/source_175.html" target="new">艾恩Ajax无刷新文件上传(带进度条,无组件)</a><li>&nbsp;&nbsp;<a href="http://dev.mo.cn/source_176.html" target="new">艾恩Ajax无刷新文件上传(带进度条,组件版,低CPU使用)</a></ol><br />&nbsp;&nbsp;<b>编辑器下载地址</b><br /><ol type="1"><li>&nbsp;&nbsp;<a href="http://dev.mo.cn/source_174.html" target="new">艾恩UBB编辑器(AnUbbEditor)</a></ol></div><br />&nbsp;&nbsp;拖动插件及日历插件都已经在编辑器的js文件里，根据本实例的方法进行调用即可；<br />&nbsp;&nbsp;拖动的使用方法：_.EndragEx(source,target,0,0);通过拖动source来拖动target;<br />&nbsp;&nbsp;点"上传文件"，在弹出层的标题上拖动鼠标，就会看到拖动效果。<br />&nbsp;&nbsp;点编辑器最上面一排倒数第二个按钮可预览内容。]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">艾恩AJAX无刷新上传再次进行优化</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_197.html" />
      <updated>2009-3-26 14:34:50</updated>
      <published>2009-3-26 14:34:50</published>
      <id>http://dev.mo.cn/article_197.html</id>
      <summary type="html">
      <![CDATA[优化了上传控件的创建方法，传递的参数只保留一个，即要绑定的DIV标签;<br />通过设置控件的属性target,url,savePath来分别设置目标iframe,上传处理页面以及文件保存目录。<br /><br />同时，ajax不再使用jquery,而使用自己原创Ajax函数，从而减小代码量；<br /><br /><div class="quote">/*======================================<br />下面语句使上传控件显示在上面ID为uploadContenter的Div标签<br />提交URL为upload.asp保存目录为upload<br />表单提交到上面name属性为AnUploader的iframe里面；<br />========================================*/<br /><br />var&nbsp;AjaxUp=new&nbsp;AjaxProcesser("uploadContenter");<br /><br />//设置提交到的iframe名称<br />AjaxUp.target="AnUploader";&nbsp;&nbsp;<br /><br />//上传处理页面<br />AjaxUp.url="upload.asp";&nbsp;<br /><br />//保存目录<br />AjaxUp.savePath="upload";</div><br /><br />&nbsp;&nbsp;<b>几个示例程序的下载地址(示例使用的最后版本均为V9.2.09):</b><br /><ol type="1"><li>&nbsp;&nbsp;<a href="http://dev.mo.cn/source_178.html" target="new">Ajax无刷新上传示例程序下载</a><li>&nbsp;&nbsp;<a href="http://dev.mo.cn/source_143.html" target="new">艾恩ASP无组件上传类(An-Upload)V9.2.09</a><li>&nbsp;&nbsp;<a href="http://dev.mo.cn/source_167.html" target="new">艾恩ASP文件上传组件v9.2.09</a><li>&nbsp;&nbsp;<a href="http://dev.mo.cn/source_175.html" target="new">艾恩Ajax无刷新文件上传(带进度条,无组件)</a><li>&nbsp;&nbsp;<a href="http://dev.mo.cn/source_176.html" target="new">艾恩Ajax无刷新文件上传(带进度条,组件版,低CPU使用)</a></ol><br /><br />如果有任何疑问或业务上的需要，请联系本人。本人简历&nbsp;<a href="http://dev.mo.cn/resume" target="new">http://dev.mo.cn/resume</a>]]>
      </summary>
      <category term="" label="AJAX" scheme="http://dev.mo.cn/cat_diary_2.html" />
   </entry>
   <entry>
      <title type="html">关于网友提出的一些问题</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_196.html" />
      <updated>2009-3-12 18:54:07</updated>
      <published>2009-3-12 18:54:07</published>
      <id>http://dev.mo.cn/article_196.html</id>
      <summary type="html">
      <![CDATA[最近经常看见网友在留言板提出一些问题，大部分都已经回答。由于本人准备毕业论文，精力有限，不能详细回答部分问题，见谅！<br /><br />下面总结一下各种问题:<br />1、关于限制文件上传类型<br />&nbsp;&nbsp;&nbsp;通过设置类属性Exe来设置允许上传的类型；例如<span style="color:#FF0000;">Upload.Exe="doc|xls|jpg"</span>&nbsp;则允许上传word文档，excel文档和jpg格式图片<br /><br />2、关于一个网友说可以通过抓包和NC上传木马<br />&nbsp;&nbsp;&nbsp;带进度条的上传示例默认上传所有类型的文件，即使不用抓包和NC也一样能上传ASP文件；<br /><br />3、关于上传和保存文件名到数据库的问题<br />&nbsp;&nbsp;&nbsp;文件类fileAction的FileName属性可以获取保存到服务器的文件名称，调用savetofile方法后本属性有效；<br />&nbsp;&nbsp;&nbsp;例如<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">set&nbsp;tempCls=Upload.files("file1")&nbsp;<br />successful=tempCls.SaveToFile(path,1)<br />response.write&nbsp;&nbsp;tempCls.Filename</div></div><br /><br />4、上传过程中出现"文件写入失败"错误<br />&nbsp;&nbsp;&nbsp;&nbsp;您没有开启保存文件目录的读写权限，请参考<a href="http://dev.mo.cn/show.asp?id=81" target="new">http://dev.mo.cn/show.asp?id=81</a><br /><br />5、由于精力问题，一些问题不方便解决。如果我的程序您要商用，可以联系我我单独给定制，中间可能会收取部分定制费用<br />&nbsp;&nbsp;&nbsp;非常感谢您能够使用我的程序！]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">笑死人的考试填空</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_195.html" />
      <updated>2009-3-6 23:40:55</updated>
      <published>2009-3-6 23:40:55</published>
      <id>http://dev.mo.cn/article_195.html</id>
      <summary type="html">
      <![CDATA[高考完后又是中考...考题千奇百怪，答卷也五花八门。真佩服现在的学生啊，思维跳脱，天马行空，和我们那时候的循规蹈矩，差别太大了，呵呵。看一组语文试卷中的填空题---<br /><br />1.__________，为伊消得人憔悴同学答：宽衣解带终不悔（正解为“衣带渐宽终不悔”，偶承认这个是思想有问题）<br />2.问渠哪得清如许，__________同学答：心中自有清泉在（正解为“唯有源头活水来”，咱还是和水粘了点边~~~）<br />3.何当共剪西窗烛，__________同学答：夫妻对坐到天明（语文老师阅卷时笑晕。后在课堂时说此事，又晕！正解为“却话巴山夜雨时”）<br />4.蚍蜉撼大树，__________同学答：一动也不动（正解为“可笑不自量”。一动也不动，赫赫，很符合事实阿）<br />5.君子成人之美，__________同学答：小人夺人所爱（直接晕死）<br />6.穷则独善其身，__________同学答：富则妻妾成群　（正解：达则兼济天下）<br />7.__________，天下谁人不识君同学答：只要貌似萨达姆（汗|||....）<br />8.后宫佳丽三千人，__________同学答：铁棒也会磨成针~~~~~~（正解为“三千宠爱在一身”）<br />9.身有彩凤双飞翼，__________同学答：拔毛凤凰不如鸡还有个同学答：夫妻双双把家还（正解为“心有灵犀一点通”）<br />10.东边日出西边雨，__________同学答：床头打架床尾合还有个同学答：上错花轿嫁对郎<br />11.__________，糟糠之妻不下堂同学答：结发之夫不上床（语文老师暴怒！）<br />12.但愿人长久，__________同学答：一颗永流传（当时狂笑，现在觉得挺经典的。正解为“千里共婵娟”）<br />13.西塞山前白鹭飞，__________同学答：东村河边爬乌龟（对的挺工整的）<br />14.我劝天公重抖擞，__________同学答：天公对我吼三吼（正解为“不拘一格降人才”，龚自珍）<br />15.天生我才必有用，__________同学答：关键时刻显神通又有同学答：老鼠儿子会打洞（整办公室的语文老师集体毫无形象的狂笑）<br />16.天若有情天亦老，__________同学答：人不风流枉少年！（正解为“月若无恨月长圆”李贺《金铜仙人辞汉歌》)<br />17.洛阳亲友如相问，__________同学答：请你不要告诉他（正解为“一片冰心在玉壶”）<br />18.期末考试出对联,上联是英雄宝刀未老　　该初三同学对下联为：老娘丰韵尤存<br />19.良药苦口利于病，__________同学答：不吃才是大傻瓜人生自古谁无死，__________同学答：只是死的有先后（结局：家长会后被老师留下来训话鸟……）<br />20.床前明月光，__________同学答：李白睡的香<br />21.管中窥豹，__________同学答：吓我一跳（哈哈哈！正解为“可见一斑”)<br />22.__________，飞入寻常百姓家同学答：康佳彩霸电视机<br />23.葡萄美酒夜光杯，__________同学答：金钱美人一大堆<br />24.__________，路上行人欲断魂初一学生的杰作：半夜三更鬼敲门<br />25.还有次考陶渊明的“吾不能为五斗米折腰”，同学填的是“给我六斗就可以”…<br />26.老吾老以及人之老，__________同学答：妻吾妻以及人之妻（老师后来评卷时说那个同学特别具有奉献精神，哈哈）<br />27.想当年，金戈铁马，__________同学答：看今朝，死缠烂打（正解为“气吞万里如虎”）<br />28.五年级的一次考试就考到了“三个臭皮匠，__________”同学答：臭味都一样（把监考和外面的校长笑翻了）<br />29.初一的学生对对子，“登城白云间揽山色入怀，__________”同学答：我到酒店去抱小姐上床（他的语文老师差点当场吐血而亡）<br />30.两情若是长久时，__________同学答：该是两人成婚时<br />31.沉舟侧畔千帆过，__________同学答：孔雀开屏花样多<br />32.书到用时方恨少，__________同学答：钱到月底不够花<br />33.天若有情天亦老，__________同学答：人若有情死得早（正解为“月若无恨月长圆”）<br />34.人生自古谁无死，__________同学答：有谁大便不带纸（没有语言了...）<br />35.有次考李清照的如梦令，“知否？知否？___________”同学答：SORRYI，DON'TKNOW...（正解为“应是绿肥红瘦”）<br />36.有次考鲁迅先生某句：“___________，我以我血溅轩辕”同学答：他以他刀插我身<br />37.语文考试，填空里有一首革命诗：“为人进出的门紧锁着，________________，一个声音高喊着：_________________我渴望自由，但人的身躯怎能从狗洞子里爬出…”同学答：为狗爬出的洞也锁着/他妈的，都锁着！<br />38.千山万水总是情，___________同学答：多给一分行不行（批卷老师对了一句：情是情，分是分，多给一分都不行）<br />39.高一的时候，一次月考，上句“仰天大笑出门去，（正解）我辈岂是蓬蒿人”。班上有人写：一不小心扭到腰。<br />还有一句，上句：“清水出芙蓉，（正解）天然去雕饰”。有人写，淤泥出莲藕；还有人更绝，写：乱世出英雄<br />40.问君能有几多愁，___________同学答：恰似一壶二锅头（老师批“你又喝多了……”）<br />41._________________,不临深溪，不知地之厚也；(我们班语文测验我们好多男生一起写“不坐飞机，不知天之高”！！！！）&nbsp;]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">access与sqlserver的区别</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_194.html" />
      <updated>2009-3-4 20:58:46</updated>
      <published>2009-3-4 20:58:46</published>
      <id>http://dev.mo.cn/article_194.html</id>
      <summary type="html">
      <![CDATA[后台数据库：&nbsp;<br />[Microsoft&nbsp;Access]&nbsp;<br />与&nbsp;<br />[Microsoft&nbsp;Sql&nbsp;Server]&nbsp;<br />更换之后，ASP代码应注意要修改的一些地方：&nbsp;<br /><br />[一]连接问题（举例)&nbsp;<br />[Microsoft&nbsp;Access]&nbsp;<br />constr&nbsp;=&nbsp;"DBQ=c:\data\clwz.mdb;&nbsp;DRIVER={Microsoft&nbsp;Access&nbsp;Driver&nbsp;(*.mdb)}"&nbsp;<br />[Microsoft&nbsp;Sql&nbsp;Server]&nbsp;<br />constr&nbsp;=&nbsp;"DRIVER={SQL&nbsp;Server};SERVER=host;DATABASE=mydata;uid=sa;pwd="&nbsp;<br /><br />[二]相似函数（举例）&nbsp;<br /><br />[1]DATEDIFF(datepart,&nbsp;startdate,&nbsp;enddate)&nbsp;<br />其中“datepart”参数可选项如下：&nbsp;<br />设置&nbsp;描述&nbsp;<br />————————————&nbsp;<br />[Microsoft&nbsp;Access]&nbsp;<br />年&nbsp;yyyy&nbsp;<br />季度&nbsp;q&nbsp;<br />月&nbsp;m&nbsp;<br />一年的日数&nbsp;y&nbsp;<br />日&nbsp;d&nbsp;<br />一周的日数&nbsp;w&nbsp;<br />周&nbsp;ww&nbsp;<br />小时&nbsp;h&nbsp;<br />分钟&nbsp;n&nbsp;<br />秒&nbsp;s&nbsp;<br /><br />[Microsoft&nbsp;Sql&nbsp;Server]&nbsp;<br />year&nbsp;yy,&nbsp;yyyy&nbsp;<br />quarter&nbsp;qq,&nbsp;q&nbsp;<br />month&nbsp;mm,&nbsp;m&nbsp;<br />dayofyear&nbsp;dy,&nbsp;y&nbsp;<br />day&nbsp;dd,&nbsp;d&nbsp;<br />week&nbsp;wk,&nbsp;ww&nbsp;<br />hour&nbsp;hh&nbsp;<br />minute&nbsp;mi,&nbsp;n&nbsp;<br />second&nbsp;ss,&nbsp;s&nbsp;<br />millisecond&nbsp;ms&nbsp;<br /><br />-------------------------&nbsp;<br /><br />基本上差不多，但注意的是在写的时候，&nbsp;<br />[Microsoft&nbsp;Access]要加引号，如：datediff('d',enddate,'2004/08/01')&nbsp;<br />[Microsoft&nbsp;Sql&nbsp;Server]则不需要，如：datediff(d,enddate,'2004/08/01')&nbsp;<br /><br />[2][Microsoft&nbsp;Access]中可用如cstr等转数据类型函数，而&nbsp;<br />[Microsoft&nbsp;Sql&nbsp;Server]中则用convert或cast函数，如：&nbsp;<br />convert(varchar,[amount])等。&nbsp;<br /><br />[3][Microsoft&nbsp;Sql&nbsp;Server]&nbsp;<br />取当前时间用getdate等等...&nbsp;<br /><br />[三]语句&nbsp;<br />[Microsoft&nbsp;Sql&nbsp;Server]&nbsp;<br />可以用&nbsp;<br />CASE&nbsp;<br />WHEN&nbsp;THEN&nbsp;<br />WHEN&nbsp;THEN&nbsp;<br />...&nbsp;<br />ELSE&nbsp;<br />END&nbsp;<br />语句，而&nbsp;<br />[Microsoft&nbsp;Access]&nbsp;<br />不支持。&nbsp;<br />[Microsoft&nbsp;Access]也不支持between语句&nbsp;<br />[Microsoft&nbsp;Sql&nbsp;Server]则可以这样写：&nbsp;<br />[date]&nbsp;between&nbsp;@date1&nbsp;and&nbsp;@date2&nbsp;<br />[四]查询表&nbsp;<br />[Microsoft&nbsp;Sql&nbsp;Server]&nbsp;<br />可三个及以上表join查询，而&nbsp;<br />[Microsoft&nbsp;Access]&nbsp;<br />好像只能两个表联接查询（待权威确认）,&nbsp;<br />而且[Microsoft&nbsp;Sql&nbsp;Server]可用“*=”和“=*”连接符。[五]除零问题&nbsp;<br />[Microsoft&nbsp;Access]&nbsp;<br />在碰到除数为零时，自动丢掉相关记录，而&nbsp;<br />[Microsoft&nbsp;Sql&nbsp;Server]&nbsp;<br />则会报错，且查询中止。删除代码：&nbsp;<br />[Microsoft&nbsp;Access]&nbsp;<br />可以这样写：delete&nbsp;*&nbsp;from&nbsp;[tablename]&nbsp;<br />[Microsoft&nbsp;SQL&nbsp;Server]&nbsp;<br />只能这样写：delete&nbsp;from&nbsp;[tablename]&nbsp;<br />多*会报错&nbsp;<br />_____________________________________&nbsp;<br />当前日期：&nbsp;<br />[Microsoft&nbsp;Access]&nbsp;<br />用date()&nbsp;<br />[Microsoft&nbsp;SQL&nbsp;Server]&nbsp;<br />用getdate()如果数据库可能会更换类型的话，可以&nbsp;<br />在ASP代码中加上如这样：&nbsp;<br />if&nbsp;inStr(constr,"Microsoft&nbsp;Access")&nbsp;&gt;&nbsp;0&nbsp;then&nbsp;<br />sqlstr=[Microsoft&nbsp;Access][sql代码]&nbsp;<br />else&nbsp;<br />sqlstr=[Microsoft&nbsp;Sql&nbsp;Server][sql代码]&nbsp;<br />end&nbsp;if&nbsp;<br />(constr--连接字符串)&nbsp;<br />这样即使改了数据库，也不用改数据库查询更新代码了。&nbsp;<br />再加：access中有true、false的字段记录，而sql里只有smallint，对应如果在access里有“字段名=true”的，在sql里要改成“字段名=1”&nbsp;<br />网上大部分的免费asp程序使用的是access数据库。但是access数据库作为一个中小型的单机数据库系统，在承担访问量、数据量大的网站应用时，&nbsp;往往就不堪重负了。一般认为，超过50M的access数据库性能就开始明显下降，超过100M以后，出错、运行慢的问题会更加突出。尽管可以如动网&nbsp;7.0以后那样，从程序的角度尽量优化以图提高性能，但是不能从根本上解决问题。&nbsp;<br />这时也许使用微软的SQL&nbsp;Server数据库就是最可能的办法，当然也可以使用其它的如Oracle、MySQL等等，但是作为改写来说，由于同为微软的产品，改写成SQL&nbsp;Server应该是最省力的办法。&nbsp;<br /><br />一、改写前提：&nbsp;<br /><br />系统已经安装好SQL&nbsp;Server2000并且打上了SP3补丁；安装好Office套件里面的Access；使用一个支持纯文本编辑并且带有行号显示的编辑器，推荐Ultra&nbsp;Edit，当然也可以使用FrontPage2003，不过以前的版本行号显示不太好用。&nbsp;<br /><br />个人能力要求：会基本的asp语法、access数据库的操作、SQLServer企业管理器的基本操作。&nbsp;<br /><br />二、数据库的准备&nbsp;<br /><br />一般来说有两种情况：&nbsp;<br />1、程序提供了SQL数据库格式：有一个MDF文件，或者提供了创建SQL数据库的SQL脚本文件（后缀名为.sql）。&nbsp;<br />如果有mdf文件，可以用企业管理器直接附加上，如果提供的是sql脚本文件，那么就先用企业管理器自己创建一个sql数据库，然后数据库用企业管理器中的查询分析器运行这个脚本创建数据库表。&nbsp;<br />这样建立的数据库基本不用再去改写什么了。&nbsp;<br />2、更多的是没有提供SQL数据库或脚本文件的，这时，就要自己来做这一切了，这也是我们这个帖子主要解决的问题。一般这样的程序会提供一个access数据库，这样你就用企业管理器导入access数据库，导入后需要改写下面一些东西：&nbsp;<br />对照原来的access，改写下面的部分：&nbsp;<br />（1）sql数据库表是没有自动字段的，因此原来access中的自动字段被转换成了普通字段，需要手工改成标识类型，增量为1。&nbsp;<br />（2）所有的时间字段，如果定义了默认值，那么原来肯定是now()，需要改成getdate()&nbsp;<br />（3）原来字段的默认值一般都不会自动引入，需要对照原表的字段手工添加。&nbsp;<br />（4）由于数据库的不同，access和sql的字段类型很多转换后就变化了，比如原来的《是否》字段会被转换成bit或者int，备注字段被转换成&nbsp;longtext，text字段转换成varchar等等，一般来说不会影响程序运行，如果有问题，我们在下面的程序改写部分再说。&nbsp;<br />（5）如果你要用一个For&nbsp;SQL的程序，里面用到了存储过程，那么你应该有这个程序本身建立SQL数据库的方法：有其本身的SQL数据库文件，或者&nbsp;sql脚本；如果没有的话，采用导入access数据库的方式是无法建立存储过程的，这样你最好放弃这个For&nbsp;SQL的程序版本，使用同样版本的&nbsp;For&nbsp;Access的程序，导入access数据库，然后用下面的改写方法自己改成SQL版本的程序。&nbsp;<br /><br />三、连接字符串的改写&nbsp;<br /><br />可参考动网的这段，分别是针对access和SQL的&nbsp;<br />Dim&nbsp;ConnStr&nbsp;<br />If&nbsp;IsSqlDataBase&nbsp;=&nbsp;1&nbsp;Then&nbsp;<br />'sql数据库连接参数：数据库名、用户密码、用户名、连接名（本地用local，外地用IP）&nbsp;<br />Dim&nbsp;SqlDatabaseName,SqlPassword,SqlUsername,SqlLocalName&nbsp;<br />SqlDatabaseName&nbsp;=&nbsp;"dvbbs7"&nbsp;<br />SqlPassword&nbsp;=&nbsp;""&nbsp;<br />SqlUsername&nbsp;=&nbsp;"dvbbs"&nbsp;<br />SqlLocalName&nbsp;=&nbsp;"(local)"&nbsp;<br />ConnStr&nbsp;=&nbsp;"Provider&nbsp;=&nbsp;Sqloledb;&nbsp;User&nbsp;ID&nbsp;=&nbsp;"&nbsp;&&nbsp;SqlUsername&nbsp;&&nbsp;";&nbsp;Password&nbsp;=&nbsp;"&nbsp;&&nbsp;SqlPassword&nbsp;&&nbsp;";&nbsp;Initial&nbsp;Catalog&nbsp;=&nbsp;"&nbsp;&&nbsp;SqlDatabaseName&nbsp;&&nbsp;";&nbsp;Data&nbsp;Source&nbsp;=&nbsp;"&nbsp;&&nbsp;SqlLocalName&nbsp;&&nbsp;";"&nbsp;<br />Else&nbsp;<br />'免费用户第一次使用请修改本处数据库地址并相应修改data目录中数据库名称，如将dvbbs6.mdb修改为dvbbs6.asp&nbsp;<br />'http://www.knowsky.com/<br />Db&nbsp;=&nbsp;"data/fengerqingqing.mdb"&nbsp;<br />ConnStr&nbsp;=&nbsp;"Provider&nbsp;=&nbsp;Microsoft.Jet.OLEDB.4.0;Data&nbsp;Source&nbsp;=&nbsp;"&nbsp;&&nbsp;Server.MapPath(db)&nbsp;<br />End&nbsp;If&nbsp;<br />On&nbsp;Error&nbsp;Resume&nbsp;Next&nbsp;<br />Set&nbsp;conn&nbsp;=&nbsp;Server.CreateObject("ADODB.Connection")&nbsp;<br />conn.open&nbsp;ConnStr&nbsp;<br /><br />当然你使用SQL的话，有关access的使用语句可以删除，就是else后面到on&nbsp;error&nbsp;resume&nbsp;next前面，变成这样：&nbsp;<br /><br />Dim&nbsp;ConnStr&nbsp;<br />'sql数据库连接参数：数据库名、用户密码、用户名、连接名（本地用local，外地用IP）&nbsp;<br />Dim&nbsp;SqlDatabaseName,SqlPassword,SqlUsername,SqlLocalName&nbsp;<br />SqlDatabaseName&nbsp;=&nbsp;"dvbbs7"&nbsp;<br />SqlPassword&nbsp;=&nbsp;""&nbsp;<br />SqlUsername&nbsp;=&nbsp;"dvbbs"&nbsp;<br />SqlLocalName&nbsp;=&nbsp;"(local)"&nbsp;<br />ConnStr&nbsp;=&nbsp;"Provider&nbsp;=&nbsp;Sqloledb;&nbsp;User&nbsp;ID&nbsp;=&nbsp;"&nbsp;&&nbsp;SqlUsername&nbsp;&&nbsp;";&nbsp;Password&nbsp;=&nbsp;"&nbsp;&&nbsp;SqlPassword&nbsp;&&nbsp;";&nbsp;Initial&nbsp;Catalog&nbsp;=&nbsp;"&nbsp;&&nbsp;SqlDatabaseName&nbsp;&&nbsp;";&nbsp;Data&nbsp;Source&nbsp;=&nbsp;"&nbsp;&&nbsp;SqlLocalName&nbsp;&&nbsp;";"&nbsp;<br />On&nbsp;Error&nbsp;Resume&nbsp;Next&nbsp;<br />Set&nbsp;conn&nbsp;=&nbsp;Server.CreateObject("ADODB.Connection")&nbsp;<br />conn.open&nbsp;ConnStr&nbsp;<br /><br />也可以简洁一些，写成这样：&nbsp;<br />Set&nbsp;conn&nbsp;=&nbsp;Server.CreateObject("ADODB.Connection")&nbsp;<br />conn.open&nbsp;"Provider&nbsp;=&nbsp;Sqloledb;&nbsp;User&nbsp;ID&nbsp;=&nbsp;sa;&nbsp;Password&nbsp;=&nbsp;1234567;&nbsp;Initial&nbsp;Catalog&nbsp;=&nbsp;dvbbs7;&nbsp;Data&nbsp;Source&nbsp;=&nbsp;(local);"&nbsp;<br />里面的数据库名称、数据源、用户、密码根据自己的实际情况改写一下。&nbsp;<br /><br />四、程序的改写&nbsp;<br /><br />这也有两种情况&nbsp;<br />1、如果你幸运，拿到的是For&nbsp;SQL的程序，那么如果上面的数据库建立过程没有遇到麻烦，程序基本上就可以运行了，出错的话，只是程序本身的bug，如何修改不是这个帖子讨论的内容，就不赘述了。&nbsp;<br />2、大多数情况，程序本身是For&nbsp;Access的，与For&nbsp;SQL的程序差别主要是程序中使用到的SQL查询语句。注意，SQL查询语句是数据库应用&nbsp;不可缺少的部分，不管是For&nbsp;SQL还是For&nbsp;Aceess的程序使用的语法大体差不多，但是有一些微妙的差别，正是这些差别，造成了程序的不通用，&nbsp;也是我们需要修改的主要内容。这样一般要修改的部分如下：&nbsp;<br />（1）时间函数的问题：SQL数据库的时间函数与access不同，最常见的是取现在时间的函数，access是now()，SQL是getdate&nbsp;()。因此凡是在where子句中使用了now()的地方都要改成getdate();注意，now()函数在asp程序本身也要使用，凡是不在数据库查&nbsp;询或执行语句中使用的now()函数千万不要改。&nbsp;<br />（2）时间比较函数：datediff('d','时间1'，‘时间2’)这是access查询用的格式，SQl中这些引号都要去掉，同时时间格式的前后可能加上了#，这也要去掉。同样这也是指在sql语句中的，在asp语句中的要保持原样。&nbsp;<br />（3）空值的表示：在access中，判断空值一般用是否＝""来表示，但是这在SQL中往往出错，如果遇到出错的问题或者程序运行不正常，可以改成如这样判断：where&nbsp;(name&nbsp;is&nbsp;null)&nbsp;<br />（4）真假值判断：access中可以用＝true、＝false来判断，但是在SQL中就会出错，因此在SQL查询或执行语句中这类判断要分别改成＝&nbsp;1、＝0。注意一点：有些程序虽然写成＝“true”，但是由于有引号，所以这个字段是字符类型的，你不能改成＝1，保持原样即可。&nbsp;<br /><br />以上是比较常见的改写的地方，还有一些不太常见，如果遇到了可以在此回帖讨论。&nbsp;<br /><br />五、程序的调试&nbsp;<br /><br />前面推荐使用带有行号的编辑器，是因为上述的改写不大可能是直接搜索程序源码来做，很难找全。&nbsp;<br />我采取的方式一般这样：数据库改写完成，直接调试程序，出错后，看看出错的提示，找到相应文件的代码行，但是根源往往不是那行，比如出错的语句是：&nbsp;conn.execute(sql)，但是这句本身是没有错的，错误原因是里面的这个sql字符串，那就向上看这个sql字符串是如何生成的，按照上面所&nbsp;说的程序修改办法修改。&nbsp;<br /><br />数据库导入以后，自动增加字段需要重写，所有的数字类型需要增加长度，最好用decimal。&nbsp;<br /><br />所有的默认值都丢失了。主要是数字类型和日期类型。&nbsp;<br /><br />所有now()，time()，date()要改成getdate()。&nbsp;<br /><br />所有datediff('d',&nbsp;time1,&nbsp;time2)要改成datediff(day,&nbsp;time1,&nbsp;time2)&nbsp;<br /><br />有可能一些true/false类型不能使用，要变为1/0。&nbsp;<br /><br />备注类型要通过cast(column&nbsp;as&nbsp;varchar)来使用。&nbsp;<br /><br />CursorType要改成1,也就是打开数据库时要给出第一个数字参数为1，否则记录可能显示不完整。&nbsp;<br /><br />isnull(rowname)要改成rowname&nbsp;=&nbsp;null&nbsp;<br /><br />ACCESS的数据库中的自动编号类型在转化时，sql&nbsp;server并没有将它设为自动编号型，我们需在SQL创建语句中加上identity，表示自动编号！&nbsp;<br /><br />转化时，跟日期有关的字段，SQL&nbsp;SERVER默认为smalldatetime型，我们最好将它变为datetime型，因为datetime&nbsp;型的范围比smalldatetime型大。有时用smalldatetime型时，转化失败，而用datetime型时，转化成功。&nbsp;<br /><br />对此两种数据库进行操作的sql语句不全相同，例如：在对ACCESS数据库进行删除纪录时用："delete&nbsp;*&nbsp;from&nbsp;user&nbsp;where&nbsp;id=10",而对SQL&nbsp;SERVER数据库进行删除是用："delete&nbsp;user&nbsp;where&nbsp;id=10".&nbsp;<br /><br />日期函数不相同，在对ACCESS数据库处理中，可用date()、time()等函数，但对SQL&nbsp;SERVER数据库处理中，只能用datediff,dateadd等函数，而不能用date()、time()等函数。&nbsp;<br /><br />在对ACCESS数据库处理中,sql语句中直接可以用一些VB的函数，像cstr()函数，而对SQL&nbsp;SERVER数据库处理中，却不能用。&nbsp;<br />下表比较了MicrosoftAccess数据库（MicrosoftAccess数据库：数据和对象（如表、查询或窗体）组成的集合，与特定的主题或用&nbsp;途有关。MicrosoftJet数据库引擎用于管理数据。）和MicrosoftAccess项目（MicrosoftAccess项目：与&nbsp;MicrosoftSQLServer数据库连接且用于创建客户/服务器应用程序的Access文件。项目文件中不包含任何数据或基于数据定义的对象（如&nbsp;表或视图）。）的数据类型（数据类型：决定字段可拥有的数据类型的字段特征。数据类型包括Boolean、Integer、Long、Currency、&nbsp;Single、Double、Date、String和Variant（默认））。&nbsp;<br /><br /><br />MicrosoftAccess数据类型SQLServer数据类型&nbsp;<br />是/否（“是/否”数据类型：一种字段数据类型，用于只有两种可能值（如是或否、True或False）的字段。不允许有Null值。）bit（bit数据类型：在Access项目中，一种存储值为1或0的数据类型。接受1和0以外的整数值，但总是将其解释为1。）&nbsp;<br />数字（“数字”数据类型：MicrosoftAccess数据库中的一种字段数据类型，用于将在数学运算中使用的数值数据。但是，若要显示或计算货币值，&nbsp;则应使用“货币”数据类型。）（字节）tinyint（tinyint数据类型：Access项目中的一种占一个字节（8位）的数据类型，用于存储从0到&nbsp;255范围内的整数。）&nbsp;<br />数字（整型）smallint（smallint数据类型：Access项目中的一种2字节（16位）数据类型，存储位于-2^15(-32,768)与2^15-1(32,767)之间的数字。）&nbsp;<br />数字（长整型）int（int数据类型：Access项目中的一种4字节（32位）数据类型，存储位于-2^31(-2,147,483,648)与2^31-1(2,147,483,647)之间的数字。）&nbsp;<br />数字（单精度浮点型）real（real数据类型：在Access项目中，一种近似的数值数据类型，精度为7位，正值取值范围大致从1.18E-38到3.40E+38，负值取值范围大致从-1.18E-38到-3.40E+38，也可以取0。）&nbsp;<br />（无等价的数据类型）bigint（bigint数据类型：Access项目中的一种8字节（64位）数据类型，存储位于-2^63(-&nbsp;9,223,372,036,854,775,808)与2^63-1(9,223,372,036,854,775,807)之间的数字。）&nbsp;<br />数字（双精度浮点型）float（float数据类型：在Access项目中，一种近似的数值数据类型，精度为15位。它所存储的正值范围大致是从2.23E-308到1.79E+308，负值范围大致是从-2.23E-308到-1.79E+308，也可以为0。）&nbsp;<br />货币（“货币”数据类型：MicrosoftAccess数据库中的一种数据类型，用于与货币有关的计算或其精确度极其重要的定点计算。）money&nbsp;（money数据类型：在Access项目中，用于存储货币值的数据类型，取值范围从-922,337,203,685,477.5707到&nbsp;922,337,203,685,477.5807，精确度为万分之一个货币单位。）&nbsp;<br /><br />smallmoney（smallmoney数据类型：Access项目中的一种存储货币值的数据类型，取值范围从-214,748.3648到214,748.3647，精确度为万分之一个货币单位。当显示smallmoney值时，会将它们四舍五入为两个小数位。）&nbsp;<br />小数/数值（decimal数据类型（Access数据库）：精确的数值数据类型，用于存储-10^38-1到10^38-1的值。可以指定数值范围（最&nbsp;大总位数）和精度（小数点右边的最大位数）。）decimal（decimal数据类型（Access项目）：精确的数值数据类型，用于存储-10^38&nbsp;-1到10^38-1的值。可以指定数值范围（最大总位数）和精度（小数点右边的最大位数）。）&nbsp;<br /><br />numeric（numeric数据类型：在Access项目中，一种精确的数值数据类型，取值从-10^38-1到10^38-1。可以指定数值范围（最大总位数）和精度（小数点右边的最大位数）。）&nbsp;<br />日期/时间（“日期/时间”数据类型：Access数据库的一种数据类型，用来存放日期和时间信息。）datetime（datetime数据类型：在&nbsp;Access项目中，日期和时间的数据类型，范围从1753年1月1日到9999年12月31日，精确度为三百分之一秒，即3.33毫秒。）&nbsp;<br /><br />smalldatetime（smalldatetime数据类型：Access项目中的一种日期和时间数据类型，精度不如datetime时间数据类型。数据取值范围从1900年1月1日到2079年6月6日，精确度为一分钟。）&nbsp;<br />自动编号（“自动编号”数据类型：MicrosoftAccess数据库中的一种字段数据类型，当向表中添加一条新记录时，这种数据类型会自动为每条记录&nbsp;存储一个唯一的编号。可以产生三种编号：顺序号、随机号和同步复制ID。）（递增）int（int数据类型：Access项目中的一种4字节（32位）数&nbsp;据类型，存储位于-2^31(-2,147,483,648)与2^31-1(2,147,483,647)之间的数字。）（定义了Identity属&nbsp;性）&nbsp;<br />文本（“文本”数据类型：MicrosoftAccess数据库中的一种字段数据类型。“文本”数据类型最多可以包含255个字符，或者是由&nbsp;FieldSize属性指定的一个小一些的字符数。）(n)varchar(n)（varchar(n)数据类型：Access项目中的一种可变长度的数&nbsp;据类型，最大长度为8,000个ANSI字符。）&nbsp;<br /><br />nvarchar(n)（nvarchar(n)数据类型：在Access项目中，一种可变长度的数据类型，最多可含4,000个Unicode字符。Unicode字符每字符占两个字节，而且支持所有国际字符。）&nbsp;<br />备注（“备注”数据类型：在MicrosoftAccess数据库中的一种字段数据类型。“备注”字段最多可以包含65,535个字符。）text&nbsp;（text数据类型：Access项目中的一种长度可变的数据类型，最多可存储2^31-1(2,147,483,647)个字符；默认长度为16。）&nbsp;<br />OLE对象（“OLE对象”数据类型：字段的数据类型之一，用于在其他应用程序中创建的、可链接或嵌入（插入）到Access数据库中的对象。）&nbsp;image（image数据类型：在Access项目中，一种长度可变的数据类型，最多可存储2^31-1(2,147,483,647)字节的二进制数&nbsp;据。image数据类型用来存储BLOB（二进制大对象），如图片、文档、声音和已编译代码。）&nbsp;<br />同步复制ID（又名全局唯一标识符（GUID：在Access数据库中，一种用于建立同步复制唯一标识符的16字节字段。GUID用于标识副本、副本集、&nbsp;表、记录和其他对象。在Access数据库中，GUID是指同步复制ID。）(GUID)）uniqueidentifier&nbsp;（uniqueidentifier数据类型：在Access项目中，16字节的全局唯一标识符(GUID)。）（仅适于SQLServer7.0或更高&nbsp;版本）&nbsp;<br />超链接（“超链接”数据类型：存储超链接地址的Access数据库字段的数据类型。地址最多可以包含四部分，用以下语法格式编写：&nbsp;displaytext#address#subaddress#。）char（char数据类型：在Access项目中，一种固定长度的数据类型，最多&nbsp;可含8,000个ANSI字符。）,&nbsp;<br /><br />nchar（nchar数据类型：在Access项目中，一种固定长度的数据类型，最多可含4,000个Unicode字符。Unicode字符每字符占两个字节，而且支持所有国际字符。）,varchar,nvarchar（Hyperlink属性设为Yes）&nbsp;<br />（无等价的数据类型）varbinary（varbinary数据类型：Access项目中的一种可变长度的数据类型，最多可存储8,000字节的二进制数据。）&nbsp;<br />（无等价的数据类型）smallint（smallint数据类型：Access项目中的一种2字节（16位）数据类型，存储位于-2^15(-32,768)与2^15-1(32,767)之间的数字。）&nbsp;<br />（无等价的数据类型）timestamp（timestamp数据类型：在Access项目中，一种每插入或更新一行就会自动更新的数据类型。&nbsp;timestamp列中的值不是datetime数据，而是binary(8)或varbinary(8)，标明了数据修改的顺序。）&nbsp;<br />（无等价的数据类型）charnchar&nbsp;<br />（无等价的数据类型）sql_variant（sql_variant数据类型：Access项目中的一种数据类型，存储除text、ntext、&nbsp;image、timestamp和sql_variant类型以外的多种数据类型的值。在列、参数、变量或用户定义函数的返回值中使用。）&nbsp;<br />（无等价的数据类型）用户定义（用户定义的数据类型：在MicrosoftSQLServer数据库中，允许某列包含的数据的类型定义，由用户利用现有的系统数据类型定义。规则和默认值仅可以绑定到用户定义的数据类型。）&nbsp;<br /><br />注释在Access项目或SQLServer数据库中，前缀“n”代表“国家/地区”，意思是这个数据类型是启用Unicode的。在Access数据库中，全部文本列在默认情况下都是启用Unicode的。&nbsp;<br />ACCESS转SQL需要注意的问题&nbsp;<br />2006-2-13&nbsp;16:01:20&nbsp;<br />很多朋友想用SQL2000数据库的编程方法，但是却又苦于自己是学ACCESS的，对SQL只是一点点的了解而已，这里我给大家提供以下参考---将ACCESS转化成SQL2000的方法和注意事项&nbsp;<br />一，首先，我说的是在ACCESS2000，SQL2000之间转换，其他的我也还没有尝试过，希望大家多多试验，肯定是有办法的；&nbsp;<br />二，转换的方法&nbsp;<br />1，打开”控制面板“下”管理工具“中的”数据库源“；&nbsp;<br />2，按”添加“添加一个新的数据源，在选择栏里选”DriverdomicrosoftAccess&nbsp;<br />(*.mdb)”,完成后将出现一个框,&nbsp;<br /><br />在”数据库源“里面输入你想写的名称，我取名叫“ABC”,说明不需要填，接着，按下面的选择，寻找你的数据库地址和选中（注意，请先备份自己的ACCESS数据库），然后确定。&nbsp;<br />数据源在这里建好了，剩下转换了。&nbsp;<br /><br />3，打开SQL2000企业管理器，进入数据库，新建一个空的数据库“ABC”；&nbsp;<br />4，选择新建立的数据库，按鼠标右键，选择“所有任务”下“导入数据”，按“下一步”继续；&nbsp;<br />5，在数据库源下拉但中选择”DriverdomicrosoftAccess(*.mdb)“，在”用户/系统DSN“中，选种你刚才添加的”ABC“，按”下一步“；&nbsp;<br />6，“目的”不需要修改，选择服务器（一般下为自己的本机"local",也可以选择服务器地址或者局域网地址,确定你的权限是否可以操作,),"使用WINDOWS身份验证"指用自己的系统管理员身份操作,"使用SQL身份操作验证"可以用于网站的操作,推荐用后者;&nbsp;<br />7,选上"使用SQL身份操作验证"后,填写你的用户名和密码,我自己选择的是系统默认号码"sa","****",数据库选择刚新建的"ABC",按"下一步";&nbsp;<br />8,这一步的两个单项选择,"从数据源复制表和视图"与"用一条查询指令指定要传输的数据",选择前者,按"下一步"继续;&nbsp;<br />9,这里将出现你自己ACCESS数据库的表,按"全选"后,下一步;&nbsp;<br />10,"DTS导入/导出向导",看"立即运行"被选中按"下一步",&nbsp;<br />11,按"完成"继续;&nbsp;<br />12,这个步骤你将看到你的数据被导入SQL2000里面,当出现"已经成功把XXX个表导入到数据库"的字样,而且所有的表前面都有绿色的勾,就表示成&nbsp;功导入所有数据,如果中途出现问题或者表前面有红色的*的话,说明该表没有成功导入,这时就要回去查看自己的操作是否正确了.&nbsp;<br /><br />三,数据修改&nbsp;<br />1,由于SQL2000里面没有"自动编号",所以你的以"自动编号"设置的字段都会变成非空的字段,这就必须手工修改这些字段,并把他的"标示"选择"是",种子为"1",增量为"1",&nbsp;<br />2,另外,ACCESS2000转换成SQL2000后,原来属性为"是/否"的字段将被转换成非空的"bit",这时候你必须修改成自己想要的属性了;&nbsp;<br />3,另外,大家要注意对时间函数的把握.ACCESS与SQL是有很多不同的.&nbsp;<br /><br /><br />四、相关的字段问题&nbsp;<br />1.ACCESS的数据库中的自动编号类型在转化时，sqlserver并没有将它设为自动编号型，我们需在SQL创建语句中加上identity，表示自动编号！&nbsp;<br />2.转化时，跟日期有关的字段，SQLSERVER默认为smalldatetime型，我们最好将它变为datetime型，因为datetime型的&nbsp;范围比smalldatetime型大。我遇见这种情况，用smalldatetime型时，转化失败，而用datetime型时，转化成功。&nbsp;<br />3.对此两种数据库进行操作的sql语句不全相同，例如：在对ACCESS数据库进行删除纪录时用："delete*fromuserwhereid=10",而对SQLSERVER数据库进行删除是用："deleteuserwhereid=10".&nbsp;<br />4.日期函数不相同，在对ACCESS数据库处理中，可用date()、time()等函数，但对SQLSERVER数据库处理中，只能用datediff,dateadd等函数，而不能用date()、time()等函数。&nbsp;<br />5.在对ACCESS数据库处理中,sql语句中直接可以用一些VB的函数，像cstr()函数，而对SQLSERVER数据库处理中，却不能用。&nbsp;<br /><br />五、相关语句问题&nbsp;<br />自动增加字段需要重写。在access中经常使用的自动编号字段，导入到mssql后，他并不是自增型的int，需要手工设置，把导入后的自动编号字段的标识的“否”改为“是”，“种子”和“递增量”都为“1”，才能成为自动编号&nbsp;<br /><br /><br />所有的默认值都丢失了。主要是数字类型和日期类型&nbsp;<br /><br /><br />所有now()，time()，date()要改成getdate()&nbsp;<br /><br /><br />所有datediff('d',time1,time2)要改成datediff(day,time1,time2)&nbsp;<br /><br /><br />所有datediff('ww',time1,time2)要改成datediff(week,time1,time2)&nbsp;<br /><br /><br />所有datediff('d',time1,time2)要改成datediff(day,time1,time2)&nbsp;<br /><br /><br />在mssqlserver中，有许多保留字，在access中是没有的，当你把数据导入到mssql的时候，问题就出来了。mssql在导入的时候，会自&nbsp;动给这些字段（包括数据库中的表名）加上“[字段名]”，因此，你必须修改你的脚本，把相应的字段名字（或者表名字）加上中括号，或改变字段名字为不是&nbsp;mssql的保留字&nbsp;<br /><br /><br />在用access关于时间的使用，大家喜欢使用“select*fromaaaawhiletime="&now()”这样的sql语句，然而，&nbsp;在mssql中没有“now()”这个函数，而是使用“getdate()”，所以，所有的sql语句中的“now()”必须换成“getdate&nbsp;()”。&nbsp;<br /><br /><br />日期函数不相同，在对ACCESS数据库处理中，可用date()、time()等函数，但对&nbsp;<br />SQLSERVER数据库处理中，只能用datediff,dateadd等函数，而不能用date()、time()等函数。&nbsp;<br /><br />转化时，跟日期有关的字段，SQLSERVER默认为smalldatetime型，我们最好将它变为datetime型。]]>
      </summary>
      <category term="" label="其他" scheme="http://dev.mo.cn/cat_diary_18.html" />
   </entry>
   <entry>
      <title type="html">忙着写程序，竟然忘了写个实用点的针对无刷新上传的示例了</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_193.html" />
      <updated>2009-2-15 7:49:58</updated>
      <published>2009-2-15 7:49:58</published>
      <id>http://dev.mo.cn/article_193.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;只忙着写程序，竟然忘了给Ajax无刷新上传写一个实用的示例程序，同时也没给用户留出很大的自己操作的余地，今天又把程序更新了下，开放了两个接口。见谅！<br />&nbsp;&nbsp;&nbsp;下面奉上刚写好的示例:<br />&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;<span style="font-size:14px;">&nbsp;<b><a href="http://dev.mo.cn/detial.asp?id=178" target="new">Ajax无刷新上传&nbsp;示例程序&nbsp;下载</a></b></span><br /><br />&nbsp;&nbsp;<a onfocus="this.blur()" href="http://dev.mo.cn/upfiles/20090215073817871.jpg" target=new><img src="http://dev.mo.cn/upfiles/20090215073817871.jpg" border="0" alt="´ڴ" onload="javascript:if(this.width>560)this.width=560" /></a><br /><br />&nbsp;&nbsp;真正向用户推荐的只有三个接口:<br />&nbsp;&nbsp;<b>第一个---创建</b><br />&nbsp;&nbsp;var&nbsp;AjaxUp=new&nbsp;AjaxProcesser("uploadContenter","upload.asp?path=upload","AnUploader",false);<br />&nbsp;<br />&nbsp;&nbsp;<b>第二个---获取返回数据</b><br />&nbsp;&nbsp;files是一个数组,结构为[{name:文件1的名字,size:文件1的大小},{name:文件2的名字,size:文件2的大小},...n]<br />&nbsp;&nbsp;AjaxUp.succeed=function(files){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;fujian=document.getElementById(objID);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fujian.value="upload/"&nbsp;+&nbsp;files[0].name;&nbsp;&nbsp;//因为上传控件就只上传一个&nbsp;文件，这里索引是0<br />&nbsp;&nbsp;}<br /><br /><b>&nbsp;&nbsp;第三个---出错显示（msg是出错的具体原因）</b><br />&nbsp;&nbsp;&nbsp;AjaxUp.faild=function(msg){alert("失败原因:"&nbsp;+&nbsp;msg);contenter.style.display="none";}]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">《艾恩ASP文件上传类》开发和使用总结</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_192.html" />
      <updated>2009-2-15 0:12:05</updated>
      <published>2009-2-15 0:12:05</published>
      <id>http://dev.mo.cn/article_192.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;从去年4月12号开始着手写Asp无组件上传类开始，到现在系统的做出了无刷新带进度条的上传方式，整个开发和完善过程用了将近一年，本类完全由本人个人开发，包括组件版的开发。非常感谢在此期间使用和测试本类的所有朋友们以及今后可能会使用本类的朋友，我努力追求的就是方便自己的同时也给大家带来最大的方便。无组件版和组件版均可"非商业非赢利性"免费使用！<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;本类包括组件版和无组件版，目前二者均整合了进度条功能(默认不开启),普通上传和Ajax无刷新上传均可正常使用，下面具体说明下本类:<br /><br />&nbsp;&nbsp;&nbsp;<b>几个示例程序的下载地址(示例使用的最后版本均为V9.4.10):</b><br /><ol type="1"><li>&nbsp;&nbsp;<a href="http://127.0.0.1/ex/newblog/detial.asp?id=179" target="new">艾恩Javascript插件及Asp无组件上传综合演示</a><li>&nbsp;&nbsp;<a href="http://dev.mo.cn/detial.asp?id=178" target="new">Ajax无刷新上传示例程序下载</a>&nbsp;<li>&nbsp;&nbsp;<a href="http://dev.mo.cn/detial.asp?id=143" target="new">艾恩ASP无组件上传类(An-Upload)V9.4.10</a><li>&nbsp;&nbsp;<a href="http://dev.mo.cn/detial.asp?id=167" target="new">艾恩ASP文件上传组件v9.4.10</a><li>&nbsp;&nbsp;<a href="http://dev.mo.cn/detial.asp?id=175" target="new">艾恩Ajax无刷新文件上传(带进度条,无组件)</a><li>&nbsp;&nbsp;<a href="http://dev.mo.cn/detial.asp?id=176" target="new">艾恩Ajax无刷新文件上传(带进度条,组件版,低CPU使用)</a></ol><br /><br />&nbsp;&nbsp;<b>基本功能:</b><br /><ul><li>1.限制上传扩展名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li>2.限制上传大小&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li>3.多种文件保存方式&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li>4.可批量上传&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li>5.准确获取上传中的错误信息&nbsp;，错误信息程序处理，用户无须参与&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li>6.全面保存客户提交的信息(普通表单,文件域值,相同表单值)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li>7.同时可以获取文件的二进制形式,从而可以实现将二进制数据保存到数据库&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<li>8.文件保存函数简洁,调用方便,并且比较灵活(保存路径和保存方式可随时改变)&nbsp;</ul><br />&nbsp;&nbsp;<b>类创建调用方法:</b><br /><ul><li>&nbsp;&nbsp;&nbsp;&nbsp;(1)组件版&nbsp;<span style="color:#33CC00;">set&nbsp;Upload=server.createobject(“Anasp.AnUpload”)</span><li>&nbsp;&nbsp;&nbsp;&nbsp;(2)无组件版&nbsp;<span style="color:#33CC00;">set&nbsp;Upload=new&nbsp;AnUpload</ul></span><br />&nbsp;&nbsp;&nbsp;无组件版和组件版的另一区别就是在使用forms和files返回所有表单或文件的时候传递参数的不同，详细请参考开发文档<br />&nbsp;&nbsp;&nbsp;下载地址:&nbsp;<a href="http://dev.mo.cn/upfiles/Anupload.pdf&nbsp;" target="new">http://dev.mo.cn/upfiles/Anupload.pdf&nbsp;</a><br /><br />&nbsp;&nbsp;&nbsp;开发文档详细介绍了本类的各属性和方法]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">Ajax无刷新文件上传重要更新!!!!!!</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_191.html" />
      <updated>2009-2-13 5:12:08</updated>
      <published>2009-2-13 5:12:08</published>
      <id>http://dev.mo.cn/article_191.html</id>
      <summary type="html">
      <![CDATA[<b><span style="font-size:24px;"><span style="color:#FF0000;">重要更新：</span></span></b><br /><br /><span style="color:#669933;">&nbsp;&nbsp;1.封装了JS调用，上传更方便<br />&nbsp;&nbsp;2.增加了返回用户上传文件列表功能(一个数组)和上传速度计算功能</span><br /><br /><object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=4,0,2,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="540" height="260"><param name="movie" value="images/flvplayer.swf"><param name="quality" value="high"><param name="FlashVars" value="vcastr_file=http://dev.mo.cn/upfiles/uploaddemo.flv" /><embed src="images/flvplayer.swf" quality="high" FlashVars="vcastr_file=http://dev.mo.cn/upfiles/uploaddemo.flv" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?p1_prod_version=shockwaveflash" type="application/x-shockwave-flash" width="540" height="260"></embed></object><br /><br /><br />下载:&nbsp;<a href="http://dev.mo.cn/source_175.html" target="new">艾恩Ajax无刷新文件上传(带进度条,无组件)</a>&nbsp;<br /><br />下载:&nbsp;<a href="http://dev.mo.cn/source_176.html" target="new">艾恩Ajax无刷新文件上传(带进度条,组件版,低CPU使用)</a>&nbsp;<br /><br />请分别下载上面的压缩包查看具体内容!!!!<br /><br />&lt;!--下面的内容是你必须要做的--&gt;<br />&lt;div&nbsp;id="uploadContenter"&gt;&lt;/div&gt;<br />&lt;iframe&nbsp;style="display:none;"&nbsp;name="AnUploader"&gt;&lt;/iframe&gt;<br />&lt;script&nbsp;type="text/javascript"&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; var&nbsp;AjaxUp=new&nbsp;AjaxProcesser("uploadContenter","upload.asp","AnUploader",false);<br />&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#339933;">//说明:本次更新重点封装了上传使用的JS类，上传控件表单完全自动生成<br />&nbsp; &nbsp; &nbsp; &nbsp; //var&nbsp;AjaxUp=new&nbsp;AjaxProcesser(Contenter,url,target,userStyle);<br />&nbsp; &nbsp; &nbsp; &nbsp; //参数说明:<br />&nbsp; &nbsp; &nbsp; &nbsp; //Contenter(字符串)&nbsp;&nbsp;&nbsp;&nbsp;上传控件的容器，程序自动给容易四面增加3px的padding<br />&nbsp; &nbsp; &nbsp; &nbsp; //url(字符串)&nbsp;&nbsp;&nbsp;&nbsp;表单要提交到的路径,可以包含参数，例如upload.asp?savepath=abc，主要是为了方便传递其他变量到上传页面(保存路径，保存方式等)<br />&nbsp; &nbsp; &nbsp; &nbsp; //target(字符串)&nbsp;&nbsp;&nbsp;&nbsp;表单要提交到的隐藏iframe的name属性<br />&nbsp; &nbsp; &nbsp; &nbsp; //userStyle(布尔值)&nbsp;&nbsp;&nbsp;&nbsp;如果为true，则表单的按钮以及文本框等控件的样式使用用户自定的样式，如果为false则使用类内部定义的样式</span><br />&lt;/script&gt;<br />&lt;!--你已经做完你的工作了--&gt;<br /><br /><span style="color:#FF0000;"><br /><b>上面是本次的更新~~<br />本次更新重点封装了上传使用的JS类，上传控件表单完全自动生成<br />用户只要做很少工作即可实现文件上传</b></span>]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">艾恩Ajax无刷新文件上传解决方案</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_190.html" />
      <updated>2009-2-9 19:54:37</updated>
      <published>2009-2-9 19:54:37</published>
      <id>http://dev.mo.cn/article_190.html</id>
      <summary type="html">
      <![CDATA[今天用一天的时间给自己的类加上了<b>进度条</b>，包括<b>无组件版</b>和<b>组件版</b>都同时更新了进度条功能.<br /><br />下载:&nbsp;<a href="http://dev.mo.cn/source_175.html" target="new"><b><span style="color:#FF0000;">艾恩Ajax无刷新文件上传(带进度条,无组件)</span></b></a>&nbsp;<br /><br />下载:&nbsp;<a href="http://dev.mo.cn/source_176.html" target="new"><b><span style="color:#FF0000;">艾恩Ajax无刷新文件上传(带进度条,组件版,低CPU使用)</span></b></a>&nbsp;<br /><br />本上传使用的类为本人原创上传类,经修改后用于无刷新上传(普通上传同样可用)<br /><br />详细显示上传过程,包括进度条，上传百分比，总上传数据大小，当前上传数据大小，上传进程时间等。。。<br /><br />进度条样式可自行修改，样式文件为css.css<br /><br />具体进程信息请查看js/custom.js中的getInformation(info)中的信息对象的说明<br /><br /><span style="color:#FF0000;"><b><br />经测试~本程序在IE6,IE7和FireFox3.1&nbsp;Beta&nbsp;1&nbsp;下运行都没有任何问题~~<br />同时如果有任何问题可以联系我1034555083/zhanghuiguoanlige@126.com<br /></b></span><br /><br /><div class="quote"><br />=======================================<br />说明一点:<br />本次给上传类增加了一个方法setApp,用来设置Application;<br />调用方法Upload.setApp&nbsp;state,total,current,description<br />参数说明:<br />state--当前状态,建议取值请查看js/custom.js中的getInformation(info)函数中的状态说明<br />total--总上传数据大小<br />current--已上传数据大小<br />description--描述,主要是在出现错误的时候使用，一般使用空值即可<br /><br />请保留upload.asp中对Application的设置(共四处,最后一处可选择性删除)<br /><span style="color:#FF0000;"><b><br />想开启进度条功能,必须设置类对象的openProcesser=true<br />例如<br />set&nbsp;Upload=new&nbsp;AnUpLoad<br /><span style="color:#33CC00;">'组件版的创建方法为set&nbsp;Upload=Server.createobject("Anasp.Upload")</span><br />Upload.openProcesser=true&nbsp;&nbsp;'打开进度条显示</b></span><br /><br /><br />其实区别就一点,组件和无组件的上传实例创建方法:<br />无组件直接创建&nbsp;&nbsp;&nbsp;<b><span style="color:#33CC00;">set&nbsp;Upload=new&nbsp;AnUpLoad</span></b><br />组件版的创建方法为&nbsp;&nbsp;<b>&nbsp;<span style="color:#33CC00;">set&nbsp;Upload=Server.createobject("Anasp.Upload")</span></b><br /><br />还有一点就是遍历文件的时候:<br />无组件版获取所有文件的方法是<b>Upload.files(-1)</b>&nbsp;&nbsp;传递一个参数<b>-1</b><br />组件版的获取方式为&nbsp;<b>Upload.files</b>&nbsp;&nbsp;不传递任何参数<br /><br /><br /><b>其他的完全相同。</b><br />=======================================</div><br /><span style="color:#FF0000;"><b>更新完这个进度条后本上传类不打算继续更新！</b></span><br /><br />PS：<br />类本身带有限制上传大小以及文件类型的属性<br />在组件上传的压缩包里有一个pdf的开发文档，里面详细介绍了本类的属性和方法，请参考一下！为了演示方便我就把所有的限制取消了！<br /><a href="http://dev.mo.cn/source_143.html" target="new">http://dev.mo.cn/source_143.html</a><br />这个包里的所有示例都有限制！]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">鼠标拖动层(可任意绑定DIV标签)（二）</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_187.html" />
      <updated>2009-1-28 14:32:52</updated>
      <published>2009-1-28 14:32:52</published>
      <id>http://dev.mo.cn/article_187.html</id>
      <summary type="html">
      <![CDATA[实现鼠标拖动层的另一种方法<br />调用方法<br /><b><span style="color:#FF0000;">Endrag.bind('MoveDiv').bind('Div1').offSet({x:0,y:0});</span></b><br />通过多次调用bind方法可以绑定任意多个Div标签;<br />offSet设置偏移，默认x偏移和y偏移都为0,供调整使用<br />本方法不能通过子元素绑定操作父元素<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;!DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN"&nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;&nbsp;<br />&lt;html&nbsp;xmlns="http://www.w3.org/1999/xhtml"&gt;&nbsp;<br />&lt;head&gt;&nbsp;<br />&lt;title&gt;&nbsp;鼠标拖动层(可任意绑定DIV标签)（二）&nbsp;&lt;/title&gt;&nbsp;<br />&lt;script&nbsp;language="javascript"&nbsp;type="text/javascript"&gt;<br />/*<br />鼠标拖动层(可任意绑定DIV标签)（二）<br />作者:Anlige<br />联系方式:1034555083/zhanghuiguoanlige@126.com<br /><br />调用方法:Endrag.bind('MoveDiv').bind('Div1').offSet({x:0,y:0});<br />参数说明:bind的参数为Div标签的ID属性或者Div对象本身；offSet的参数为偏移量，默认(不调用本方法)x,y偏移都为0<br />说明:通过多次调用bind方法绑定多个对象的拖动<br />*/&nbsp;<br />&nbsp;&nbsp;Endrag={<br />&nbsp;&nbsp;&nbsp;&nbsp;x0:0,y0:0,x1:0,y1:0,moveable:false,index:100,NS:(navigator.appName=='Netscape'),offSets:{x:0,y:0},<br />&nbsp;&nbsp;&nbsp;&nbsp;//开始拖动;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;startDrag:function&nbsp;(e){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e&nbsp;=&nbsp;e&nbsp;?&nbsp;e&nbsp;:&nbsp;(window.event&nbsp;?&nbsp;window.event&nbsp;:&nbsp;null);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Endrag.getFocus(this);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(e.button==(Endrag.NS)?0&nbsp;:1)&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!Endrag.NS){this.setCapture()}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Endrag.x0&nbsp;=&nbsp;e.clientX&nbsp;;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Endrag.y0&nbsp;=&nbsp;e.clientY&nbsp;;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Endrag.x1&nbsp;=&nbsp;parseInt(Endrag.abs(this).x);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Endrag.y1&nbsp;=&nbsp;parseInt(Endrag.abs(this).y);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Endrag.moveable&nbsp;=&nbsp;true;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//拖动;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;drag:function&nbsp;(e){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e&nbsp;=&nbsp;e&nbsp;?&nbsp;e&nbsp;:&nbsp;(window.event&nbsp;?&nbsp;window.event&nbsp;:&nbsp;null);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Endrag.moveable){&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.style.left&nbsp;=&nbsp;(Endrag.x1&nbsp;+&nbsp;e.clientX&nbsp;-&nbsp;Endrag.x0&nbsp;-&nbsp;Endrag.offSets.x)&nbsp;+&nbsp;"px";&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.style.top&nbsp;&nbsp;=&nbsp;(Endrag.y1&nbsp;+&nbsp;e.clientY&nbsp;-&nbsp;Endrag.y0&nbsp;-&nbsp;Endrag.offSets.y)&nbsp;+&nbsp;"px";&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//停止拖动;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;stopDrag:function&nbsp;(e){&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Endrag.moveable)&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!Endrag.NS){this.releaseCapture();}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Endrag.moveable&nbsp;=&nbsp;false;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;//获得焦点;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;getFocus:function&nbsp;(obj){&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(obj.style.zIndex!=this.index){&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.index&nbsp;+=&nbsp;2;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;idx&nbsp;=&nbsp;this.index;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.style.zIndex=idx;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;abs:function&nbsp;(element)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;result&nbsp;=&nbsp;{&nbsp;x:&nbsp;element.offsetLeft,&nbsp;y:&nbsp;element.offsetTop};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;element&nbsp;=&nbsp;element.offsetParent;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(element)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result.x&nbsp;+=&nbsp;element.offsetLeft;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result.y&nbsp;+=&nbsp;element.offsetTop;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;element&nbsp;=&nbsp;element.offsetParent;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;result;<br />&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;offSet:function(setting){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.offSets=setting;<br />&nbsp;&nbsp;&nbsp;&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;bind:function(obj){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj=typeof(obj)=="object"&nbsp;?&nbsp;obj:document.getElementById(obj);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.onmousedown=Endrag.startDrag;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.onmouseup=Endrag.stopDrag;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.onmousemove=Endrag.drag;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />};<br />&lt;/script&gt;&nbsp;<br />&lt;/head&gt;&nbsp;<br />&lt;body&nbsp;onload="Endrag.bind('MoveDiv').bind('Div1').offSet({x:0,y:0});"&gt;&nbsp;<br />&lt;div&nbsp;id="MoveDiv"&nbsp;style="background:#ffffff;position:absolute;left:200px;top:50px;width:500px;height:200px;border:1px&nbsp;#dddddd&nbsp;solid;"&gt;&nbsp;<br />&lt;div&nbsp;id="hand"&nbsp;style="line-height:25px;text-align:center;background:#f00"&gt;&nbsp;<br />拖动层<br />&lt;/div&gt;&nbsp;<br />调用方法&lt;br&nbsp;/&gt;<br />Endrag.bind('MoveDiv').bind('Div1').offSet({x:0,y:0});&lt;br&nbsp;/&gt;<br />可以绑定任意多个Div标签;&lt;br&nbsp;/&gt;offSet设置偏移，默认x偏移和y偏移都为0,供调整使用&lt;br&nbsp;/&gt;<br />本方法不能通过子元素绑定操作父元素<br />&lt;/div&gt;&nbsp;<br />&lt;div&nbsp;id="Div1"&nbsp;style="background:#ffffff;position:absolute;left:400px;top:300px;width:300px;height:200px;border:1px&nbsp;#dddddd&nbsp;solid;"&gt;&nbsp;<br />&lt;div&nbsp;id="Div2"&nbsp;style="line-height:25px;text-align:center;background:#f00"&gt;&nbsp;<br />拖动层&nbsp;<br />&lt;/div&gt;&nbsp;<br /><br />&lt;/div&gt;&nbsp;<br />&lt;/body&gt;&nbsp;<br />&lt;/html&gt;&nbsp;</div></div>]]>
      </summary>
      <category term="" label="JavaScript/DOM" scheme="http://dev.mo.cn/cat_diary_9.html" />
   </entry>
   <entry>
      <title type="html">鼠标拖动层(可任意绑定DIV标签)（一）</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_186.html" />
      <updated>2009-1-28 14:23:26</updated>
      <published>2009-1-28 14:23:26</published>
      <id>http://dev.mo.cn/article_186.html</id>
      <summary type="html">
      <![CDATA[可实现Div层的任意拖动的第一种方法，调用方便<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;!DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN"&nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;&nbsp;<br />&lt;html&nbsp;xmlns="http://www.w3.org/1999/xhtml"&gt;&nbsp;<br />&lt;head&gt;&nbsp;<br />&lt;title&gt;&nbsp;鼠标拖动层(可任意绑定DIV标签)（一）&nbsp;&lt;/title&gt;&nbsp;<br />&lt;script&nbsp;language="javascript"&nbsp;type="text/javascript"&gt;&nbsp;<br />/*<br />鼠标拖动层(可任意绑定DIV标签)（一）<br />作者:Anlige<br />联系方式:1034555083/zhanghuiguoanlige@126.com<br /><br />调用方法:var&nbsp;myDrag=new&nbsp;Endrag(source,target,offSetX,&nbsp;offSetY);<br />参数说明:source--鼠标动作绑定对象;target--操作目标对象(要移动的对象);offSetX--横坐标偏移;offSetY--纵坐标偏移<br />说明:通过多次调用本方法绑定多个对象的拖动<br />*/<br />&nbsp;funs={<br />&nbsp;&nbsp;&nbsp;&nbsp;index:100,&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;getFocus:function&nbsp;(target){&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(target.style.zIndex!=this.index){&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.index&nbsp;+=&nbsp;2;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;idx&nbsp;=&nbsp;this.index;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;target.style.zIndex=idx;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;abs:function&nbsp;(element)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;result&nbsp;=&nbsp;{&nbsp;x:&nbsp;element.offsetLeft,&nbsp;y:&nbsp;element.offsetTop};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;element&nbsp;=&nbsp;element.offsetParent;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(element)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result.x&nbsp;+=&nbsp;element.offsetLeft;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result.y&nbsp;+=&nbsp;element.offsetTop;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;element&nbsp;=&nbsp;element.offsetParent;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;result;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;};<br />&nbsp;<br />&nbsp;function&nbsp;Endrag(source,target,offSetX,&nbsp;offSetY){<br />&nbsp;&nbsp;&nbsp;&nbsp;source=typeof(source)=="object"&nbsp;?&nbsp;source:document.getElementById(source);<br />&nbsp;&nbsp;&nbsp;&nbsp;target=typeof(target)=="object"&nbsp;?&nbsp;target:document.getElementById(target);<br />&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;x0=0,y0=0,x1=0,y1=0,moveable=false,index=100,NS=(navigator.appName=='Netscape');<br />&nbsp;&nbsp;&nbsp;&nbsp;offSetX=typeof&nbsp;offSetX==&nbsp;"undefined"&nbsp;?&nbsp;0:offSetX;<br />&nbsp;&nbsp;&nbsp;&nbsp;offSetY=typeof&nbsp;offSetY==&nbsp;"undefined"&nbsp;?&nbsp;0:offSetY;<br />&nbsp;&nbsp;&nbsp;&nbsp;source.onmousedown=function(e){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e&nbsp;=&nbsp;e&nbsp;?&nbsp;e&nbsp;:&nbsp;(window.event&nbsp;?&nbsp;window.event&nbsp;:&nbsp;null);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;funs.getFocus(target);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(e.button==(NS)?0&nbsp;:1)&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!NS){this.setCapture()}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x0&nbsp;=&nbsp;e.clientX&nbsp;;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y0&nbsp;=&nbsp;e.clientY&nbsp;;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x1&nbsp;=&nbsp;parseInt(funs.abs(target).x);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y1&nbsp;=&nbsp;parseInt(funs.abs(target).y);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;moveable&nbsp;=&nbsp;true;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;};&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//拖动;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;source.onmousemove=function(e){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e&nbsp;=&nbsp;e&nbsp;?&nbsp;e&nbsp;:&nbsp;(window.event&nbsp;?&nbsp;window.event&nbsp;:&nbsp;null);&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(moveable){&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;target.style.left&nbsp;=&nbsp;(x1&nbsp;+&nbsp;e.clientX&nbsp;-&nbsp;x0&nbsp;-&nbsp;offSetX)&nbsp;+&nbsp;"px";&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;target.style.top&nbsp;&nbsp;=&nbsp;(y1&nbsp;+&nbsp;e.clientY&nbsp;-&nbsp;y0&nbsp;-&nbsp;offSetY)&nbsp;+&nbsp;"px";&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;};&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//停止拖动;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;source.onmouseup=function&nbsp;(e){&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(moveable)&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!NS){this.releaseCapture();}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;moveable&nbsp;=&nbsp;false;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;};<br />}<br />&lt;/script&gt;&nbsp;<br />&lt;/head&gt;&nbsp;<br />&lt;body&nbsp;onload="var&nbsp;i=new&nbsp;Endrag('hand','MoveDiv',0,0);var&nbsp;j=new&nbsp;Endrag('Div1','Div1',0,0);"&gt;&nbsp;<br />&lt;div&nbsp;id="MoveDiv"&nbsp;style="position:absolute;left:200px;top:50px;width:400px;height:200px;border:1px&nbsp;#dddddd&nbsp;solid;"&gt;&nbsp;<br />&lt;div&nbsp;id="hand"&nbsp;style="line-height:25px;text-align:center;background:#f00"&gt;&nbsp;<br />这个用子标签操作父标签&nbsp;<br />&lt;/div&gt;&nbsp;<br />调用方法&lt;br&nbsp;/&gt;var&nbsp;i=new&nbsp;Endrag('hand','MoveDiv',0,0);&lt;br&nbsp;/&gt;<br />第一个参数为源标签对象或对象id属性；第二个参数为要移动的目标对象或对象id属性；第3、4个参数为偏移值，供最后调整用;&lt;br&nbsp;/&gt;<br />鼠标指针在红色区域才有效<br />&lt;/div&gt;&nbsp;<br />&lt;div&nbsp;id="Div1"&nbsp;style="background:#ffffff;position:absolute;left:400px;top:300px;width:300px;height:200px;border:1px&nbsp;#dddddd&nbsp;solid;"&gt;&nbsp;<br />&lt;div&nbsp;id="Div2"&nbsp;style="line-height:25px;text-align:center;background:#f00"&gt;&nbsp;<br />这个用自标签操作自己&nbsp;<br />&lt;/div&gt;&nbsp;<br />调用方法&lt;br&nbsp;/&gt;var&nbsp;j=new&nbsp;Endrag('Div1','Div1',0,0);&lt;br&nbsp;/&gt;<br />第一个参数为源标签对象或对象id属性；第二个参数为要移动的目标对象或对象id属性；第3、4个参数为偏移值，供最后调整用；&lt;br&nbsp;/&gt;<br />鼠标指针在Div1标签内就有效<br />&lt;/div&gt;&nbsp;<br />&lt;/body&gt;&nbsp;<br />&lt;/html&gt;&nbsp;</div></div>]]>
      </summary>
      <category term="" label="JavaScript/DOM" scheme="http://dev.mo.cn/cat_diary_9.html" />
   </entry>
   <entry>
      <title type="html">祝福我的朋友们</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_185.html" />
      <updated>2009-1-22 17:54:25</updated>
      <published>2009-1-22 17:54:25</published>
      <id>http://dev.mo.cn/article_185.html</id>
      <summary type="html">
      <![CDATA[快过年啦，又要长大一岁了。。。<br />想想小时候调皮的自己，时间可过的真快，转眼就长大了<br />昨天看见和我一样大的一个朋友结婚了---如果我们也不上学，估计我们也要有家庭了<br />有一种责任感吧；<br /><br />现在感觉自己很是不争气，不是不努力，自己也有耐心也有恒心及毅力，但总是不尽人意，甚至有点负罪感。。。<br />不管怎么样，长大了，早该对自己负责了，该怎样做自己心里也该很清楚了<br />加油，努力，为自己为父母争口气，不要让人瞧不起；<br /><br />祝愿所有我认识很认识我的朋友在新的一年里万事如意，事事顺心。。。<br />在这"经济危机"爆发的时代能找一份好工作，过幸福的生活；<br /><br />我爱你们，我的朋友们！！！新春快乐！！！<br /><br /><a onfocus="this.blur()" href="http://dev.mo.cn/upfiles/20090122175329839.gif" target=new><img src="http://dev.mo.cn/upfiles/20090122175329839.gif" border="0" alt="´ڴ" onload="javascript:if(this.width>560)this.width=560" /></a>]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">回家了...</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_184.html" />
      <updated>2009-1-19 15:46:50</updated>
      <published>2009-1-19 15:46:50</published>
      <id>http://dev.mo.cn/article_184.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;16号回家了，回家发现个很严重的问题---不能上网！！！<br />&nbsp;&nbsp;&nbsp;找网通，人家说---必须包年/870元，郁闷闪人<br />&nbsp;&nbsp;&nbsp;去移动，营业员"通知"---也包年，我郁闷！！！！！<br />&nbsp;&nbsp;&nbsp;人家主动提供一种业务，GPRS上网卡包月40元/1G流量，听起来不错，并且人家还打"一折"，就花40块钱买了张卡，回家发现---上网速度慢的要死，又回到了"原始时代"---上个qq一分钟掉好几次线，webqq刚登上人家提示与服务器断开连接，校内通、msn、飞信统统掉线。。。。。<br />&nbsp;&nbsp;&nbsp;天哪！！！40天的寒假咋过啊。。。<br /><br />&nbsp;&nbsp;&nbsp;如果谁有急事请打0539-288-6529联系我吧~或者在晚上8点后给我发短信13963961834(在家长途+漫游)]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">正式支持大文件上传--艾恩asp文件上传组件</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_183.html" />
      <updated>2009-1-16 16:05:31</updated>
      <published>2009-1-16 16:05:31</published>
      <id>http://dev.mo.cn/article_183.html</id>
      <summary type="html">
      <![CDATA[*********************************<br />本组件完美支持大文件上传,本地测试上传150M用时35秒,CPU保持在5%-10%左右;<br />如果需要更低的CPU使用率(当然上传速度会降低),请联系作者订做;<br />*********************************<br /><br />组件下载地址:<a href="http://dev.mo.cn/source_167.html" target="new"><span style="color:Red;">http://dev.mo.cn/source_167.html</span></a><br /><br />上传过程CPU情况(高峰为最后保存文件的CPU使用)<br /><a onfocus="this.blur()" href="http://dev.mo.cn/upfiles/20090116160250306.jpg" target=new><img src="http://dev.mo.cn/upfiles/20090116160250306.jpg" border="0" alt="´ڴ" onload="javascript:if(this.width>560)this.width=560" /></a><br /><br />效果<br /><a onfocus="this.blur()" href="http://dev.mo.cn/upfiles/20090116160428413.jpg" target=new><img src="http://dev.mo.cn/upfiles/20090116160428413.jpg" border="0" alt="´ڴ" onload="javascript:if(this.width>560)this.width=560" /></a><br /><br />完整功能:<br />1.自由限制上传文件类型<br />2.自由设置上传大小限制(单文件大小和总上传大小可自由修改限制)<br />3.支持两种文件名方式保存---原文件名保存和新文件名(根据时间随机生成)保存<br />4.提供多种文件保存方式--save.asthis类型、saveAs类型以及经典保存类型<br />5.自由设置字符编码格式--charset属性<br />6.强大的容错处理,&nbsp;提供完整的中文错误提示(需手动显示错误提示)<br />7.自由提取表单数据<br />8.随时获取文件的二进制数据(方便用户保存二进制数据到数据库)<br />。。。。其他的功能就是自由运用本类了。。。。绝对能达到意想不到的效果~<br /><br />更新日期:2008-12-20<br /><br />假设类实例名为UpLoad<br /><br />1.类名由UpLoad修改为AnUpLoad,创建类的方法为：set&nbsp;UpLoad&nbsp;=new&nbsp;AnUpLoad<br /><br />2.增加Charset属性,可以指定文本的编码格式,默认为GB2312。设置方法为：UpLoad.Charset="GB2312"<br /><br />3.增加表单和文件类遍历方法,使用方法:<br />&nbsp; &nbsp; &nbsp; &nbsp; (1)调用UpLoad.Forms(-1),返回一个表单集合,可以用foreach来遍历所有元素,具体查看示例"表单遍历"<br />&nbsp; &nbsp; &nbsp; &nbsp; (2)调用UpLoad.Files(-1),返回一个文件类集合,可以用foreach来遍历所有元素,具体查看示例"多文件文件上传"<br />&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; 检索具体表单或文件的方法不变,为Upload.Forms(表单名)和Upload.Files(表单名)<br /><br />4.优化了文件后缀判断程序,代码更合理<br /><br />5.增加了客户提交表单类型的判断,未设置上传表单enctype属性为multipart/form-data,则提示上传无效!<br /><br />6.重新制作了上传示例程序<br /><br />更新日期:2008-12-29<br />1.增加URL上传功能<br /><br />更新日期:2009-1-9<br />1.去除URL上传功能<br />2.增加两个简便上传函数,真正六行代码实现无组件上传<br /><br />更新日期:2009-1-16<br />1.组件完美支持大文件上传]]>
      </summary>
      <category term="" label="IIS外部组件" scheme="http://dev.mo.cn/cat_diary_4.html" />
   </entry>
   <entry>
      <title type="html">使用Ajax进行用户名有效性验证</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_182.html" />
      <updated>2009-1-15 10:27:32</updated>
      <published>2009-1-15 10:27:32</published>
      <id>http://dev.mo.cn/article_182.html</id>
      <summary type="html">
      <![CDATA[用户名有效性验证，是会员注册必须的步骤，下面一步步介绍如何使用Ajax进行有效性验证<br /><br />一、用户请求页<br />&nbsp;&nbsp;&nbsp;新建一个页面reg.html,如下代码<br /><div class="quote"><br />&lt;!DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN"&nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;<br />&lt;html&nbsp;xmlns="http://www.w3.org/1999/xhtml"&nbsp;&gt;<br />&lt;head&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;Ajax范例---用户名有效性验证&lt;/title&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;script&nbsp;type="text/javascript"&nbsp;src="custom.js"&gt;&lt;/script&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;h3&gt;Ajax范例---用户名有效性验证&lt;/h3&gt;<br /><br />输入用户名:<br />&lt;input&nbsp;tye="text"&nbsp;id="username"&nbsp;name="username"&nbsp;/&gt;<br />&lt;input&nbsp;type="button"&nbsp;value="验证用户名"&nbsp;onclick="return&nbsp;test();"&nbsp;/&gt;&lt;br&nbsp;/&gt;&lt;br&nbsp;/&gt;<br />&lt;span&nbsp;id="result"&gt;&lt;/span&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</div><br /><br />二、Javascript发送请求代码<br />新建文件custom.js(Javascript代码)&nbsp;代码如下<br /><div class="quote"><br />/*<br />Ajax范例<br />By&nbsp;Anlige<br />zhanghuiguoanlige@126.com<br />*/<br />//自定义函数,获取标签对象<br />&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;$(id){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;document.getElementById(id);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />//创建组件<br />&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;createObject(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;Request=null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(window.ActiveXObject)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Request=&nbsp;new&nbsp;ActiveXObject("Microsoft.XMLHTTP");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else&nbsp;if&nbsp;(window.XMLHttpRequest)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Request=&nbsp;new&nbsp;XMLHttpRequest();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(Request.overrideMimeType)&nbsp;{//设置MiME&nbsp;类别<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Request.overrideMimeType("text/xml");&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Request;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;test(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;username=$("username").value;&nbsp;//获取表单值<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(username==""){alert("请输入用户名");return&nbsp;false};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$("result").innerText="验证中...";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//创建一个组件<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;myRequest=createObject();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;//直接附加到url后面的数据总是以get方式提交,地址里面的rnd参数仅仅是为了防止缓存(有人习惯用日期来防止缓存)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;url="test.asp?rnd="&nbsp;+&nbsp;Math.random();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//要post方式提交的数据,作为send方法的参数<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;data="username="&nbsp;+&nbsp;username;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//调用open方法:&nbsp;使用POST方式提交;&nbsp;&nbsp;提交到url;&nbsp;&nbsp;true代表启用异步.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myRequest.open("Post",url,true);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Post方式提交必须加这句,并且要在调用post方法后才能加,否则会提示"未知错误"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myRequest.setRequestHeader("Content-Type",&nbsp;"application/x-www-form-urlencoded");&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置响应函数<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myRequest.onreadystatechange&nbsp;=function(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(myRequest.readyState==4){&nbsp;&nbsp;&nbsp;//如果为说明数据发送成功,并返回<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(myRequest.status==200){&nbsp;&nbsp;//如果为,说明正常状态;404为未找到页面;500为服务器错误<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;msg=myRequest.responseText;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(msg=="no"){<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;$("result").innerText="本用户名未被使用,您可以注册！";<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;$("result").innerText="本用户名已被占用,请选择其他用户名！";<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;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//调用send方法发送数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myRequest.send(data);<br />&nbsp;&nbsp;&nbsp;&nbsp;}</div><br /><br />三、后台验证代码<br />新建文件test.asp(后台验证代码),本文件编码为utf-8(用记事本打开--另存为utf-8格式--覆盖原文件即可)<br /><div class="quote"><br />&lt;%@&nbsp;LANGUAGE="VBScript"%&gt;&nbsp;<br />&lt;%&nbsp;<br />response.charset="utf-8"&nbsp;&nbsp;&nbsp;'字符编码为utf-8<br />dim&nbsp;names,username,isHas<br />names="admin|anlige|admin888"&nbsp;&nbsp;&nbsp;'模拟一个数据库<br />names=split(names,"|")<br />username=request.form("username")&nbsp;&nbsp;'因为Ajax是post的数据，这里用form集合<br />isHas="no"<br />for&nbsp;i=0&nbsp;to&nbsp;ubound(names)<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;names(i)=username&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isHas="yes"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;for<br />&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;if<br />next<br />response.write&nbsp;isHas&nbsp;&nbsp;'输出验证结果<br />%&gt;&nbsp;</div><br />&nbsp;&nbsp;&nbsp;&nbsp;这样，模拟用户注册过程中的"用户名有效性验证"就完成了；<br />&nbsp;&nbsp;&nbsp;&nbsp;测试方法:浏览器中打开reg.html,输入一个用户名进行验证,如果输入&nbsp;admin,anlige,admin888三个中的任何一个都会提示已经被注册。改实例修改test.asp后完全可以移植到原用户验证系统]]>
      </summary>
      <category term="" label="AJAX" scheme="http://dev.mo.cn/cat_diary_2.html" />
   </entry>
   <entry>
      <title type="html">利用ASP下载远程文件到服务器</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_181.html" />
      <updated>2009-1-14 9:51:30</updated>
      <published>2009-1-14 9:51:30</published>
      <id>http://dev.mo.cn/article_181.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这几个函数本来是封装在我自己的组件里了，正好有人需要，就单独提取出来了，调用download方法就可以下载文件了，程序会自动获取文件名，如果获取失败会以dat后缀保存文件;适合小文件的下载<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;%&nbsp;<br /><br />'函数名:WritFile<br />'作用:把指定二进制数据写入文件<br />'参数:byt--二进制数据,file--要写入的文件名<br />public&nbsp;Function&nbsp;WritFile(ByVal&nbsp;byt,&nbsp;ByVal&nbsp;fileName)&nbsp;&nbsp;&nbsp;'写入文件函数<br />on&nbsp;error&nbsp;resume&nbsp;next<br />&nbsp;&nbsp;Dim&nbsp;objAso:set&nbsp;objAso=server.createobject("adodb.Stream")<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objAso.Type&nbsp;=&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objAso.Mode&nbsp;=&nbsp;3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objAso.Open<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objAso.Position&nbsp;=&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objAso.Write&nbsp;byt<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objAso.SaveToFile&nbsp;fileName,&nbsp;2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objAso.Close<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;objAso&nbsp;=&nbsp;Nothing<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WritFile&nbsp;=&nbsp;True<br />End&nbsp;Function<br /><br />'函数名:Download<br />'作用:下载文件<br />'参数:URL-要获取的URL，savePath为文件保存地址<br />Public&nbsp;Function&nbsp;Download(ByVal&nbsp;URL,&nbsp;ByVal&nbsp;savePath)<br />On&nbsp;Error&nbsp;Resume&nbsp;Next<br />Dim&nbsp;ResBody,&nbsp;sStr,&nbsp;vPath,&nbsp;fileName,&nbsp;vErr<br />vErr&nbsp;=&nbsp;True<br />vPath&nbsp;=&nbsp;Replace(savePath,&nbsp;"/",&nbsp;"\")<br />If&nbsp;Right(vPath,&nbsp;1)&nbsp;&lt;&gt;&nbsp;"\"&nbsp;Then&nbsp;vPath&nbsp;=&nbsp;vPath&nbsp;&&nbsp;"\"<br />sPos&nbsp;=&nbsp;InStrRev(URL,&nbsp;"/")&nbsp;+&nbsp;1<br />sStr&nbsp;=&nbsp;Mid(URL,&nbsp;sPos)<br />Set&nbsp;Http&nbsp;=&nbsp;Server.CreateObject("MICROSOFT.XMLHTTP")<br />Http.Open&nbsp;"GET",&nbsp;URL,&nbsp;False<br />Http.Send<br />If&nbsp;Http.Readystate&nbsp;=&nbsp;4&nbsp;Then<br />&nbsp;&nbsp;If&nbsp;Http.Status&nbsp;=&nbsp;200&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResBody&nbsp;=&nbsp;Http.responseBody<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;head&nbsp;=&nbsp;Http.getResponseHeader("content-disposition")<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;head&nbsp;&lt;&gt;&nbsp;""&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;startpos&nbsp;=&nbsp;InStr(head,&nbsp;"=")&nbsp;+&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileName&nbsp;=&nbsp;Mid(head,&nbsp;startpos)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ElseIf&nbsp;InStr(sStr,&nbsp;".")&nbsp;&gt;&nbsp;0&nbsp;And&nbsp;InStr(sStr,&nbsp;"?")&nbsp;&lt;=&nbsp;0&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileName&nbsp;=&nbsp;sStr<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileName&nbsp;=&nbsp;Getname()&nbsp;&&nbsp;".dat"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;WritFile(ResBody,&nbsp;vPath&nbsp;&&nbsp;fileName)&nbsp;Then&nbsp;vErr&nbsp;=&nbsp;False<br />&nbsp;&nbsp;End&nbsp;If<br />End&nbsp;If<br />Download&nbsp;=&nbsp;Not&nbsp;vErr<br />End&nbsp;Function<br /><br />'函数名:getname<br />'作用:按日期获取随机数字<br />public&nbsp;Function&nbsp;Getname()<br />on&nbsp;error&nbsp;resume&nbsp;next<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;y,m,d,h,mm,S,&nbsp;r<br />&nbsp;&nbsp;&nbsp;&nbsp;Randomize<br />&nbsp;&nbsp;&nbsp;&nbsp;y&nbsp;=&nbsp;Year(Now)<br />&nbsp;&nbsp;&nbsp;&nbsp;m&nbsp;=&nbsp;Month(Now):&nbsp;If&nbsp;m&nbsp;&lt;&nbsp;10&nbsp;Then&nbsp;m&nbsp;=&nbsp;"0"&nbsp;&&nbsp;m<br />&nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;=&nbsp;Day(Now):&nbsp;If&nbsp;d&nbsp;&lt;&nbsp;10&nbsp;Then&nbsp;d&nbsp;=&nbsp;"0"&nbsp;&&nbsp;d<br />&nbsp;&nbsp;&nbsp;&nbsp;h&nbsp;=&nbsp;Hour(Now):&nbsp;If&nbsp;h&nbsp;&lt;&nbsp;10&nbsp;Then&nbsp;h&nbsp;=&nbsp;"0"&nbsp;&&nbsp;h<br />&nbsp;&nbsp;&nbsp;&nbsp;mm&nbsp;=&nbsp;Minute(Now):&nbsp;If&nbsp;mm&nbsp;&lt;&nbsp;10&nbsp;Then&nbsp;mm&nbsp;=&nbsp;"0"&nbsp;&&nbsp;mm<br />&nbsp;&nbsp;&nbsp;&nbsp;S&nbsp;=&nbsp;Second(Now):&nbsp;If&nbsp;S&nbsp;&lt;&nbsp;10&nbsp;Then&nbsp;S&nbsp;=&nbsp;"0"&nbsp;&&nbsp;S<br />&nbsp;&nbsp;&nbsp;&nbsp;r&nbsp;=&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;r&nbsp;=&nbsp;CInt(Rnd()&nbsp;*&nbsp;1000)<br />&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;r&nbsp;&lt;&nbsp;10&nbsp;Then&nbsp;r&nbsp;=&nbsp;"00"&nbsp;&&nbsp;r<br />&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;r&nbsp;&lt;&nbsp;100&nbsp;And&nbsp;r&nbsp;&gt;=&nbsp;10&nbsp;Then&nbsp;r&nbsp;=&nbsp;"0"&nbsp;&&nbsp;r<br />&nbsp;&nbsp;&nbsp;&nbsp;Getname&nbsp;=&nbsp;y&nbsp;&&nbsp;m&nbsp;&&nbsp;d&nbsp;&&nbsp;h&nbsp;&&nbsp;mm&nbsp;&&nbsp;S&nbsp;&&nbsp;r<br />End&nbsp;Function<br /><br />call&nbsp;download("http://chat.ii-home.cn/down/objupload.rar",server.mappath("."))<br />%&gt;</div></div><br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">天哪~服务器终于好了</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_180.html" />
      <updated>2009-1-13 0:34:36</updated>
      <published>2009-1-13 0:34:36</published>
      <id>http://dev.mo.cn/article_180.html</id>
      <summary type="html">
      <![CDATA[哭死~网站服务器终于好了！<br />买这空间真有点后悔，时不时就出毛病。。。<br />70的iis连接竟然只给我开了30，前几天才给我调到70.。。<br />服务器除了被黑就是被黑。。。经常打不开<br />明年准备换服务器了，不知道用哪个好呢！<br />再说吧,马上放假了！]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">真正的'6行代码实现无组件上传',你信吗?</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_179.html" />
      <updated>2009-1-10 11:31:17</updated>
      <published>2009-1-10 11:31:17</published>
      <id>http://dev.mo.cn/article_179.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;以前见过所谓的六行代码实现无组件上传,那六行代码的功能是:用户提交路径到服务器,服务器读取路径所在的文件,然后"另存"到服务器,大家也许都意识到其中的错误--只能运行在本地服务器!<br />&nbsp;&nbsp;&nbsp;下面通过我的无组件上传类,真正实现"六"行代码的无组件上传,看下面的代码...<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;!--#include&nbsp;file="upload_class.asp"--&gt;<br />&lt;%<br />&nbsp;Dim&nbsp;Upload,filename&nbsp;&nbsp;<span style="color:Red;">'第1行</span><br />&nbsp;set&nbsp;Upload=new&nbsp;AnUpLoad&nbsp;&nbsp;&nbsp;<span style="color:Red;">'第2行</span><br />&nbsp;Upload.GetData()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:Red;">'第3行</span><br />&nbsp;filename=Upload.save("file1").AsThis(server.mappath("."),0)&nbsp;&nbsp;<span style="color:Red;">'第4行</span><br />&nbsp;<span style="color:SeaGreen;">'filename=Upload.saveAs("file1",server.mappath("."),0)</span><br />&nbsp;response.write&nbsp;filename&nbsp;&nbsp;&nbsp;<span style="color:Red;">&nbsp;'第5行</span><br />&nbsp;set&nbsp;Upload=nothing&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:Red;">'第6行</span><br />%&gt;</div></div><br /><br />确实是六行哦...哈哈~现在介绍下这六行的作用<br /><div class="quote">第1行:&nbsp;没的说,定义变量;<br /><br />第2行:&nbsp;要用到上传类,创建类实例<br /><br />第3行:&nbsp;调用类方法GetData,来处理用户上传的文件<br /><br />第4行:&nbsp;保存文件方法Upload.Save("file1").AsThis(server.mappath("."),0),可以这样理解:保存(save)表单file1的文件到服务器,按照(AsThis)这样的方法(路径为当前文件夹,文件命名方式为0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;下面还有一行注释掉的代码,和本行代码功能完全一样,Upload.saveAs("file1",server.mappath("."),0),和上面理解一样,不过更容易理解和使用<br /><br />第5行:&nbsp;输出函数返回的文件名<br /><br />第6行:&nbsp;注销类实例</div><br />其实仔细看看,真正实现功能的代码仅仅三行(2,3,4),其他几行都是辅助作用的！<br /><br />声明下,本代码是以我的最新上传类为基础的,您可以到这里<a href="http://dev.mo.cn/detial.asp?id=143" target="new">http://dev.mo.cn/detial.asp?id=143</a>来下载最新的类(v9.1.09),本文章的实例包含在压缩包内(sixline)~<br /><br />&nbsp;非常感谢您使用本类,本类完全免费使用,本人保留本类的所有权和版权!<br /><br />&nbsp;同时本类无组件版也同步更新,可以到这里<a href="http://dev.mo.cn/detial.asp?id=167" target="new">http://dev.mo.cn/detial.asp?id=167</a>下载]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">考试了...晕头转向的</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_178.html" />
      <updated>2009-1-6 9:21:38</updated>
      <published>2009-1-6 9:21:38</published>
      <id>http://dev.mo.cn/article_178.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;可恶的考试，天天考，考的晕头转向。。。。<br />&nbsp;&nbsp;&nbsp;哪有敲代码舒服。。。<br />&nbsp;&nbsp;&nbsp;微生物、有机化学、海洋生物学、生物化学。。。<br />&nbsp;&nbsp;&nbsp;天哪！！简直是遭罪啊！！<br />&nbsp;&nbsp;&nbsp;当初咋就选这专业呢？？到现在还纳闷是不是自己选的。。。O(∩_∩)O哈哈~<br />&nbsp;&nbsp;&nbsp;&nbsp;下午考有机，继续看了，累死了。。。<br />&nbsp;&nbsp;&nbsp;偶总属于考前突击者<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;感觉自己有点颓废。。。<br />&nbsp;&nbsp;&nbsp;]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">jQuery入门指南</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_177.html" />
      <updated>2009-1-4 9:34:36</updated>
      <published>2009-1-4 9:34:36</published>
      <id>http://dev.mo.cn/article_177.html</id>
      <summary type="html">
      <![CDATA[这个指南是一个对jQuery库的说明，要求读者了解DOM的一些常识。它包括了一个简单的Hello&nbsp;World的例子，选择器和事件基础，AJAX、FX的用法，以及如何制作jQuery的插件。<br /><br />这个指南包括了很多代码，你可以copy它们，并试着修改它们，看看产生的效果。<br /><br />一.安装<br />一开始,我们需求一个jQuery的库,最新的下载可以到<a href="http://jquery.com/" target="new">这里</a>找到。<br />这个指南提供一个基本包含实例的包供下载.<br /><br /><a href="http://jquery.bassistance.de/jquery-starterkit.zip" target="new">下载:&nbsp;jquery-starterkit</a><br /><br />(译者Keel注:一定要下载这个包，光看文章不实践肯定是不行的。)<br /><br />下载后解压缩，然后用你最喜欢的文本编辑器打开starterkit.html和custom.js这两个文件。<br />(译者Keel注:这两个就是例子文件,所有的例子都用这两个例子作出,custom.js写jQuery代码,starterkit.html观察效果.建议用editPlus打开)<br /><br /><br />现在,我们就已经做好了一切准备来进行这个著名的"Hello&nbsp;world"例子.<br /><br />二.Hello&nbsp;jQuery在做所有事情之前,我们要让jQuery读取和处理文档的DOM,必须尽可能快地在DOM载入后开始执行事件,所以,我们用一个ready事件作为处理HTML文档的开始.看看我们打开的custom.js这个文件,里面已经准备好了:<br /><div class="quote">$(document).ready(function()&nbsp;{<br />//&nbsp;do&nbsp;stuff&nbsp;when&nbsp;DOM&nbsp;is&nbsp;ready//当文档载入后从此处开始执行代码<br />});&nbsp;</div>下面我们放一个简单的alert事件在一个function中,因为这个alert不需求等DOM完成载入,所以我们把任务稍稍变复杂一点:在点击任何一个链接时显示一个alert.<br /><div class="quote">$(document).ready(function()&nbsp;{<br />$("a").click(function()&nbsp;{<br />alert("Hello&nbsp;world!");<br />});<br />});</div><br />这样在你点击页面的一个链接时都会触发这个"Hello&nbsp;world"的提示。<br />(译者Keel注:请照此代码修改custom.js并保存,然后用浏览器打开starterkit.html观察效果。)<br /><br />让我们看一下这些修改是什么含义。$("a")&nbsp;是一个jQuery选择器(selector),在这里，它选择所有的a标签（译者Keel注：即&lt;a&gt;&lt;/a&gt;），$号是&nbsp;jQuery&nbsp;“类”(jQuery&nbsp;"class")的一个别称，因此$()构造了一个新的jQuery&nbsp;对象(jQuery&nbsp;object)。函数&nbsp;click()&nbsp;是这个jQuery对象的一个方法，它绑定了一个单击事件到所有选中的标签(这里是所有的a标签),并在事件触发时执行了它所提供的alert方法.<br />这里有一个拟行相似功能的代码:<br /><div class="quote">&lt;a&nbsp;href="#"&nbsp;onclick="alert('Hello&nbsp;world')"&gt;Link&lt;/a&gt;</div><br />不同之处很明显,用jQuery不需要在每个a标签上写onclick事件,所以我们拥有了一个整洁的结构文档(HTML)和一个行为文档(JS),达到了将结构与行为分开的目的,就像我们使用CSS追求的一样.<br /><br />下面我们会更多地了解到选择器与事件.<br /><br /><br />三.Find&nbsp;me:使用选择器和事件<br />jQuery提供两种方式来选择html的elements，第一种是用CSS和Xpath选择器联合起来形成一个字符串来传送到jQuery的构造器（如：$("div&nbsp;&gt;&nbsp;ul&nbsp;a")）；第二种是用jQuery对象的几个methods(方法)。这两种方式还可以联合起来混合使用。<br /><br />为了测试一下这些选择器，我们来试着在我们starterkit.html中选择并修改第一个ordered&nbsp;list.<br /><br />一开始，我们需要选择这个list本身，这个list有一个ID叫“orderedlist”，通常的javascript写法是document.getElementById("orderedlist").在jQuery中，我们这样做：<br /><div class="quote">$(document).ready(function()&nbsp;{<br />$("#orderedlist").addClass("red");<br />});</div><br />这里将starterkit中的一个CSS样式red附加到了orderedlist上(译者Keel注：参考测试包中的css目录下的core.css，其中定义了red样式)。因此，在你刷新了starterkit.html后，你将会看到第一个有序列表(ordered&nbsp;list&nbsp;)背景色变成了红色，而第二个有序列表没有变化.<br /><br />现在，让我们添加一些新的样式到list的子节点.<br /><div class="quote">$(document).ready(function()&nbsp;{<br />$("#orderedlist&nbsp;&gt;<br />li").addClass("blue");<br />});</div><br />这样，所有orderedlist中的li都附加了样式blue。<br /><br />现在我们再做个复杂一点的，当把鼠标放在li对象上面和移开时进行样式切换，但只在list的最后一个element上生效。<br /><div class="quote">$(document).ready(function()&nbsp;{<br />$("#orderedlist<br />li:last").hover(function()&nbsp;{<br />$(this).addClass("green");<br />},&nbsp;function()&nbsp;{<br />$(this).removeClass("green");<br />});<br />});</div><br />还有大量的类似的CSS和XPath例子，更多的例子和列表可以在这里找到。<br />（译者Keel注：入门看此文，修行在个人，要想在入门之后懂更多，所以这段话的几个链接迟早是要必看的！不会又要翻译吧...^_^!）<br /><br />每一个onXXX事件都有效，如onclick,onchange,onsubmit等，都有jQuery等价表示方法（译者Keel注：jQuery不喜欢onXXX，所以都改成了XXX，去掉了on）。其他的一些事件，如ready和hover,也提供了相应的方法。<br /><br />你可以在Visual&nbsp;jQuery找到全部的事件列表，在Events栏目下。<br /><br />用这些选择器和事件你已经可以做很多的事情了，但这里有一个更强的好东东！<br /><div class="quote">$(document).ready(function()&nbsp;{<br />$("#orderedlist").find("li").each(function(i)&nbsp;{<br />$(this).html(<br />$(this).html()&nbsp;+&nbsp;"&nbsp;BAM!&nbsp;"&nbsp;+&nbsp;i&nbsp;);<br />});<br />});&nbsp;</div><br /><br />find()&nbsp;让你在已经选择的element中作条件查找,因此&nbsp;$("#orderedlist).find("li")&nbsp;就像&nbsp;$("#orderedlist&nbsp;li").&nbsp;each()一样迭代了所有的li，并可以在此基础上作更多的处理。&nbsp;大部分的方法,如addClass(),&nbsp;都可以用它们自己的&nbsp;each()&nbsp;。在这个例子中,&nbsp;html()用来获取每个li的html文本,&nbsp;追加一些文字，并将之设置为li的html文本。（译者Keel注：从这个例子可以看到.html()方法是获取对象的html代码，而.html('xxx')是设置'xxx'为对象的html代码）&nbsp;<br /><br />另一个经常碰到的任务是在没有被jQuery覆盖的DOM元素上call一些方法，想像一个在你用AJAX方式成功提交后的reset：<br /><div class="quote">$(document).ready(function()&nbsp;{<br />//&nbsp;use&nbsp;this&nbsp;to&nbsp;reset&nbsp;a<br />single&nbsp;form<br />$("#reset").click(function()&nbsp;{<br />$("#form")[0].reset();<br />});<br />});</div><br />（译者Keel注：这里作者将form的id也写成了form，源文件有&lt;form&nbsp;id="form"&gt;，这是非常不好的写法，你可以将这个ID改成form1或者testForm，然后用$("#form1")或者$("#testForm")来表示它，再进行测试。）<br /><br />这个代码选择了所有ID为"form"的元素，并在其第一个上call了一个reset()。如果你有一个以上的form，你可以这样做：<br /><div class="quote">$(document).ready(function()&nbsp;{<br />//&nbsp;use&nbsp;this&nbsp;to&nbsp;reset<br />several&nbsp;forms&nbsp;at&nbsp;once<br />$("#reset").click(function()&nbsp;{<br />$("form").each(function()&nbsp;{<br />this.reset();<br />});<br />});<br />});</div><br />（译者Keel注：请注意一定要亲自将这些代码写在custom.js中并在starterkit.html上测试效果才能有所体会！必要时要观察starterkit.html的html代码）<br /><br />这样你在点击Reset链接后，就选择了文档中所有的form元素，并对它们都执行了一次reset()。<br /><br />还有一个你可能要面对的问题是不希望某些特定的元素被选择。jQuery&nbsp;提供了filter()&nbsp;和not()&nbsp;方法来解决这个问题。&nbsp;filter()以过滤表达式来减少不符合的被选择项,&nbsp;not()则用来取消所有符合过滤表达式的被选择项.&nbsp;考虑一个无序的list，你想要选择所有的没有ul子元素的li元素。<br /><div class="quote">$(document).ready(function()&nbsp;{<br />$("li").not("[ul]").css("border",&nbsp;"1px&nbsp;solid&nbsp;black");<br />});&nbsp;</div><br />这个代码选择了所有的li元素，然后去除了没有ul子元素的li元素。刷新浏览器后，所有的li元素都有了一个边框，只有ul子元素的那个li元素例外。<br /><br />（译者Keel注：请注意体会方便之极的css()方法，并再次提醒请务必实际测试观察效果，比方说换个CSS样式呢？再加一个CSS样式呢？像这样：$("li").not("[ul]").css("border",&nbsp;"1px&nbsp;solid&nbsp;black").css("color","red");）<br /><br />上面代码中的[expression]&nbsp;语法是从XPath而来，可以在子元素和属性(elements&nbsp;and&nbsp;attributes)上用作过滤器，比如你可能想选择所有的带有name属性的链接：<br />$(document).ready(function()&nbsp;{<br />$("a[@name]").background("#eee");<br />});&nbsp;<div class="quote"></div><br /><br />这个代码给所有带有name属性的链接加了一个背景色。（译者Keel注：这个颜色太不明显了，建议写成$("a[@name]").background("red");）<br /><br />更常见的情况是以name来选择链接，你可能需要选择一个有特点href属性的链接，这在不同的浏览器下对href的理解可能会不一致，所以我们的部分匹配("*=")的方式来代替完全匹配("=")：<br /><div class="quote">$(document).ready(function()&nbsp;{<br />$("a[@href*=/content/gallery]").click(function()&nbsp;{<br />//&nbsp;do&nbsp;something&nbsp;with<br />all&nbsp;links&nbsp;that&nbsp;point&nbsp;somewhere&nbsp;to&nbsp;/content/gallery<br />});<br />});</div><br /><br />到现在为止，选择器都用来选择子元素或者是过滤元素。另外还有一种情况是选择上一个或者下一个元素，比如一个FAQ的页面，答案首先会隐藏，当问题点击时，答案显示出来，jQuery代码如下：<br /><br /><div class="quote">$(document).ready(function()&nbsp;{<br />$('#faq').find('dd').hide().end().find('dt').click(function()&nbsp;{<br />var<br />answer&nbsp;=&nbsp;$(this).next();<br />if&nbsp;(answer.is(':visible'))&nbsp;{<br />answer.slideUp();<br />}&nbsp;else&nbsp;{<br />answer.slideDown();<br />}<br />});<br />});</div><br />这里我们用了一些链式表达法来减少代码量，而且看上去更直观更容易理解。像'#faq'&nbsp;只选择了一次，利用end()方法，第一次find()方法会结束(undone)，所以我们可以接着在后面继续find('dt')，而不需要再写$('#faq').find('dt')。<br /><br />在点击事件中的，我们用&nbsp;$(this).next()&nbsp;来找到dt下面紧接的一个dd元素，这让我们可以快速地选择在被点击问题下面的答案。<br />（译者Keel注：这个例子真是太酷了，FAQ中的答案可以收缩！从利用next()的思路到实现这些效果都有很多地方需要我们消化，注意&nbsp;if&nbsp;(answer.is(':visible'))用法，注意answer.slideUp();不懂的地方赶紧查我在最开始提到的两个必看API文档）<br /><br />除了选择同级别的元素外，你也可以选择父级的元素。可能你想在用户鼠标移到文章某段的某个链接时，它的父级元素--也就是文章的这一段突出显示，试试这个：<br /><br /><div class="quote">$(document).ready(function()&nbsp;{<br />$("a").hover(function()&nbsp;{<br />$(this).parents("p").addClass("highlight");<br />},&nbsp;function()&nbsp;{<br />$(this).parents("p").removeClass("highlight");<br />});<br />});</div><br /><br />测试效果可以看到，移到文章某段的链接时，它所在的段全用上highlight样式，移走之后又恢复原样。<br />（译者Keel注：highlight是core.css中定义的样式，你也可以改变它，注意这里有第二个function()这是hover方法的特点，请在API文档中查阅hover，上面也有例子说明）<br /><br />在我们继续之前我们先来看看这一步：&nbsp;jQuery会让代码变得更短从而更容易理解和维护，下面是$(document).ready(callback)的缩写法：<br /><div class="quote">$(function()&nbsp;{<br />//&nbsp;code&nbsp;to&nbsp;execute&nbsp;when&nbsp;the&nbsp;DOM&nbsp;is&nbsp;ready<br />});&nbsp;</div><br /><br />应用到我们的Hello&nbsp;world例子中，可以这样：<br /><div class="quote">$(function()&nbsp;{<br />$("a").click(function()&nbsp;{<br />alert("Hello&nbsp;world!");<br />});<br />});&nbsp;</div><br />现在，我们手上有了这些基础的知识，我们可以更进一步的探索其它方面的东西，就从AJAX开始！<br />四.Rate&nbsp;me:使用AJAX<br />在这一部分我们写了一个小小的AJAX应用，它能够rate一些东西（译者Keel注：就是对某些东西投票），就像在youtube.com上面看到的一样。<br />首先我们需要一些服务器端代码，这个例子中用到了一个PHP文件，读取rating参数然后返回rating总数和平均数。看一下rate.php代码。<br /><br />虽然这些例子也可以不使用AJAX来实现，但显然我们不会那么做，我们用jQuery生成一个DIV容器，ID是"rating"。<br /><br /><div class="quote">$(document).ready(function()&nbsp;{<br />//&nbsp;generate&nbsp;markup<br />var&nbsp;ratingMarkup&nbsp;=&nbsp;["Please&nbsp;rate:&nbsp;"];<br />for(var&nbsp;i=1;&nbsp;i&nbsp;&lt;=&nbsp;5;&nbsp;i++)&nbsp;{&nbsp;ratingMarkup[ratingMarkup.length]&nbsp;=&nbsp;""&nbsp;+<br />i&nbsp;+&nbsp;"&nbsp;";<br />}<br />//&nbsp;add&nbsp;markup&nbsp;to&nbsp;container&nbsp;and<br />applier&nbsp;click&nbsp;handlers&nbsp;to&nbsp;anchors<br />$("#rating").append(&nbsp;ratingMarkup.join('')<br />).find("a").click(function(e)&nbsp;{<br />e.preventDefault();<br />//&nbsp;send&nbsp;requests<br />$.post("rate.php",&nbsp;{rating:&nbsp;$(this).html()},&nbsp;function(xml)&nbsp;{<br />//&nbsp;format<br />result<br />var&nbsp;result&nbsp;=&nbsp;[<br />"Thanks&nbsp;for&nbsp;rating,&nbsp;current&nbsp;average:&nbsp;",<br />$("average",&nbsp;xml).text(),<br />",&nbsp;number&nbsp;of&nbsp;votes:&nbsp;",<br />$("count",<br />xml).text()<br />];<br />//&nbsp;output&nbsp;result<br />$("#rating").html(result.join(''));<br />}&nbsp;);<br />});<br />});&nbsp;</div><br /><br />这段代码生成了5个链接，并将它们追加到id为"rating"容器中，当其中一个链接被点击时，该链接标明的分数就会以rating参数形式发送到rate.php，然后，结果将以XML形式会从服务器端传回来，添加到容器中，替代这些链接。<br />如果你没有一个安装过PHP的webserver，你可以看看这个在线的例子。<br />这是一个比较粗糙的例子，更完美的例子可以访问&nbsp;softonic.de&nbsp;点击&nbsp;"Kurz&nbsp;bewerten!"。<br />更多的AJAX方法可以从这里找到，或者看看API文档下面的AJAX。<br /><br />（译者Keel注：这个在线实例从国内访问还是比较慢的，点击后要等一会儿才能看到结果，可以考虑对它进行修改，比如加上loading，投票后加上再投票的返回链接等。此外，这个例子中还是有很多需要进一步消化的地方，看不懂的地方请参考API文档。）<br /><br />一个在载入AJAX时经常发生的问题是：当载入一个事件句柄到一个需要载入内容的HTML文档时，你只能在内容载入后再加载这些句柄，为了防止代码重复执行，你可能用到如下一个function:<br /><br /><div class="quote">//&nbsp;lets&nbsp;use&nbsp;the&nbsp;shortcut<br />$(function()&nbsp;{<br />var<br />addClickHandlers&nbsp;=&nbsp;function()&nbsp;{<br />$("a.clickMeToLoadContent").click(function()<br />{<br />$("#target").load(this.href,&nbsp;addClickHandlers);<br />});<br />};<br />addClickHandlers();<br />});&nbsp;</div><br />现在，addClickHandlers只在DOM载入完成后执行一次，并且是在用户点击具有clickMeToLoadContent&nbsp;这个样式的链接后。<br /><br />请注意addClickHandlers函数是作为一个本地变量定义的，而不是全局变量(如：function&nbsp;addClickHandlers()&nbsp;{...})，这样做是为了防止与其他的全局变量或者函数相冲突。<br /><br />另一个常见的问题是关于回传(callback)的参数。你可以通过一个额外的参数指定回叫的方法，简单的办法是将这个回叫方法包含在一个其它的function中：<br /><br /><div class="quote">//&nbsp;get&nbsp;some&nbsp;data<br />var&nbsp;foobar&nbsp;=&nbsp;...;<br />//&nbsp;specify<br />handler,&nbsp;it&nbsp;needs&nbsp;data&nbsp;as&nbsp;a&nbsp;paramter<br />var&nbsp;handler&nbsp;=&nbsp;function(data)&nbsp;{<br />...<br />};<br />//&nbsp;add&nbsp;click&nbsp;handler&nbsp;and&nbsp;pass&nbsp;foobar!<br />$('a').click(<br />function(event)&nbsp;{&nbsp;handler(foobar);&nbsp;}&nbsp;);<br /><br />//&nbsp;if&nbsp;you&nbsp;need&nbsp;the&nbsp;context&nbsp;of<br />the&nbsp;original&nbsp;handler,&nbsp;use&nbsp;apply:<br />$('a').click(&nbsp;function(event)&nbsp;{<br />handler.apply(this,&nbsp;[foobar]);&nbsp;}&nbsp;);&nbsp;</div><br />用到简单的AJAX后，我们可以认为已经非常之“web2.0”了，但是到现在为止，我们还缺少一些酷炫的效果。下一节将如谈到这些效果。<br /><br /><br />五：Animate&nbsp;me(让我生动起来):使用FX&nbsp;<br />一些生动的效果可以使用&nbsp;show()&nbsp;和&nbsp;hide()来表现:<br /><br />$(document).ready(function()&nbsp;{&nbsp;$("a").toggle(function()&nbsp;{&nbsp;&nbsp;$(".stuff").hide('slow');&nbsp;},&nbsp;function()&nbsp;{&nbsp;&nbsp;$(".stuff").show('fast');&nbsp;});});你可以与&nbsp;animate()联合起来创建一些效果,如一个带渐显的滑动效果:<br /><br />$(document).ready(function()&nbsp;{&nbsp;$("a").toggle(function()&nbsp;{&nbsp;&nbsp;$(".stuff").animate({&nbsp;&nbsp;&nbsp;height:&nbsp;'hide',&nbsp;&nbsp;&nbsp;opacity:&nbsp;'hide'&nbsp;&nbsp;},&nbsp;'slow');&nbsp;},&nbsp;function()&nbsp;{&nbsp;&nbsp;$(".stuff").animate({&nbsp;&nbsp;&nbsp;height:&nbsp;'show',&nbsp;&nbsp;&nbsp;opacity:&nbsp;'show'&nbsp;&nbsp;},&nbsp;'slow');&nbsp;});});很多不错的效果可以访问interface&nbsp;plugin&nbsp;collection.&nbsp;这个站点提供了很多demos和文档<br /><br />这些效果插件是位于jQuery插件列表的前面的，当然也有很多其他的插件，比如我们下一章讲到的表格排序插件。<br /><br />六、Sort&nbsp;me(将我有序化):使用tablesorter插件(表格排序)&nbsp;<br />这个表格排序插件能让我们在客户端按某一列进行排序，引入jQuery和这个插件的js文件，然后告诉插件你想要哪个表格拥有排序功能。<br /><br />要测试这个例子，先在starterkit.html中加上像下面这一行的代码：<br /><br /><div class="quote">&lt;script&nbsp;src="lib/jquery.tablesorter.js"&nbsp;type="text/javascript"&gt;&lt;/script&gt;</div>然后可以这样调用不着:<br /><br /><div class="quote">$(document).ready(function()&nbsp;{&nbsp;$("#large").tableSorter();});</div>现在点击表格的第一行head区域，你可以看到排序的效果，再次点击会按倒过来的顺序进行排列。<br /><br />这个表格还可以加一些突出显示的效果，我们可以做这样一个隔行背景色效果:<br /><br /><div class="quote">$(document).ready(function()&nbsp;{&nbsp;$("#large").tableSorter({//&nbsp;Class&nbsp;names&nbsp;for&nbsp;striping&nbsp;supplyed&nbsp;as&nbsp;a&nbsp;array.&nbsp;&nbsp;stripingRowClass:&nbsp;['odd','even'],&nbsp;&nbsp;&nbsp;stripRowsOnStartUp:&nbsp;true&nbsp;&nbsp;//&nbsp;Strip&nbsp;rows&nbsp;on&nbsp;tableSorter&nbsp;init.&nbsp;});});</div>关于这个插件的更多例子和文档可以在&nbsp;tablesorter首页找到.<br /><br />几乎所有的特件都是这样用的:先include插件的js文件,然后在某些元素上使用插件定义的方法,当然也有一些参数选项是可以配置的<br /><br />经常更新的插件列表可以从jQuery官方站&nbsp;on&nbsp;the&nbsp;jQuery&nbsp;site找到.<br /><br />当你更经常地使用jQury时,你会发现将你自己的代码打包成插件是很有用处的,它能方便地让你的公司或者其他人进行重用.下一章我们将谈到如何构建一个自己的插件.<br /><br />七、Plug&nbsp;me:制作自己的插件&nbsp;<br />写一个自己的jQuery插件是非常容易的,如果你按照下面的原则来做,可以让其他人也容易地结合使用你的插件.<br /><br />为你的插件取一个名字,在这个例子里面我们叫它"foobar".&nbsp;<br />创建一个像这样的文件:jquery.[yourpluginname].js,比如我们创建一个jquery.foobar.js&nbsp;<br />创建一个或更多的插件方法,使用继承jQuery对象的方式,如:&nbsp;<br />jQuery.fn.foobar&nbsp;=&nbsp;function()&nbsp;{&nbsp;//&nbsp;do&nbsp;something};可选的:创建一个用于帮助说明的函数,如:&nbsp;<br />jQuery.fooBar&nbsp;=&nbsp;{&nbsp;height:&nbsp;5,&nbsp;calculateBar&nbsp;=&nbsp;function()&nbsp;{&nbsp;...&nbsp;},&nbsp;checkDependencies&nbsp;=&nbsp;function()&nbsp;{&nbsp;...&nbsp;}};你现在可以在你的插件中使用这些帮助函数了:<br /><br />jQuery.fn.foobar&nbsp;=&nbsp;function()&nbsp;{&nbsp;//&nbsp;do&nbsp;something&nbsp;jQuery.foobar.checkDependencies(value);&nbsp;//&nbsp;do&nbsp;something&nbsp;else};可选的l:创建一个默认的初始参数配置,这些配置也可以由用户自行设定,如:&nbsp;<br />jQuery.fn.foobar&nbsp;=&nbsp;function(options)&nbsp;{&nbsp;var&nbsp;settings&nbsp;=&nbsp;{&nbsp;&nbsp;value:&nbsp;5,&nbsp;&nbsp;name:&nbsp;"pete",&nbsp;&nbsp;bar:&nbsp;655&nbsp;};&nbsp;if(options)&nbsp;{&nbsp;&nbsp;jQuery.extend(settings,&nbsp;options);&nbsp;}};现在可以无需做任何配置地使用插件了,默认的参数在此时生效:<br /><br />$("...").foobar();Or&nbsp;with&nbsp;some&nbsp;options:<br /><br />$("...").foobar({&nbsp;value:&nbsp;123,&nbsp;bar:&nbsp;9});如果你release你的插件,&nbsp;你还应该提供一些例子和文档,大部分的插件都具备这些良好的参考文档.<br /><br />现在你应该有了写一个插件的基础,让我们试着用这些知识写一个自己的插件.<br /><br />很多人试着控制所有的radio或者checkbox是否被选中,比如:<br /><br />$("input[@type='checkbox']").each(function()&nbsp;{&nbsp;this.checked&nbsp;=&nbsp;true;&nbsp;//&nbsp;or,&nbsp;to&nbsp;uncheck&nbsp;this.checked&nbsp;=&nbsp;false;&nbsp;//&nbsp;or,&nbsp;to&nbsp;toggle&nbsp;this.checked&nbsp;=&nbsp;!this.checked;});你可能想要把这个重写为一个插件,很直接地:<br /><br />$.fn.check&nbsp;=&nbsp;function()&nbsp;{&nbsp;return&nbsp;this.each(function()&nbsp;{&nbsp;&nbsp;this.checked&nbsp;=&nbsp;true;&nbsp;});};这个插件现在可以这样用:<br /><br />$("input[@type='checkbox']").check();现在你应该还可以写出uncheck()和toggleCheck()了.但是先停一下,让我们的插件接收一些参数.<br /><br /><br /><br /><div class="quote"><br />$.fn.check&nbsp;=&nbsp;function(mode)&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;mode&nbsp;=&nbsp;mode&nbsp;||&nbsp;'on';&nbsp;//&nbsp;if&nbsp;mode&nbsp;is&nbsp;undefined,&nbsp;use&nbsp;'on'&nbsp;as&nbsp;default&nbsp;return&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;this.each(function()&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;switch(mode)&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;'on':&nbsp;&nbsp;&nbsp;this.checked&nbsp;=&nbsp;true;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;'off':&nbsp;&nbsp;&nbsp;this.checked&nbsp;=&nbsp;false;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;'toggle':&nbsp;&nbsp;&nbsp;this.checked&nbsp;=&nbsp;!this.checked;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;});<br />};</div><br />这里我们设置了默认的参数,所以将"on"参数省略也是可以的,当然也可以加上"on","off",&nbsp;或&nbsp;"toggle",如:<br /><br /><div class="quote"><br />$("input[@type='checkbox']").check();<br />$("input[@type='checkbox']").check('on');<br />$("input[@type='checkbox']").check('off');<br />$("input[@type='checkbox']").check('toggle');<br /></div><br />如果有多于一个的参数设置会稍稍有点复杂,在使用时如果只想设置第二个参数,则要在第一个参数位置写入null.<br /><br />从上一章的tablesorter插件用法我们可以看到,既可以省略所有参数来使用或者通过一个&nbsp;key/value&nbsp;对来重新设置每个参数.<br /><br />作为一个练习,你可以试着将&nbsp;第四部分&nbsp;的功能重写为一个插件.这个插件的骨架应该是像这样的:<br /><br /><div class="quote"><br />$.fn.rateMe&nbsp;=&nbsp;function(options)&nbsp;{&nbsp;<br />&nbsp;//&nbsp;instead&nbsp;of&nbsp;selecting&nbsp;a&nbsp;static&nbsp;container&nbsp;with&nbsp;$("#rating"),&nbsp;&nbsp;//we&nbsp;now&nbsp;use&nbsp;the&nbsp;jQuery&nbsp;context&nbsp;<br />var&nbsp;container&nbsp;=&nbsp;this;&nbsp;&nbsp;<br />var&nbsp;settings&nbsp;=&nbsp;{&nbsp;&nbsp;url:&nbsp;"rate.php"&nbsp;&nbsp;//&nbsp;put&nbsp;more&nbsp;defaults&nbsp;here&nbsp;&nbsp;//&nbsp;remember&nbsp;to&nbsp;put&nbsp;a&nbsp;comma&nbsp;(",")&nbsp;after&nbsp;each&nbsp;pair,&nbsp;&nbsp;&nbsp;//&nbsp;but&nbsp;not&nbsp;after&nbsp;the&nbsp;last&nbsp;one!&nbsp;<br />};&nbsp;<br />if(options)&nbsp;{&nbsp;&nbsp;//&nbsp;check&nbsp;if&nbsp;options&nbsp;are&nbsp;present&nbsp;before&nbsp;extending&nbsp;the&nbsp;settings&nbsp;&nbsp;<br />$.extend(settings,&nbsp;options);&nbsp;<br />}&nbsp;<br />&nbsp;//&nbsp;...&nbsp;//&nbsp;rest&nbsp;of&nbsp;the&nbsp;code&nbsp;//&nbsp;...&nbsp;&nbsp;<br />return&nbsp;this;&nbsp;//&nbsp;if&nbsp;possible,&nbsp;return&nbsp;"this"&nbsp;to&nbsp;not&nbsp;break&nbsp;the&nbsp;chain<br />});</div><br /><br />如果你想做更好的javascript开发,建议你使用一个叫&nbsp;FireBug的firefox插件.&nbsp;它提供了断点调试(比alert强多了)、观察DOM变化等很多漂亮的功能<br /><br />如果你还有未解决的问题，或者新的想法与建议，你可以使用jQuery的邮件列表&nbsp;jQuery&nbsp;mailing&nbsp;list.<br /><br />关于这个指南的任何事情，你可以写mail给作者或者发表评论在他的日志：blog.<br />]]>
      </summary>
      <category term="" label="JavaScript/DOM" scheme="http://dev.mo.cn/cat_diary_9.html" />
   </entry>
   <entry>
      <title type="html">escape、encodeURI和encodeURIComponent的区别</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_175.html" />
      <updated>2009-1-3 9:35:00</updated>
      <published>2009-1-3 9:35:00</published>
      <id>http://dev.mo.cn/article_175.html</id>
      <summary type="html">
      <![CDATA[escape(),&nbsp;encodeURI()和encodeURIComponent()是在Javascript中用于编码字符串的三个常用的方法，而他们之间的异同却困扰了很多的Javascript初学者，今天我就在这里对这三个方法详细地分析与比较一下。<br /><br />escape()&nbsp;方法<br /><br />MSDN&nbsp;JScript&nbsp;Reference中如是说：<br /><br />The&nbsp;escape&nbsp;method&nbsp;returns&nbsp;a&nbsp;string&nbsp;value&nbsp;(in&nbsp;Unicode&nbsp;format)&nbsp;that&nbsp;contains&nbsp;the&nbsp;contents&nbsp;of&nbsp;[the&nbsp;argument].&nbsp;All&nbsp;spaces,&nbsp;punctuation,&nbsp;accented&nbsp;characters,&nbsp;and&nbsp;any&nbsp;other&nbsp;non-ASCII&nbsp;characters&nbsp;are&nbsp;replaced&nbsp;with&nbsp;%xx&nbsp;encoding,&nbsp;where&nbsp;xx&nbsp;is&nbsp;equivalent&nbsp;to&nbsp;the&nbsp;hexadecimal&nbsp;number&nbsp;representing&nbsp;the&nbsp;character.&nbsp;For&nbsp;example,&nbsp;a&nbsp;space&nbsp;is&nbsp;returned&nbsp;as&nbsp;"%20."<br /><br />鄙人译：escape方法以Unicode格式返回一个包含传入参数内容的string类型的值。&nbsp;Escape方法会将传入参数中所有的空格、标点符号、重音字符以及其它任何非ASCII字符替换为%xx的编码形式，其中xx与其所表示的字符的16进制数表示形式相同。如空格字符的16进制表示形式为0x20，则此时xx应为20，即escape(‘&nbsp;’)&nbsp;返回“%20”。<br /><br />Mozilla&nbsp;Developer&nbsp;Core&nbsp;Javascript&nbsp;Guide中如是说：<br /><br />The&nbsp;escape&nbsp;and&nbsp;unescape&nbsp;functions&nbsp;let&nbsp;you&nbsp;encode&nbsp;and&nbsp;decode&nbsp;strings.&nbsp;The&nbsp;escape&nbsp;function&nbsp;returns&nbsp;the&nbsp;hexadecimal&nbsp;encoding&nbsp;of&nbsp;an&nbsp;argument&nbsp;in&nbsp;the&nbsp;ISO&nbsp;Latin&nbsp;character&nbsp;set.&nbsp;The&nbsp;unescape&nbsp;function&nbsp;returns&nbsp;the&nbsp;ASCII&nbsp;string&nbsp;for&nbsp;the&nbsp;specified&nbsp;hexadecimal&nbsp;encoding&nbsp;value.<br /><br />鄙人译：escape和unescape方法能够帮助你编码和解码字符串。escape方法对于ISO&nbsp;Latin字符集中的字符组成的参数，返回其16进制编码。相对应的，unescape方法则能将16进制编码形式的参数转化成为其ASCII码形式。<br /><br /><br /><br />encodeURI()方法<br /><br />MSDN&nbsp;JScript&nbsp;Reference中如是说：<br /><br />The&nbsp;encodeURI&nbsp;method&nbsp;returns&nbsp;an&nbsp;encoded&nbsp;URI.&nbsp;If&nbsp;you&nbsp;pass&nbsp;the&nbsp;result&nbsp;to&nbsp;decodeURI,&nbsp;the&nbsp;original&nbsp;string&nbsp;is&nbsp;returned.&nbsp;The&nbsp;encodeURI&nbsp;method&nbsp;does&nbsp;not&nbsp;encode&nbsp;the&nbsp;following&nbsp;characters:&nbsp;":",&nbsp;"/",&nbsp;";",&nbsp;and&nbsp;"?".&nbsp;Use&nbsp;encodeURIComponent&nbsp;to&nbsp;encode&nbsp;these&nbsp;characters.<br /><br />鄙人译：encodeURI方法返回一个经过编码的URI。如果将encodeURI方法的编码结果传递给decodeURI方法作参数，则能得到原始的未编码的字符串。需要注意到是encodeURI方法不编码如下字符":",&nbsp;"/",&nbsp;";",&nbsp;and&nbsp;"?"。如果想要编码这些字符，请使用encodeURIComponent方法。<br /><br />Mozilla&nbsp;Developer&nbsp;Core&nbsp;Javascript&nbsp;Guide中如是说：<br /><br />Encodes&nbsp;a&nbsp;Uniform&nbsp;Resource&nbsp;Identifier&nbsp;(URI)&nbsp;by&nbsp;replacing&nbsp;each&nbsp;instance&nbsp;of&nbsp;certain&nbsp;characters&nbsp;by&nbsp;one,&nbsp;two,&nbsp;or&nbsp;three&nbsp;escape&nbsp;sequences&nbsp;representing&nbsp;the&nbsp;UTF-8&nbsp;encoding&nbsp;of&nbsp;the&nbsp;character.<br /><br />鄙人译：通过将每个属于特定的字符集合的字符替换为一个、两个或者三个（为什么是“一个、两个或者三个”本人也没有搞懂，望高人赐教）使用UTF-8编码来表示这个字符的escape序列来编码一个URI。如&nbsp;~!@#$%^&*(){}[]=:/,;?+\'"\\&nbsp;将被替换为&nbsp;~!@#$%25%5E&*()%7B%7D%5B%5D=:/,;?+'%22%5C<br /><br /><br /><br />encodeURIComponent()方法<br /><br />MSDN&nbsp;JScript&nbsp;Reference中如是说：<br /><br />The&nbsp;encodeURIComponent&nbsp;method&nbsp;returns&nbsp;an&nbsp;encoded&nbsp;URI.&nbsp;If&nbsp;you&nbsp;pass&nbsp;the&nbsp;result&nbsp;to&nbsp;decodeURIComponent,&nbsp;the&nbsp;original&nbsp;string&nbsp;is&nbsp;returned.&nbsp;Because&nbsp;the&nbsp;encodeURIComponent&nbsp;method&nbsp;encodes&nbsp;all&nbsp;characters,&nbsp;be&nbsp;careful&nbsp;if&nbsp;the&nbsp;string&nbsp;represents&nbsp;a&nbsp;path&nbsp;such&nbsp;as&nbsp;/folder1/folder2/default.html.&nbsp;The&nbsp;slash&nbsp;characters&nbsp;will&nbsp;be&nbsp;encoded&nbsp;and&nbsp;will&nbsp;not&nbsp;be&nbsp;valid&nbsp;if&nbsp;sent&nbsp;as&nbsp;a&nbsp;request&nbsp;to&nbsp;a&nbsp;web&nbsp;server.&nbsp;Use&nbsp;the&nbsp;encodeURI&nbsp;method&nbsp;if&nbsp;the&nbsp;string&nbsp;contains&nbsp;more&nbsp;than&nbsp;a&nbsp;single&nbsp;URI&nbsp;component.<br /><br />鄙人译：encodeURIComponent方法返回一个编码过的URI。如果将encodeURIComponent方法的编码结果传递给encodeURIComponent方法作参数，则能得到原始的未编码的字符串。因为encodeURIComponent方法会编码所有的字符，所以如果待编码的字符串是用来表示一个路径（如/dir1/dir2/index.htm）时，就一定要小心使用了。‘/’符号会被其编码之后，将不再是一个有效的路径标识符，所以不能被web服务器正确地识别。当字符串包含一个单独的URI&nbsp;component(指?后面的请求参数)的时候，请使用此方法。<br /><br />Mozilla&nbsp;Developer&nbsp;Core&nbsp;Javascript&nbsp;Guide中如是说：<br /><br />Encodes&nbsp;a&nbsp;Uniform&nbsp;Resource&nbsp;Identifier&nbsp;(URI)&nbsp;component&nbsp;by&nbsp;replacing&nbsp;each&nbsp;instance&nbsp;of&nbsp;certain&nbsp;characters&nbsp;by&nbsp;one,&nbsp;two,&nbsp;or&nbsp;three&nbsp;escape&nbsp;sequences&nbsp;representing&nbsp;the&nbsp;UTF-8&nbsp;encoding&nbsp;of&nbsp;the&nbsp;character.<br /><br />鄙人译：通过将每个属于特定的字符集合的字符替换为一个、两个或者三个（为什么是“一个、两个或者三个”本人也没有搞懂，望高人赐教）使用UTF-8编码来表示这个字符的escape序列来编码一个URIComponent。<br /><br /><br /><br />有什么区别？何时使用？<br /><br />通过上面的介绍可以看出，MS的文档明显要比Mozilla详细、易懂一些，但是它们表达的都是一个意思。但是escape(),&nbsp;encodeURI()和&nbsp;encodeURIComponent()有什么异同，它们分别适用于那种特定的情况呢？<br /><br />escape方法并不编码字符+。而我们知道，在用户提交的表单字段中，如果有空格，则会被转化为+字符，而服务器解析的时候则会认为+号代表空格。由于这个缺陷，escape方法并不能正确地处理所有的非ASCII字符，你应当尽量避免使用escape方法，取而代之，你最好选择encodeURIComponent()方法。<br /><br />escape()不编码的字符：@*/+<br /><br />相对于使用escape方法，使用encodeURI方法会显得更专业一些。当你需要编码一整个URI的时候，你可以使用此方法，因为URI中的合法字符都不会被编码转换。需要注意到是字符’也是URI中的合法字符，所以也不会被编码转换。<br /><br />encodeURI()&nbsp;不编码的字符：&nbsp;~!@#@{content}*()=:/,;?+'<br /><br />encodeURIComponent方法在编码单个URIComponent（指请求参数）应当是最常用的。需要注意到是字符’也是URI中的合法字符，所以也不会被编码转换。<br /><br />encodeURIComponent()不编码的字符：&nbsp;~!*()'<br />&nbsp;<br />]]>
      </summary>
      <category term="" label="JavaScript/DOM" scheme="http://dev.mo.cn/cat_diary_9.html" />
   </entry>
   <entry>
      <title type="html">AJAX开发简略</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_174.html" />
      <updated>2009-1-2 18:54:40</updated>
      <published>2009-1-2 18:54:40</published>
      <id>http://dev.mo.cn/article_174.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;在使用浏览器浏览网页的时候，当页面刷新很慢的时候，你的浏览器在干什么？你的屏幕内容是什么？是的，你的浏览器在<br />等待刷新，而你的屏幕内容是一片空白，而你在屏幕前苦苦的等待浏览器的响应。开发人员为了克服这种尴尬的局面，不得不<br />在每一个可能需要长时间等待响应的页面上增加一个&nbsp;DIV，告诉用户“系统正在处理您的请求，请稍候……”。&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;现在，有一种越来越流行越热的“老”技术，可以彻底改变这种窘迫的局面。那就是AJAX。如今，随着&nbsp;Gmail、Google-maps的应用和各种浏览器的支持，AJAX正逐渐吸引全世界的眼球。&nbsp;<br /><br /><span style="font-size:5;">一、AJAX定义&nbsp;</span><br /><br />&nbsp;&nbsp;&nbsp;AJAX（Asynchronous&nbsp;JavaScript&nbsp;and&nbsp;XML）其实是多种技术的综合，包括&nbsp;Javascript、XHTML和&nbsp;CSS、DOM、XML&nbsp;和<br />XSTL、XMLHttpRequest。<br />&nbsp;&nbsp;&nbsp;其中：&nbsp;使用&nbsp;XHTML和&nbsp;CSS标准化呈现，使用&nbsp;DOM&nbsp;实现动态显示和交互，使用&nbsp;XML&nbsp;和&nbsp;XSTL进行数据交换与处理，使<br />用&nbsp;XMLHttpRequest&nbsp;对象进行异步数据读取，使用&nbsp;Javascript&nbsp;绑定和处理所有数据。&nbsp;在&nbsp;AJAX&nbsp;提出之前，业界对于上述技术都只是单独的使用，没有综合使用，也是由于之前的技术需求所决定的。随着应用的广泛，AJAX&nbsp;也成为香饽饽了。&nbsp;<br /><br /><span style="font-size:5;">二、现状与需要解决的问题&nbsp;</span><br /><br />&nbsp;&nbsp;传统的&nbsp;Web&nbsp;应用采用同步交互过程，这种情况下，用户首先向&nbsp;HTTP&nbsp;服务器触发一个行为或请求的呼求。反过来，服务器执行某些任务，再向发出请求的用户返回一个&nbsp;HTML页面。这是一种不连贯的用户体验，服务器在处理请求的时候，用户多数<br />时间处于等待的状态，屏幕内容也是一片空白。自从采用超文本作为&nbsp;Web&nbsp;传输和呈现之后，我们都是采用这么一套传输方式。当负载比较小的时候，这并不会体现出有什么不妥。可是当负载比较大，响应时间要很长，1&nbsp;分钟、2&nbsp;分钟……数分钟的<br />时候，这种等待就不可忍受了。严重的，超过响应时间，服务器干脆告诉你页面不可用。另外，某些时候，我只是想改变页面<br />一小部分的数据，那为什么我必须重新加载整个页面呢？！当软件设计越来越讲究人性化的时候，这么糟糕的用户体验简直与<br />这种原则背道而驰。为什么老是要让用户等待服务器取数据呢？至少，我们应该减少用户等待的时间。现在，除了程序设计、<br />编码优化和服务器调优之外，还可以采用&nbsp;AJAX。&nbsp;<br /><br /><span style="font-size:5;">三、为什么使用&nbsp;AJAX&nbsp;</span><br /><br />&nbsp;&nbsp;&nbsp;与传统的&nbsp;Web&nbsp;应用不同，AJAX&nbsp;采用异步交互过程。AJAX&nbsp;在用户与服务器之间引入一个中间媒介，从而消除了网络交互过程中的处理—等待—处理—等待缺点。用户的浏览器在执行任务时即装载了&nbsp;AJAX&nbsp;引擎。AJAX&nbsp;引擎用&nbsp;JavaScript&nbsp;语言编写，<br />通常藏在一个隐藏的框架中。它负责编译用户界面及与服务器之间的交互。AJAX&nbsp;引擎允许用户与应用软件之间的交互过程异步<br />进行，&nbsp;独立于用户与网络服务器间的交流。&nbsp;现在，&nbsp;可以用Javascript调用AJAX引擎来代替产生一个&nbsp;HTTP的用户动作，内存中的数据编辑、页面导航、数据校验这些不需要重新载入整个页面的需求可以交给&nbsp;AJAX&nbsp;来执行。&nbsp;<br /><br />&nbsp;<br />使用&nbsp;AJAX，可以为&nbsp;ISP、开发人员、终端用户带来可见的便捷：&nbsp;<br />&nbsp;&nbsp;1.减轻服务器的负担。AJAX&nbsp;的原则是“按需取数据”&nbsp;，可以最大程度的减少冗余请求，和响应对服务器造成的负担。&nbsp;<br />&nbsp;&nbsp;2.无刷新更新页面，减少用户心理和实际的等待时间。特别的，当要读取大量的数据的时候，不用像&nbsp;Reload&nbsp;那样出现白屏<br />的情况，AJAX&nbsp;使用&nbsp;XMLHTTP&nbsp;对象发送请求并得到服务器响应，在不重新载入整个页面的情况下用&nbsp;Javascript&nbsp;操作&nbsp;DOM&nbsp;最终更新页面。所以在读取数据的过程中，用户所面对的不是白屏，是原来的页面内容（也可以加一个Loading&nbsp;的提示框让用户<br />知道处于读取数据过程）&nbsp;，只有当数据接收完毕之后才更新相应部分的内容。这种更新是瞬间的，用户几乎感觉不到。&nbsp;<br />&nbsp;&nbsp;3.带来更好的用户体验。&nbsp;<br />&nbsp;&nbsp;4.可以把以前一些服务器负担的工作转嫁到客户端，利用客户端闲置的能力来处理，减轻服务器和带宽的负担，节约空间和宽带租用成本。&nbsp;<br />&nbsp;&nbsp;5.可以调用外部数据。&nbsp;<br />&nbsp;&nbsp;6.基于标准化的并被广泛支持的技术，不需要下载插件或者小程序。&nbsp;<br />&nbsp;&nbsp;7.进一步促进页面呈现和数据的分离。&nbsp;<br /><br /><span style="font-size:5;">四、谁在使用&nbsp;AJAX&nbsp;</span><br /><br />&nbsp;&nbsp;&nbsp;在应用&nbsp;AJAX&nbsp;开发上面，&nbsp;Google&nbsp;当仁不让是表率。&nbsp;Orkut、&nbsp;Gmail、&nbsp;Google&nbsp;Groups、&nbsp;Google&nbsp;Maps、Google&nbsp;Suggest&nbsp;<br />都应用了这项技术。Amazon&nbsp;的&nbsp;A9.com&nbsp;搜索引擎也采用了类似的技术。<br />&nbsp;<br />&nbsp;&nbsp;微软也在积极开发更为完善的AJAX应用：&nbsp;它即将推出代号为Atlas的AJAX工具。&nbsp;Atlas的功能超越了&nbsp;AJAX&nbsp;本身，包括整合&nbsp;Visual&nbsp;Studio&nbsp;的调试功能。另外，新的&nbsp;ASP.NET&nbsp;控件将使客户端控件与服务器端代码的捆绑更为简便。Atlas&nbsp;客户脚本框架（Atlas&nbsp;Clent&nbsp;Script&nbsp;Framework）也使与网页及相关项目的交互更为便利。但&nbsp;Visual&nbsp;Studio&nbsp;2005&nbsp;中并不包含此项功能。<br />&nbsp;<br />微软最近宣布&nbsp;Atlas&nbsp;客户脚本框架将包含如下内容（详细资料请访问&nbsp;Atlas&nbsp;计划网站）&nbsp;：&nbsp;<br />*&nbsp;&nbsp;一个可扩展的核心框架，它添加了&nbsp;JavaScript功能：如生命同时期管理、继承管理、多点传送处理器和界面管理。&nbsp;<br />*&nbsp;&nbsp;一个常见功能的基本类库，有丰富的字符串处理、计时器和运行任务。&nbsp;<br />*&nbsp;&nbsp;为&nbsp;HTML附加动态行为的用户界面框架。&nbsp;<br />*&nbsp;&nbsp;一组用来简化服务器连通和网络访问的网络堆栈。&nbsp;<br />*&nbsp;&nbsp;一组丰富的用户界面开发控件，如：自动完成的文本框、动画和拖放。&nbsp;<br />*&nbsp;&nbsp;处理浏览器脚本行为差异的浏览器兼容层面。&nbsp;<br />典型的，微软将&nbsp;AJAX&nbsp;技术应用在&nbsp;MSN&nbsp;Space&nbsp;上面。很多人一直都对&nbsp;MS&nbsp;Space&nbsp;服务感到很奇怪，当提交回复评论以后，浏览器会暂时停顿一下，然后在无刷新的情况下把我提交的评论显示出来。这个就是应用了&nbsp;AJAX&nbsp;的效果。试想，如果添加一个评论就要重新刷新整个页面，那可真费事。&nbsp;<br />目前，&nbsp;AJAX&nbsp;应用最普遍的领域是&nbsp;GIS-Map&nbsp;方面。&nbsp;GIS的区域搜索强调快速响应，&nbsp;AJAX的特点正好符合这种需求。&nbsp;<br /><br /><span style="font-size:5;">五、用&nbsp;AJAX&nbsp;改进你的设计&nbsp;</span><br /><br />AJAX&nbsp;虽然可以实现无刷新更新页面内容，但是也不是什么地方都可以用，主要应用在交互较多、频繁读数据、数据分类良好<br />的&nbsp;Web&nbsp;应用中。现在，让我们举两个例子，看看如何用&nbsp;AJAX&nbsp;改进你的设计。&nbsp;<br /><br />例子1：数据校验<br />&nbsp;<br />&nbsp;&nbsp;在输入&nbsp;form&nbsp;表单内容的时候，我们通常需要确保数据的唯一性。因此，常常在页面上提供“唯一性校验”按钮，让用户点<br />击，打开一个校验小窗口；或者等&nbsp;form&nbsp;提交到服务器端，由服务器判断后在返回相应的校验信息。前者，window.open&nbsp;操作本来就是比较耗费资源的，通常由&nbsp;window.&nbsp;showModalDialog&nbsp;代替，即使这样也要弹出一个对话框；后者，需要把整个页面<br />提交到服务器并由服务器判断校验，这个过程不仅时间长而且加重了服务器负担。而使用&nbsp;AJAX，这个校验请求可以由&nbsp;<br />XMLHttpRequest&nbsp;对象发出，整个过程不需要弹出新窗口，也不需要将整个页面提交到服务器，快速又不加重服务器负担。<br />&nbsp;<br />例子2：按需取数据—级联菜单&nbsp;<br /><br />&nbsp;&nbsp;以前，为了避免每次对菜单的操作引起的重载页面，不采用每次调用后台的方式，而是一次性将级联菜单的所有数据全部读<br />取出来并写入数组，然后根据用户的操作用&nbsp;JavaScript来控制它的子集项目的呈现，这样虽然解决了操作响应速度、不重载页<br />面以及避免向服务器频繁发送请求的问题，但是如果用户不对菜单进行操作或只对菜单中的一部分进行操作的话，那读取的数<br />据中的一部分就会成为冗余数据而浪费用户的资源，特别是在菜单结构复杂、数据量大的情况下（比如菜单有很多级、每一级<br />菜又有上百个项目），这种弊端就更为突出。&nbsp;&nbsp;<br />&nbsp;&nbsp;现在应用&nbsp;AJAX，在初始化页面时我们只读出它的第一级的所有数据并显示，在用户操作一级菜单其中一项时，会通过&nbsp;Ajax<br />向后台请求当前一级项目所属的二级子菜单的所有数据，如果再继续请求已经呈现的二级菜单中的一项时，再向后面请求所操作二级菜单项对应的所有三级菜单的所有数据，以此类推……这样，用什么就取什么、用多少就取多少，就不会有数据的冗余<br />和浪费，减少了数据下载总量，而且更新页面时不用重载全部内容，只更新需要更新的那部分即可，相对于后台处理并重载的方式缩短了用户等待时间，也把对资源的浪费降到最低。&nbsp;<br /><br />例子3：读取外部数据&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;AJAX&nbsp;可以调用外部数据，因此，可以对一些开发的数据比如&nbsp;XML&nbsp;文档、RSS&nbsp;文档进行二次加工，实现数据整合或者开发<br />应用程序。&nbsp;<br /><br /><span style="font-size:5;">六、AJAX的缺陷&nbsp;</span><br /><br />AJAX&nbsp;不是完美的技术。使用&nbsp;AJAX，它的一些缺陷不得不权衡一下：<br />&nbsp;<br />&nbsp;&nbsp;1.AJAX&nbsp;大量使用了&nbsp;Javascript&nbsp;和&nbsp;AJAX&nbsp;引擎，而这个取决于浏览器的支持。&nbsp;IE5.0&nbsp;及以上、Mozilla1.0、NetScape7&nbsp;及以<br />上版本才支持，Mozilla&nbsp;虽然也支持&nbsp;AJAX，但是提供XMLHttpRequest&nbsp;的方式不一样。所以，使用&nbsp;AJAX&nbsp;的程序必须测试针对各个浏览器的兼容性。&nbsp;<br />&nbsp;&nbsp;2.AJAX&nbsp;更新页面内容的时候并没有刷新整个页面，因此，网页的后退功能是失效的；有的用户还经常搞不清楚现在的数据是旧的还是已经更新过的。这个就需要在明显位置提醒用户“数据已更新”。&nbsp;<br />&nbsp;&nbsp;3.对流媒体的支持没有&nbsp;FLASH、Java&nbsp;Applet&nbsp;好。&nbsp;<br />&nbsp;&nbsp;4.一些手持设备（如手机、PDA等）现在还不能很好的支持&nbsp;Ajax。<br />&nbsp;<br /><div class="quote">&nbsp;&nbsp;本文非发表人原创,原作者信息如下<br />作者&nbsp;&nbsp;网名&nbsp;&nbsp;联络&nbsp;<br />柯自聪&nbsp;&nbsp;eamoi&nbsp;&nbsp;&nbsp;educhina&nbsp;&nbsp;eamoi@163.com（技术）&nbsp;zcke0728@hotmail.com（版权）</div>]]>
      </summary>
      <category term="" label="AJAX" scheme="http://dev.mo.cn/cat_diary_2.html" />
   </entry>
   <entry>
      <title type="html">如何上传一个文件到Access数据库</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_173.html" />
      <updated>2009-1-2 8:32:26</updated>
      <published>2009-1-2 8:32:26</published>
      <id>http://dev.mo.cn/article_173.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;文件上传是一个站点不可或缺的功能，为了方便自己的站点上传文件就自己开发了个无组件上传了，功能还不错--支持单文件、多文件、文件表单混合上传，有兴趣的可以到<a href="http://dev.mo.cn/mycodes.asp" target="new"><span style="color:Red;">这里</span></a>下载看看！<br />&nbsp;&nbsp;&nbsp;不多啰嗦了,直奔主体吧。本例子是以我最新发布的上传类为基础的，版本为v8.12.20。<br />&nbsp;&nbsp;&nbsp;首先新建一个access数据库bytes.mdb，添加一个表img，再给表添加3个字段--ID(自动编号)、Title(文本)、Image(OLE&nbsp;对象)，括号内为数据类型<br />&nbsp;&nbsp;&nbsp;一、上传界面<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&nbsp;&nbsp;&nbsp;&nbsp;&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;An-Upload无组件上传类示例&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;form&nbsp;name="upload"&nbsp;method="post"&nbsp;action="AddToDB.asp"&nbsp;enctype="multipart/form-data"&gt;<br />请选择一个图象文件:&lt;br&nbsp;/&gt;<br />文本&nbsp;:&nbsp;&lt;input&nbsp;type="text"&nbsp;name="input1"&nbsp;/&gt;&nbsp;&lt;br&nbsp;/&gt;<br />文件&nbsp;:&nbsp;&lt;input&nbsp;type="file"&nbsp;name="file1"&nbsp;/&gt;&nbsp;&lt;br&nbsp;/&gt;<br />&lt;input&nbsp;type="submit"&nbsp;value="开始上传"&nbsp;/&gt;<br />&lt;/form&gt;&lt;/body&gt;&lt;/html&gt;</div></div><br /><br />&nbsp;&nbsp;&nbsp;<span style="color:Red;">&nbsp;注意:Form的method属性必须是post，并且必须设置enctype="multipart/form-data"属性(普通提交是没有这个属性的)！！</span><br />&nbsp;&nbsp;&nbsp;&nbsp;这里我们提交到AddToDB.asp,文本域和文件域的名字分别是input1和file1，保存这些代码到<span style="color:Red;">upload.asp</span>文件！<br /><br />二、下面就是AddToDB.asp文件了，代码如下<br />&nbsp;<div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&nbsp;&lt;!--#include&nbsp;file="upload_class.asp"--&gt;<br />&lt;!--#include&nbsp;file="conn.asp"--&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;An-Upload无组件上传类&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;%<br />&nbsp;Dim&nbsp;Upload,successful<br /><br />&nbsp;set&nbsp;Upload=new&nbsp;AnUpload<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'创建类实例<br />&nbsp;Upload.SingleSize=200*1024<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'设置单个文件最大上传限制,按字节计；默认为不限制<br />&nbsp;Upload.MaxSize=200*1024<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'设置最大上传限制,按字节计；默认为不限制<br />&nbsp;Upload.Exe="jpg|bmp|gif"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'设置合法扩展名,以|分割,忽略大小写<br />&nbsp;Upload.GetData()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'获取并保存数据,必须调用本方法<br /><br />&nbsp;if&nbsp;Upload.Err&gt;0&nbsp;then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'判断错误号,如果myupload.Err&lt;=0表示正常<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;Upload.Description&nbsp;&nbsp;&nbsp;&nbsp;'如果出现错误,获取错误描述<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.end<br />&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input1=Upload.Forms("input1")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'获取表单input1的值<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Upload.forms("file1")&lt;&gt;""&nbsp;then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'这里判断你file1是否选择了文件<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;tempCls=Upload.files("file1")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'获取保存文件信息的类<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tempbytes=tempCls.getbytes()&nbsp;'保存二进制数据到变量(调用getbytes方法)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;tempCls=nothing<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;if<br />&nbsp;end&nbsp;if<br />&nbsp;set&nbsp;Upload=nothing&nbsp;&nbsp;&nbsp;&nbsp;'销毁类实例<br /><br />&nbsp;set&nbsp;rs=server.createobject("adodb.recordset")&nbsp;&nbsp;'创建一个数据集对象<br />&nbsp;rs.open&nbsp;"select&nbsp;*&nbsp;from&nbsp;[img]",conn,1,3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'打开数据表,注意后面的参数1,3<br />&nbsp;rs.addnew()&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'添加一个新行(数据集游标会自动移动到本行)<br />&nbsp;rs("title")=input1&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;'添加数据input1到字段title<br />&nbsp;rs("image").AppendChunk&nbsp;Tempbytes&nbsp;&nbsp;&nbsp;'添加二进制数据到数据库的Image字段<br />&nbsp;rs.update&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'更新数据集到数据库<br />&nbsp;rs.close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'关闭数据集<br />&nbsp;set&nbsp;rs=nothing&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'销毁<br />&nbsp;conn.close&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'关闭数据库连接<br />&nbsp;set&nbsp;conn=nothing&nbsp;&nbsp;'销毁<br />&nbsp;response.write&nbsp;"上传到数据库成功"<br />%&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</div></div><br />这样上传程序就写好了,注意添加到数据库的时候要用<span style="color:Red;">AppendChunk</span>方法;<span style="color:Red;">开头不要忘了把上传类和数据库连接文件包含进来</span><br />&nbsp;&nbsp;&nbsp;在浏览器访问upload.asp页面,添加文本、选择一个图片(小于200KB,因为我们在上面作了上传限制)，开始上传！<br />&nbsp;&nbsp;&nbsp;到这里，如果顺利的话，文件已经成功保存到数据库了！<br /><br />三、保存到数据库后怎么读出来呢？<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;再看下面这段代码(保存到ReadFromDB.asp)<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;!--#include&nbsp;file="conn.asp"--&gt;<br />&lt;%<br />id=request.querystring("id")<br />sql="select&nbsp;*&nbsp;from&nbsp;img&nbsp;where&nbsp;[id]="&nbsp;&&nbsp;id&nbsp;'通过ID来获取文件数据<br />set&nbsp;rs=server.createobject("adodb.recordset")<br />rs.open&nbsp;sql,conn,1,1<br />response.contenttype="image/jpeg"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'设置页面响应类型<br />response.clear<br />response.binarywrite&nbsp;rs("image")<br />response.flush<br />response.end<br />rs.close<br />set&nbsp;rs=nothing<br />conn.close<br />set&nbsp;conn=nothing<br />%&gt;</div></div><br /><br />&nbsp;先别着急运行这段代码,继续看下面的代码(index.asp)<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;!--#include&nbsp;file="conn.asp"--&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;An-Upload无组件上传类&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;%<br />sql="select&nbsp;*&nbsp;from&nbsp;img&nbsp;order&nbsp;by&nbsp;[id]&nbsp;desc"<br />set&nbsp;rs=server.createobject("adodb.recordset")<br />rs.open&nbsp;sql,conn,1,1<br />if&nbsp;rs.eof&nbsp;and&nbsp;rs.bof&nbsp;then<br />&nbsp; &nbsp; &nbsp; &nbsp; response.write&nbsp;"没有任何数据!&lt;a&nbsp;href=""upload.asp""&gt;现在上传&lt;/a&gt;"<br />else<br />&nbsp; &nbsp; &nbsp; &nbsp; i=0<br />&nbsp; &nbsp; &nbsp; &nbsp; response.write&nbsp;"&lt;h2&gt;上传的图片列表&lt;/h2&gt;&nbsp;&lt;a&nbsp;href=""upload.asp""&gt;现在上传&lt;/a&gt;&lt;hr&nbsp;/&gt;"<br />&nbsp; &nbsp; &nbsp; &nbsp; do&nbsp;while&nbsp;not&nbsp;rs.eof<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i=i+1<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; response.write&nbsp;i&nbsp;&&nbsp;"."&nbsp;&&nbsp;rs("Title")&nbsp;&&nbsp;"&lt;br&nbsp;/&gt;"&nbsp;&&nbsp;vbcrlf<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; response.write&nbsp;"&lt;img&nbsp;onload=""if(this.width&gt;300){this.width=300;}""&nbsp;"<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; response.write&nbsp;"onclick=""window.open('ReadFromDB.asp?id="&rs("id")&"');""&nbsp;"<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; response.write&nbsp;"src=""ReadFromDB.asp?id="&rs("id")&"""&nbsp;alt="""&rs("title")&"""&nbsp;/&gt;"&nbsp;&&nbsp;vbcrlf<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; response.write&nbsp;"&lt;br&nbsp;/&gt;&lt;br&nbsp;/&gt;"&vbcrlf<br />&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rs.movenext<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loop<br />end&nbsp;if<br />rs.close<br />set&nbsp;rs=nothing<br />conn.close<br />set&nbsp;conn=nothing<br />%&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br /></div></div><br /><br />四、好了到此为止你文件夹里应该有以下文件了<br />bytes.mdb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数据库<br />upload.asp&nbsp;&nbsp;&nbsp;上传界面<br />AddToDB.asp&nbsp;&nbsp;&nbsp;添加文件到数据库的程序<br />ReadFromDB.asp&nbsp;&nbsp;从数据库读取文件的程序<br />index.asp&nbsp;&nbsp;&nbsp;显示数据库记录的程序<br /><br />忘了,还有数据库连接文件conn.asp<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;%<br />dim&nbsp;conn,connstr,sql,rs<br />Connstr="provider=microsoft.jet.oledb.4.0;data&nbsp;source="&nbsp;&&nbsp;server.mappath("bytes.mdb")<br />Set&nbsp;Conn=Server.CreateObject("ADODB.Connection")&nbsp;<br />conn.Open&nbsp;connstr<br />If&nbsp;Err&nbsp;Then<br />err.Clear<br />Set&nbsp;Conn&nbsp;=&nbsp;Nothing<br />Response.Write&nbsp;"服务器出现问题，如有任何问题请联系管理员。"<br />Response.End<br />End&nbsp;If<br />%&gt;<br /></div></div><br /><br />还有关键的文件上传类---Upload_class.asp,可以在我的站点上下载到<a href="http://dev.mo.cn/mycodes.asp" target="new">http://dev.mo.cn/mycodes.asp</a><br /><br />&nbsp;&nbsp;&nbsp;到这里，一个简单的保存文件到数据库并显示的程序就写完了；&nbsp;<br />&nbsp;&nbsp;在浏览器运行下index.asp,是不是看到在第二步上传的图片了，如果没有的话请仔细查看前面的步骤来修改代码！<br /><br />&nbsp;&nbsp;&nbsp;总体来说,这个上传类还是相对比较完美的,操作比较灵活,在提取form表单的时候支持相同name属性的表单名(数据以,分割),保存服务器可以随意选择保存方式--既可以以原名保存，也可以用程序自动生成的文件名保存(默认);同时，准确判断后缀，增强了上传的安全性。属性设置也比较灵活<br /><br />&nbsp;&nbsp;&nbsp;好了,就写这些了，凌晨2点该休息了！有任何问题可以联系我QQ4-1-7-8-3-3-2-7-2]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">一个简单的JavaScript对象编程示例</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_166.html" />
      <updated>2008-12-30 21:15:56</updated>
      <published>2008-12-30 21:15:56</published>
      <id>http://dev.mo.cn/article_166.html</id>
      <summary type="html">
      <![CDATA[<div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;!DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN"&nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;<br />&lt;html&nbsp;xmlns="http://www.w3.org/1999/xhtml"&nbsp;&gt;<br />&lt;head&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;一个简单的JavaScript对象编程示例&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;script&nbsp;type&nbsp;="text/javascript"&nbsp;&gt;<br /><br />function&nbsp;pig(Speed){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.runSpeed=Speed;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.Run=function(runTime){&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;runTime&nbsp;*&nbsp;this.runSpeed;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br />}<br /><br />var&nbsp;aPig=new&nbsp;pig("10");<br />document.write("我是一头小猪,我的速度是"&nbsp;+&nbsp;aPig.runSpeed&nbsp;+&nbsp;"公里/小时;我要开始跑步了....");<br />var&nbsp;runOver=aPig.Run(5);<br />document.write("跑了<span style="color:Red;">5</span>小时,终于跑完了;我跑了"&nbsp;+&nbsp;runOver&nbsp;&nbsp;+&nbsp;"公里!");<br />&lt;/script&gt;<br /><br />&lt;/body&gt;<br />&lt;/html&gt;</div></div><br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;script&nbsp;type="text/javascript"&gt;<br />var&nbsp;student={<br />&nbsp;&nbsp;&nbsp;&nbsp;name:"anlige",<br />&nbsp;&nbsp;&nbsp;&nbsp;course:{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count:2,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list:{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;english:80,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chinese:90<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;},<br />&nbsp;&nbsp;&nbsp;&nbsp;grade:function(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(student.course.list.english&nbsp;+&nbsp;student.course.list.chinese);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />};<br />student.grade();<br />&lt;/script&gt;</div></div>]]>
      </summary>
      <category term="" label="JavaScript/DOM" scheme="http://dev.mo.cn/cat_diary_9.html" />
   </entry>
   <entry>
      <title type="html">小夫妻的入冬交谈</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_165.html" />
      <updated>2008-12-30 19:59:39</updated>
      <published>2008-12-30 19:59:39</published>
      <id>http://dev.mo.cn/article_165.html</id>
      <summary type="html">
      <![CDATA[老公昨天回家,传达了可靠的小道消息，卖命多年的公司，将面临比例不小的裁员。想起最近一段每当朋友向我们诉苦，将被或正被裁员时，我们总是温和相劝，人道鼓励。而今，寒流也袭击了我们小家。&nbsp;<br />入夜，为老公斟满一杯热水，递到跟前，坐到老公腿上，听他长叹一声：年关不好过啊，撅着屁股干活的IT民工今年都不好过了。&nbsp;<br />一场省钱计划在交谈中蔓延开来---&nbsp;<br /><br />老公:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(抬头一看)这光一个房间吊灯，就得用9个灯泡?!&nbsp;<br />格格:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;拧8个剩一个!&nbsp;<br /><br />老公:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;让保姆最近肉少买，菜多买&nbsp;<br />格格:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;直接开了，我来做，你不嫌弃的话&nbsp;<br />老公怜惜的看看我，还是老公做吧！&nbsp;<br />"好"我立刻答应&nbsp;<br /><br />老公:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;你不是爱吃沙拉吗，年底前玩命吃吧！&nbsp;<br />格格:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以后呢?&nbsp;<br />老公:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;明年就戒了吧！&nbsp;<br /><br />老公:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;饮用水是不是快没了？咱还叫么?&nbsp;<br />格格:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;喝自来水吧！&nbsp;<br />老公:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;电视空调DVD机顶盒平时不用，插头全拔了吧！&nbsp;<br /><br />格格:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;老公，你怕挤公交吗?&nbsp;<br />老公:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不怕！&nbsp;<br />格格:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;把车卖了吧！&nbsp;<br /><br />格格:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;老公，你讨厌吃泡面吗?&nbsp;<br />老公:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;讨厌！&nbsp;<br />格格:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;重新喜欢上吧！&nbsp;<br /><br />格格:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;还好没买雪地靴，明天把去年的靴子翻出来刷一刷凑合穿！&nbsp;<br />老公:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(心疼地)这小可怜儿哦，好!&nbsp;<br /><br />格格:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;老公，你嫌弃我变老长皱纹么?&nbsp;<br />老公:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;你不老，没有皱纹!&nbsp;<br />格格:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;要是有，你嫌弃么?&nbsp;<br />老公:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当然不会！&nbsp;<br />格格:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;恩，眼霜就再不买了！&nbsp;<br /><br />老公:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;宝贝儿还想减肥么?&nbsp;<br />格格:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;想呢！&nbsp;<br />老公:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;好，以后菜里油会很少！&nbsp;<br /><br />格格:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;老公，你还在乎精神食粮么?&nbsp;<br />老公:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不在乎了！&nbsp;<br />格格:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;把你的书都卖了吧，包括童年漫画收藏册！&nbsp;<br />老公:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当废纸么?&nbsp;<br />格格:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;放淘宝!傻子!&nbsp;<br /><br />老公:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以后手纸不再用三层加厚带弹性的了&nbsp;<br />格格:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;还用什么手纸！我让我姐把学生一年内写的检讨书打包寄过来！&nbsp;<br /><br />老公:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;明儿我上街寻摸寻摸大前门多少钱一条&nbsp;<br />格格:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我晚上帮你卷烟丝攒烟头吧！&nbsp;<br /><br />老公:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;咱家狗狗长得还行，要不卖了吧？&nbsp;<br />格格:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;卖不了多少钱的，实在撑不下去的时候，能管一周的伙食！&nbsp;<br /><br />老公:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;冰箱卖了吧，东西放阳台！&nbsp;<br />格格:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;灰尘大，吃病了还得花药钱！&nbsp;<br /><br />老公:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;咱有钱的亲戚还剩多少?&nbsp;<br />格格:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;没几个了，怎?&nbsp;<br />老公:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;电话都整理下，保不齐得挨家借去！&nbsp;<br /><br />格格:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;老公，老公，你喜欢当摇滚歌星么?&nbsp;<br />老公:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;咋?&nbsp;<br />格格:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;头发就别再剃了！&nbsp;<br /><br />老公懊恼的拍了拍腿:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;靠，经济危机之前我应该再买个新的刮胡刀！&nbsp;<br />格格:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;那样就可以再撑个5、6年了....&nbsp;<br /><br />格格:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;老公，人是不是一个肾就够用了?&nbsp;<br />老公:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;恩，够用了！&nbsp;<br />格格:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;另一个就卖了吧！&nbsp;<br /><br />格格:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;老公，老公，你在乎我的贞洁么?&nbsp;<br />老公:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当然在乎啊!!!!&nbsp;<br />格格:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;哦，那算了...&nbsp;&nbsp;<br /><br />]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">不用额外组件的ASP在线打包程序</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_164.html" />
      <updated>2008-12-25 10:46:02</updated>
      <published>2008-12-25 10:46:02</published>
      <id>http://dev.mo.cn/article_164.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;现在一般的在线打包都需要<span style="color:Red;">winrar</span>程序的支持,下面介绍一种不用<span style="color:Red;">winrar</span>支持的在线打包程序,源代码好像是个老外写的，有个缺陷就是打包的时候如果文件名是中文，就会出现乱码,庆幸的是文件的内容不会产生乱码,并且可以用winrar解压.<br />&nbsp;&nbsp;下面是具体的程序,也可以到这里来下载:<a href="http://dev.mo.cn/upfiles/zip.rar" target="new">http://dev.mo.cn/upfiles/zip.rar</a><br /><br />&nbsp;&nbsp;index.asp文件<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&nbsp;&nbsp;&lt;%&nbsp;Option&nbsp;Explicit&nbsp;%&gt;<br />&lt;!--#include&nbsp;file="asptar.asp"--&gt;<br />&lt;%<br />Response.charset="gb2312"<br />Response.Buffer&nbsp;=&nbsp;True<br />Response.Clear<br />Dim&nbsp;Co,Temp,T,x,i,fsoBrowse,theFolder,TheSubFolders,FilePath,s,PH,objTar<br />Co=0<br />PH="../zip"&nbsp;'文件路径&nbsp;'压缩父目录下zip目录的所有文件<br />&nbsp;&nbsp;&nbsp;Set&nbsp;objTar&nbsp;=&nbsp;New&nbsp;Tarball<br />&nbsp;&nbsp;&nbsp;objTar.TarFilename="打包.rar"&nbsp;&nbsp;'打包的名称<br />&nbsp;&nbsp;&nbsp;objTar.Path=PH<br />&nbsp;&nbsp;&nbsp;set&nbsp;fsoBrowse=CreateObject("Scripting.FileSystemObject")<br />&nbsp;&nbsp;&nbsp;Set&nbsp;theFolder=fsoBrowse.GetFolder(Server.Mappath(PH))<br />&nbsp;&nbsp;&nbsp;Set&nbsp;theSubFolders=theFolder.SubFolders<br />&nbsp;&nbsp;&nbsp;GetFileList&nbsp;theFolder,""<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;If&nbsp;Co&lt;1&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.Write&nbsp;"暂时没有可更新的文件下载"<br />&nbsp;&nbsp;&nbsp;'objTar.AddMemoryFile&nbsp;"Sorry.txt","Not&nbsp;File!"<br />&nbsp;&nbsp;&nbsp;Else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Temp=Left(Temp,Len(Temp)-1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FilePath=Split(Temp,"|")<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;s=0&nbsp;To&nbsp;Ubound(FilePath)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objTar.AddFile&nbsp;Server.Mappath(PH&nbsp;&&nbsp;"/"&nbsp;&&nbsp;FilePath(s))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next<br />&nbsp;&nbsp;&nbsp;If&nbsp;Response.IsClientConnected&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objTar.WriteTar<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.Flush<br />&nbsp;&nbsp;&nbsp;End&nbsp;If<br />&nbsp;&nbsp;&nbsp;End&nbsp;If<br />&nbsp;&nbsp;&nbsp;Set&nbsp;ObjTar&nbsp;=&nbsp;Nothing<br />&nbsp;&nbsp;&nbsp;Set&nbsp;fsoBrowse=&nbsp;Nothing<br />&nbsp;&nbsp;&nbsp;Set&nbsp;theFolder&nbsp;=&nbsp;Nothing<br />&nbsp;&nbsp;&nbsp;Set&nbsp;theSubFolders&nbsp;=&nbsp;Nothing<br />Sub&nbsp;GetFileList(Folderobject,path)<br />Dim&nbsp;y,m<br />For&nbsp;Each&nbsp;y&nbsp;in&nbsp;Folderobject.Files<br />If&nbsp;Path&nbsp;&lt;&gt;""&nbsp;Then<br />Temp=&nbsp;Temp&nbsp;&&nbsp;&nbsp;path&nbsp;&&nbsp;y.Name&"|"<br />Else<br />Temp=&nbsp;Temp&nbsp;&&nbsp;y.Name&"|"<br />End&nbsp;If<br />&nbsp;&nbsp;&nbsp;&nbsp;Co=Co+1<br />Next<br />Dim&nbsp;NewPath<br />For&nbsp;Each&nbsp;m&nbsp;In&nbsp;Folderobject.SubFolders<br />If&nbsp;path=""&nbsp;Then<br />NewPath=M.name&nbsp;&"/"<br />Else<br />NewPath=path&nbsp;&&nbsp;M.name&nbsp;&"/"<br />End&nbsp;If<br />GetFileList&nbsp;m,NewPath<br />Next<br />End&nbsp;Sub<br />%&gt;</div></div><br /><br />asptar.asp文件<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;%<br /><br />Class&nbsp;Tarball<br />Public&nbsp;TarFilename&nbsp;&nbsp;&nbsp;'&nbsp;Resultant&nbsp;tarball&nbsp;filename<br /><br />Public&nbsp;UserID&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;UNIX&nbsp;user&nbsp;ID<br />Public&nbsp;UserName&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;UNIX&nbsp;user&nbsp;name<br />Public&nbsp;GroupID&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;UNIX&nbsp;group&nbsp;ID<br />Public&nbsp;GroupName&nbsp;&nbsp;&nbsp;'&nbsp;UNIX&nbsp;group&nbsp;name<br /><br />Public&nbsp;Permissions&nbsp;&nbsp;&nbsp;'&nbsp;UNIX&nbsp;permissions<br /><br />Public&nbsp;BlockSize&nbsp;&nbsp;&nbsp;'&nbsp;Block&nbsp;byte&nbsp;size&nbsp;for&nbsp;the&nbsp;tarball&nbsp;(default=512)<br /><br />Public&nbsp;IgnorePaths&nbsp;&nbsp;&nbsp;'&nbsp;Ignore&nbsp;any&nbsp;supplied&nbsp;paths&nbsp;for&nbsp;the&nbsp;tarball&nbsp;output<br />Public&nbsp;BasePath&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;Insert&nbsp;a&nbsp;base&nbsp;path&nbsp;with&nbsp;each&nbsp;file<br />Public&nbsp;Path<br /><br />'&nbsp;Storage&nbsp;for&nbsp;file&nbsp;information<br />Private&nbsp;objFiles,TmpFileName<br />Private&nbsp;objMemoryFiles<br /><br />'&nbsp;File&nbsp;list&nbsp;management&nbsp;subs,&nbsp;very&nbsp;basic&nbsp;stuff<br />Public&nbsp;Sub&nbsp;AddFile(sFilename)<br />&nbsp;&nbsp;objFiles.Add&nbsp;sFilename,sFilename<br />End&nbsp;Sub<br /><br />Public&nbsp;Sub&nbsp;RemoveFile(sFilename)<br />&nbsp;&nbsp;objFiles.Remove&nbsp;sFilename<br />End&nbsp;Sub<br /><br />Public&nbsp;Sub&nbsp;AddMemoryFile(sFilename,sContents)<br />&nbsp;&nbsp;objMemoryFiles.Add&nbsp;sFilename,sContents<br />End&nbsp;Sub<br /><br />Public&nbsp;Sub&nbsp;RemoveMemoryFile(sFilename)<br />&nbsp;&nbsp;objMemoryFiles.Remove&nbsp;sFilename<br />End&nbsp;Sub<br /><br />Public&nbsp;Sub&nbsp;WriteTar()<br />&nbsp;&nbsp;Dim&nbsp;objStream,&nbsp;objInStream,&nbsp;lTemp,&nbsp;aFiles<br />&nbsp;&nbsp;Set&nbsp;objStream&nbsp;=&nbsp;Server.CreateObject("ADODB.Stream")&nbsp;'&nbsp;The&nbsp;main&nbsp;stream<br />&nbsp;&nbsp;Set&nbsp;objInStream&nbsp;=&nbsp;Server.CreateObject("ADODB.Stream")&nbsp;'&nbsp;The&nbsp;input&nbsp;stream&nbsp;for&nbsp;data<br />&nbsp;&nbsp;objStream.Type&nbsp;=&nbsp;2<br />&nbsp;&nbsp;objStream.Charset&nbsp;=&nbsp;"x-ansi"&nbsp;'&nbsp;Good&nbsp;old&nbsp;extended&nbsp;ASCII<br />&nbsp;&nbsp;objStream.Open<br /><br />&nbsp;&nbsp;objInStream.Type&nbsp;=&nbsp;2<br />&nbsp;&nbsp;objInStream.Charset&nbsp;=&nbsp;"x-ansi"<br /><br />&nbsp;&nbsp;aFiles&nbsp;=&nbsp;objFiles.Items<br />&nbsp;&nbsp;For&nbsp;lTemp&nbsp;=&nbsp;0&nbsp;to&nbsp;UBound(aFiles)<br />&nbsp;&nbsp;&nbsp;&nbsp;objInStream.Open<br />&nbsp;&nbsp;&nbsp;&nbsp;objInStream.LoadFromFile&nbsp;aFiles(lTemp)<br />&nbsp;&nbsp;&nbsp;&nbsp;objInStream.Position&nbsp;=&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;TmpFileName&nbsp;=replace(aFiles(lTemp),Server.Mappath(Path)&"\","")<br />&nbsp;&nbsp;&nbsp;&nbsp;ExportFile&nbsp;TmpFileName,objStream,objInStream<br />&nbsp;&nbsp;&nbsp;&nbsp;objInStream.Close<br />&nbsp;&nbsp;Next<br />&nbsp;&nbsp;aFiles&nbsp;=&nbsp;objMemoryFiles.Keys<br />&nbsp;&nbsp;For&nbsp;lTemp&nbsp;=&nbsp;0&nbsp;to&nbsp;UBound(aFiles)<br />&nbsp;&nbsp;&nbsp;&nbsp;objInStream.Open<br />&nbsp;&nbsp;&nbsp;&nbsp;objInStream.WriteText&nbsp;objMemoryFiles.Item(aFiles(lTemp))<br />&nbsp;&nbsp;&nbsp;&nbsp;objInStream.Position&nbsp;=&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;ExportFile&nbsp;aFiles(lTemp),objStream,objInStream<br />&nbsp;&nbsp;&nbsp;&nbsp;objInStream.Close<br />&nbsp;&nbsp;Next<br /><br />&nbsp;&nbsp;objStream.WriteText&nbsp;String(BlockSize,Chr(0))<br />&nbsp;&nbsp;objStream.Position&nbsp;=&nbsp;0<br />&nbsp;&nbsp;objStream.Type&nbsp;=&nbsp;1<br />&nbsp;&nbsp;objStream.savetofile&nbsp;Server.Mappath(Path)&nbsp;&&nbsp;"\"&nbsp;&&nbsp;TarFilename,2<br />&nbsp;&nbsp;objStream.Close<br />&nbsp;&nbsp;Set&nbsp;objStream&nbsp;=&nbsp;Nothing<br />&nbsp;&nbsp;Set&nbsp;objInStream&nbsp;=&nbsp;Nothing<br />End&nbsp;Sub<br /><br />'&nbsp;Build&nbsp;a&nbsp;header&nbsp;for&nbsp;each&nbsp;file&nbsp;and&nbsp;send&nbsp;the&nbsp;file&nbsp;contents<br />Private&nbsp;Sub&nbsp;ExportFile(sFilename,objOutStream,objInStream)<br />&nbsp;&nbsp;Dim&nbsp;lStart,&nbsp;lSum,&nbsp;lTemp<br />&nbsp;&nbsp;lStart&nbsp;=&nbsp;objOutStream.Position&nbsp;'&nbsp;Record&nbsp;where&nbsp;we&nbsp;are&nbsp;up&nbsp;to<br />&nbsp;&nbsp;If&nbsp;IgnorePaths&nbsp;Then<br />&nbsp;&nbsp;&nbsp;'&nbsp;We&nbsp;ignore&nbsp;any&nbsp;paths&nbsp;prefixed&nbsp;to&nbsp;our&nbsp;filenames<br />&nbsp;&nbsp;&nbsp;lTemp&nbsp;=&nbsp;InStrRev(sFilename,"\")<br />&nbsp;&nbsp;&nbsp;if&nbsp;lTemp&nbsp;&lt;&gt;&nbsp;0&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;sFilename&nbsp;=&nbsp;Right(sFilename,Len(sFilename)&nbsp;-&nbsp;lTemp)<br />&nbsp;&nbsp;&nbsp;end&nbsp;if<br />&nbsp;&nbsp;&nbsp;sFilename&nbsp;=&nbsp;BasePath&nbsp;&&nbsp;sFilename<br />&nbsp;&nbsp;End&nbsp;If<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;'&nbsp;Build&nbsp;the&nbsp;header,&nbsp;everything&nbsp;is&nbsp;ASCII&nbsp;in&nbsp;octal&nbsp;except&nbsp;for&nbsp;the&nbsp;data<br />&nbsp;&nbsp;'objOutStream.charset="gb2312"<br />&nbsp;&nbsp;objOutStream.WriteText&nbsp;Left(sFilename&nbsp;&&nbsp;String(100,Chr(0)),100)<br />&nbsp;&nbsp;'objOutStream.charset="x-ansi"<br />&nbsp;&nbsp;objOutStream.WriteText&nbsp;"100"&nbsp;&&nbsp;Right("000"&nbsp;&&nbsp;Oct(Permissions),3)&nbsp;&&nbsp;"&nbsp;"&nbsp;&&nbsp;Chr(0)&nbsp;'File&nbsp;mode<br />&nbsp;&nbsp;objOutStream.WriteText&nbsp;Right(String(6,"&nbsp;")&nbsp;&&nbsp;CStr(UserID),6)&nbsp;&&nbsp;"&nbsp;"&nbsp;&&nbsp;Chr(0)&nbsp;'uid<br />&nbsp;&nbsp;objOutStream.WriteText&nbsp;Right(String(6,"&nbsp;")&nbsp;&&nbsp;CStr(GroupID),6)&nbsp;&&nbsp;"&nbsp;"&nbsp;&&nbsp;Chr(0)&nbsp;'gid<br />&nbsp;&nbsp;objOutStream.WriteText&nbsp;Right(String(11,"0")&nbsp;&&nbsp;Oct(objInStream.Size),11)&nbsp;&&nbsp;Chr(0)&nbsp;'size<br />&nbsp;&nbsp;objOutStream.WriteText&nbsp;Right(String(11,"0")&nbsp;&&nbsp;Oct(dateDiff("s","1/1/1970&nbsp;10:00",now())),11)&nbsp;&&nbsp;Chr(0)&nbsp;'mtime&nbsp;(Number&nbsp;of&nbsp;seconds&nbsp;since&nbsp;10am&nbsp;on&nbsp;the&nbsp;1st&nbsp;January&nbsp;1970&nbsp;(10am&nbsp;correct?)<br />&nbsp;&nbsp;objOutStream.WriteText&nbsp;"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0"&nbsp;&&nbsp;String(100,Chr(0))&nbsp;'chksum,&nbsp;type&nbsp;flag&nbsp;and&nbsp;link&nbsp;name,&nbsp;write&nbsp;out&nbsp;all&nbsp;blanks&nbsp;so&nbsp;that&nbsp;the&nbsp;actual&nbsp;checksum&nbsp;will&nbsp;get&nbsp;calculated&nbsp;correctly<br />&nbsp;&nbsp;objOutStream.WriteText&nbsp;"ustar&nbsp;&nbsp;"&nbsp;&nbsp;&&nbsp;Chr(0)&nbsp;'magic&nbsp;and&nbsp;version<br />&nbsp;&nbsp;objOutStream.WriteText&nbsp;Left(UserName&nbsp;&&nbsp;String(32,Chr(0)),32)&nbsp;'uname<br />&nbsp;&nbsp;objOutStream.WriteText&nbsp;Left(GroupName&nbsp;&&nbsp;String(32,Chr(0)),32)&nbsp;'gname<br />&nbsp;&nbsp;objOutStream.WriteText&nbsp;"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;40&nbsp;"&nbsp;&&nbsp;String(4,Chr(0))&nbsp;'devmajor,&nbsp;devminor<br />&nbsp;&nbsp;objOutStream.WriteText&nbsp;String(167,Chr(0))&nbsp;'prefix&nbsp;and&nbsp;leader<br />&nbsp;&nbsp;objInStream.CopyTo&nbsp;objOutStream&nbsp;'&nbsp;Send&nbsp;the&nbsp;data&nbsp;to&nbsp;the&nbsp;stream<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;if&nbsp;(objInStream.Size&nbsp;Mod&nbsp;BlockSize)&nbsp;&gt;&nbsp;0&nbsp;then<br />&nbsp;&nbsp;&nbsp;objOutStream.WriteText&nbsp;String(BlockSize&nbsp;-&nbsp;(objInStream.Size&nbsp;Mod&nbsp;BlockSize),Chr(0))&nbsp;'Padding&nbsp;to&nbsp;the&nbsp;nearest&nbsp;block&nbsp;byte&nbsp;boundary<br />&nbsp;&nbsp;end&nbsp;if<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;'&nbsp;Calculate&nbsp;the&nbsp;checksum&nbsp;for&nbsp;the&nbsp;header<br />&nbsp;&nbsp;lSum&nbsp;=&nbsp;0&nbsp;&nbsp;<br />&nbsp;&nbsp;objOutStream.Position&nbsp;=&nbsp;lStart<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;For&nbsp;lTemp&nbsp;=&nbsp;1&nbsp;To&nbsp;BlockSize<br />&nbsp;&nbsp;&nbsp;lSum&nbsp;=&nbsp;lSum&nbsp;+&nbsp;(Asc(objOutStream.ReadText(1))&nbsp;And&nbsp;&HFF&)<br />&nbsp;&nbsp;Next<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;'&nbsp;Insert&nbsp;it<br />&nbsp;&nbsp;objOutStream.Position&nbsp;=&nbsp;lStart&nbsp;+&nbsp;148<br />&nbsp;&nbsp;objOutStream.WriteText&nbsp;Right(String(7,"0")&nbsp;&&nbsp;Oct(lSum),7)&nbsp;&&nbsp;Chr(0)<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;'&nbsp;Move&nbsp;to&nbsp;the&nbsp;end&nbsp;of&nbsp;the&nbsp;stream<br />&nbsp;&nbsp;objOutStream.Position&nbsp;=&nbsp;objOutStream.Size<br />End&nbsp;Sub<br /><br />'&nbsp;Start&nbsp;everything&nbsp;off<br />Private&nbsp;Sub&nbsp;Class_Initialize()<br />&nbsp;&nbsp;Set&nbsp;objFiles&nbsp;=&nbsp;Server.CreateObject("Scripting.Dictionary")<br />&nbsp;&nbsp;Set&nbsp;objMemoryFiles&nbsp;=&nbsp;Server.CreateObject("Scripting.Dictionary")<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;BlockSize&nbsp;=&nbsp;512<br />&nbsp;&nbsp;Permissions&nbsp;=&nbsp;438&nbsp;'&nbsp;UNIX&nbsp;666<br />&nbsp;&nbsp;UserID&nbsp;=&nbsp;0<br />&nbsp;&nbsp;UserName&nbsp;=&nbsp;"root"<br />&nbsp;&nbsp;GroupID&nbsp;=&nbsp;0<br />&nbsp;&nbsp;GroupName&nbsp;=&nbsp;"root"<br />&nbsp;&nbsp;IgnorePaths&nbsp;=&nbsp;False<br />&nbsp;&nbsp;BasePath&nbsp;=&nbsp;""<br />&nbsp;&nbsp;TarFilename&nbsp;=&nbsp;"new.tar"<br />End&nbsp;Sub<br /><br />Private&nbsp;Sub&nbsp;Class_Terminate()<br />&nbsp;&nbsp;Set&nbsp;objMemoryFiles&nbsp;=&nbsp;Nothing<br />&nbsp;&nbsp;Set&nbsp;objFiles&nbsp;=&nbsp;Nothing<br />End&nbsp;Sub<br />End&nbsp;Class<br />%&gt;</div></div>]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">艾恩ASP无组件上传类最新更新！！！！！</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_162.html" />
      <updated>2008-12-20 2:02:04</updated>
      <published>2008-12-20 2:02:04</published>
      <id>http://dev.mo.cn/article_162.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;自从发布到现在,本类受到了良好的反映,现再次进行更新优化,免费发布给广大网友使用!!!!<br /><br />&nbsp;&nbsp;&nbsp;下载地址:<a href="http://dev.mo.cn/detial.asp?id=143" target="new">http://dev.mo.cn/detial.asp?id=143</a><br /><br />&nbsp;&nbsp;更新日期:2008-12-20<br /><br />假设类实例名为UpLoad<br /><br />1.类名由UpLoad修改为AnUpLoad,创建类的方法为：set&nbsp;UpLoad&nbsp;=new&nbsp;AnUpLoad<br /><br />2.增加Charset属性,可以指定文本的编码格式,默认为GB2312。设置方法为：UpLoad.Charset="GB2312"<br /><br />3.增加表单和文件类遍历方法,使用方法:<br />&nbsp;&nbsp;&nbsp;(1)调用UpLoad.Forms(-1),返回一个表单集合,可以用foreach来遍历所有元素,具体查看示例"表单遍历"<br />&nbsp;&nbsp;&nbsp;(2)调用UpLoad.Files(-1),返回一个文件类集合,可以用foreach来遍历所有元素,具体查看示例"多文件文件上传"<br />&nbsp;&nbsp;检索具体表单或文件的方法不变,为Upload.Forms(表单名)和Upload.Files(表单名)<br /><br />4.优化了文件后缀判断程序,代码更合理<br /><br />5.增加了客户提交表单类型的判断,未设置上传表单enctype属性为multipart/form-data,则提示上传无效!<br /><br />6.重新制作了上传示例程序<br /><br />声明:<br />1.本组件已经推出组件版(http://dev.mo.cn/detial.asp?id=166),组件版跟无组件版使用有区别,请查看具体示例或开发文档<br />2.使用时请保留作者注释信息;如要修改代码,请注明改自"艾恩ASP无组件上传类"!谢谢!]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">艾恩ASP组件(常用类集)正式测试开始！！！</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_161.html" />
      <updated>2008-12-18 11:47:00</updated>
      <published>2008-12-18 11:47:00</published>
      <id>http://dev.mo.cn/article_161.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;组件下载地址:<span style="font-size:4;"><a href="http://dev.mo.cn/detial.asp?id=166" target="new"><span style="color:red;">http://dev.mo.cn/detial.asp?id=166</span></a></span><br /><br />&nbsp;&nbsp;&nbsp;开门见山,介绍下这个组件的作用。<br /><br />&nbsp;&nbsp;&nbsp;使用这个组件有点省懒法的的嫌疑，这个组件把常用的几个Asp对象重新封装了一下，例如&nbsp;Request.serverVariables,Request.From等，<br />同时封装了几个常用的自定义函数,例如HTML函数(获取指定网页的HTML代码),Download函数(下载网络上的文件,适合小文件)，SafeCode函数(生成数字验证码)等。<br />提供两个非常重要的类File类(执行各种文件操作)和UpLoad类(客户端文件上传类)。<br /><br />&nbsp;&nbsp;&nbsp;本组件最值得推荐的类就是Upload文件上传类,以前本人发过无组件版本的类集,收到了很好的效果,现在推出本类的组件版本,功能更强大,操作更灵活.<br /><br />&nbsp;&nbsp;&nbsp;非常欢迎和感谢您能够测试本组件的性能,本组件下载地址为<a href="http://dev.mo.cn/detial.asp?id=166" target="new">http://dev.mo.cn/detial.asp?id=166</a>，内含完整的开发文档,<br />详细介绍了本组件的使用方法信,同时提供本组件所有功能的测试代码,以方便本组件的使用和测试.<br /><br />&nbsp;&nbsp;&nbsp;非常感谢您的测试，每个项目测试成功后请在后面的复选框打钩；测试完毕后，如果您能够给我提交测试报告,本人将不胜感激!<br /><br />&nbsp;&nbsp;&nbsp;本程序不会收集任何有关您隐私的信息,请放心测试和使用!<br /><br />------------------说明----------------------------<br /><br />1.本组件提供3个类以供用户使用,这三个类分别是ASP、File、UpLoad，<br />&nbsp;&nbsp;用户可以通过server.createobject("AnAsp.类名")的方法创建对象并使用本类<br />&nbsp;&nbsp;例如,&nbsp;server.CreateObject("AnAsp.ASP"),创建成功后就可以是使用本类提供的所有方法了<br /><br />2.文档中说明为“类公有方法”的函数,用户可以任意调用；<br />&nbsp;&nbsp;说明为“类私有方法”的函数,用户无权调用，由程序内部自动调用。<br /><br />------------------配置Anasp组件--------------------<br /><br />1.注册Anasp.dll<br />首先，复制Anasp.dll文件到系统Windows目录下；<br />然后点电脑左下角的“开始”---“运行”，输入Regsvr32&nbsp;Anasp.dll,点确定！<br />如果要解除注册,请输入Regsvr32&nbsp;/u&nbsp;Anasp.dll,点确定!<br /><br />2.在Asp程序中调用<br />新建一个ASP文件test.asp,输入如下代码<br />&lt;%<br />Dim&nbsp;MyAsp<br />Set&nbsp;MyAsp&nbsp;=server.createobject("Anasp.Asp")<br />Response.write&nbsp;MyAsp.Version<br />Set&nbsp;MyAsp=nothing<br />%&gt;<br />运行后如果出现本类集的版本信息,说明调用成功<br /><br />3.到这里,基本的配置就完成了,您可以尽情享受本组件给您带来的方便了!!!<br /><br /><br />组件下载地址:<span style="font-size:4;"><a href="http://dev.mo.cn/detial.asp?id=166" target="new"><span style="color:red;">http://dev.mo.cn/detial.asp?id=166</span></a></span>]]>
      </summary>
      <category term="" label="IIS外部组件" scheme="http://dev.mo.cn/cat_diary_4.html" />
   </entry>
   <entry>
      <title type="html">智力题--享受头脑风暴</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_160.html" />
      <updated>2008-12-16 12:46:18</updated>
      <published>2008-12-16 12:46:18</published>
      <id>http://dev.mo.cn/article_160.html</id>
      <summary type="html">
      <![CDATA[老师从1~50之间（大于1小于50）选了两个自然数，将两数之积告诉同学P&nbsp;<br /><br />（Product），两数之和告诉同学S（Sum），问两位同学能否推出这两个自然数？&nbsp;<br /><br />S说：我知道你不知道这两个数，但我也不知道。&nbsp;<br /><br />P说：我还是不知道。&nbsp;<br /><br />S说：我知道这两个数啦！&nbsp;<br /><br />P说：我也知道啦！&nbsp;<br /><br />其他同学：我们也知道啦！&nbsp;<br /><br />……&nbsp;<br /><br />问：老师选出的两个自然数是什么？&nbsp;<br /><br />分析&nbsp;<br /><br />说话依次编号为S1，P1，S2，P2。&nbsp;<br /><br />设这两个数为x，y，和为s，积为p。&nbsp;<br /><br />1）根据S1：“S说：我知道你不知道这两个数，但我也不知道。”&nbsp;<br /><br />结论：已知和s，绝对无法根据积p推出x，y&nbsp;<br /><br />推论1：&nbsp;<br /><br /><br /><br />s必为奇数。因为如果s为偶数，必能分解为两个质数的和（歌德巴赫猜想）。而两个质数相乘，则可以通过乘积立刻推出两个数的值。&nbsp;<br /><br />s&nbsp;&lt;=&nbsp;29。因为29是1-50之间所有自然数的最小不可能质因子。因为如果s&gt;29，假设s为31，则x，y可能为{2，29}，而根据乘积P=2*29可以立即推出，也就与结论矛盾了。&nbsp;<br /><br />s不能为任意两个质数之和。排除5（2+3），7（2+5），9（2+7），13（2+11），15（2+13），19（2+17），21（2+19），25（2+23）<br /><br />根据以上推论，可能的和s只能在集合I={11，17，23，27，29}之中。&nbsp;<br /><br />推论2：&nbsp;<br /><br />因为s为奇数，则{x，y}为一奇数一偶数，所以必含有因子2。<br /><br />2）根据P1，S2，P2。&nbsp;<br /><br />结论：乘积p除了因子2以外，还至少含有两个质因子，而且最大的质因子不可能大于7。&nbsp;<br /><br />解释：&nbsp;<br /><br />如果除了因子2，只含有一个质因子A，则立即能推出{x，y}={2，A}，与P1矛盾。&nbsp;<br /><br />最大质子不可能大于7。假如含有因子11，就会有p至少是11*2*3，拆成11*6或者22*3不满足条件，假如含有因子13，就会有p至少是13*2*3，拆成13*6或者26*3也不满足条件。&nbsp;<br /><br />质因子在{2，3，5，7}的范围内<br /><br />3）&nbsp;在集合I={11，17，23，27，29}的范围内，质因子A，B在{2，3，5，7}的范围内&nbsp;<br /><br />列举满足所有推论的可能组成{x，y}组合。标记方法{x，y}(和，积）&nbsp;<br /><br />和s&nbsp;=&nbsp;11&nbsp;<br /><br />{2，9}(11，18），{3，8}(11，24），{4，7}(11，28），{5，6}(11，30）&nbsp;<br /><br />和s&nbsp;=&nbsp;17&nbsp;<br /><br />{2，15}(17，30），{3，14}(17，42），{4，13}(17，52），{5，12}(17，60）&nbsp;<br /><br />{6，11}(17，66），{7，10}(17，70），{8，9}(17，72）&nbsp;<br /><br />和s&nbsp;=&nbsp;23&nbsp;<br /><br />{2，21}(23，42），{3，20}(23，60），{4，19}(23，76），{5，18}(23，90）&nbsp;<br /><br />{6，17}(23，102），{7，16}(23，112），{8，15}(23，120），{9，14}(23，126）&nbsp;<br /><br />{10，13}(23，130），{11，12}(23，132）&nbsp;<br /><br />和s&nbsp;=&nbsp;27&nbsp;<br /><br />{2，25}(27，50），{3，24}(27，72），{4，23}(27，104），{5，22}(27，110）&nbsp;<br /><br />{6，21}(27，126），{7，20}(27，140），{8，19}(27，152），{9，18}(27，162）&nbsp;<br /><br />{10，17}(27，170），{11，16}(27，176），{12，15}(27，180），{13，14}(27，182）&nbsp;<br /><br />和s&nbsp;=&nbsp;29&nbsp;<br /><br />{2，27}(29，54），{3，26}(29，78），{4，25}(29，100），{5，24}(29，120）&nbsp;<br /><br />{6，23}(29，138），{7，22}(29，154），{8，21}(29，168），{9，20}(29，180）&nbsp;<br /><br />{10，19}(29，190）之后的已经不可能了&nbsp;<br /><br />从以上排列组合，可以得出「和s不同，积p相同」的共有七组，设为集合Wi&nbsp;<br /><br />W1&nbsp;=&nbsp;{&nbsp;{5，6}(11，30），&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{2，15}(17，30）}&nbsp;<br /><br />W2&nbsp;=&nbsp;{&nbsp;{3，14}(17，42），&nbsp;&nbsp;&nbsp;{2，21}(23，42）}&nbsp;<br /><br />W3&nbsp;=&nbsp;{&nbsp;{5，12}(17，60），&nbsp;&nbsp;&nbsp;{3，20}(23，60）}&nbsp;<br /><br />W4&nbsp;=&nbsp;{&nbsp;{8，9}(17，72），&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{3，24}(27，72）}&nbsp;<br /><br />W5&nbsp;=&nbsp;{&nbsp;{8，15}(23，120），&nbsp;{5，24}(29，120）}&nbsp;<br /><br />W6&nbsp;=&nbsp;{&nbsp;{9，14}(23，126），&nbsp;{6，21}(27，126）}&nbsp;<br /><br />W7&nbsp;=&nbsp;{&nbsp;{12，15}(27，180），{9，20}(29，180）}&nbsp;<br /><br />其他的积唯一的排列组合，都和P1矛盾（「P说：我还是不知道。」）。因为积唯一的情况下，同学P可以由积p立即推出{x，y}，所以排除。&nbsp;<br /><br />4）&nbsp;通过整理集合W，现在对应每一个s，积p相同的组合个数如下所示：&nbsp;<br /><br />s&nbsp;=&nbsp;11，有1组，W1&nbsp;<br /><br />s&nbsp;=&nbsp;17，有4组，W1，W2，W3，W4&nbsp;<br /><br />s&nbsp;=&nbsp;23，有4组，W2，W3，W5，W6<br /><br />s&nbsp;=&nbsp;27，有3组，W4，W6，W7&nbsp;<br /><br />s&nbsp;=&nbsp;29，有2组，W5，W7&nbsp;<br /><br />根据S2，也就是「S说：我知道这两个数啦！」，可以推出，只有s为11（组合个数唯一）的情况下，S才能说出这句话。这就是说{x，y}的正确答案是{5，6}(11，30)&nbsp;]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">汉字转声母</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_159.html" />
      <updated>2008-12-9 14:51:20</updated>
      <published>2008-12-9 14:51:20</published>
      <id>http://dev.mo.cn/article_159.html</id>
      <summary type="html">
      <![CDATA[汉字转声母,好像不完整,没找到完整的~<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;%<br />function&nbsp;getpychar(char)<br />tmp=65536+asc(char)<br />if(tmp&gt;=45217&nbsp;and&nbsp;tmp&lt;=45252)&nbsp;then<br />getpychar=&nbsp;"A"<br />elseif(tmp&gt;=45253&nbsp;and&nbsp;tmp&lt;=45760)&nbsp;then<br />getpychar=&nbsp;"B"<br />elseif(tmp&gt;=45761&nbsp;and&nbsp;tmp&lt;=46317)&nbsp;then<br />getpychar=&nbsp;"C"<br />elseif(tmp&gt;=46318&nbsp;and&nbsp;tmp&lt;=46825)&nbsp;then<br />getpychar=&nbsp;"D"<br />elseif(tmp&gt;=46826&nbsp;and&nbsp;tmp&lt;=47009)&nbsp;then&nbsp;<br />getpychar=&nbsp;"E"<br />elseif(tmp&gt;=47010&nbsp;and&nbsp;tmp&lt;=47296)&nbsp;then&nbsp;<br />getpychar=&nbsp;"F"<br />elseif(tmp&gt;=47297&nbsp;and&nbsp;tmp&lt;=47613)&nbsp;then&nbsp;<br />getpychar=&nbsp;"G"<br />elseif(tmp&gt;=47614&nbsp;and&nbsp;tmp&lt;=48118)&nbsp;then<br />getpychar=&nbsp;"H"<br />elseif(tmp&gt;=48119&nbsp;and&nbsp;tmp&lt;=49061)&nbsp;then<br />getpychar=&nbsp;"J"<br />elseif(tmp&gt;=49062&nbsp;and&nbsp;tmp&lt;=49323)&nbsp;then&nbsp;<br />getpychar=&nbsp;"K"<br />elseif(tmp&gt;=49324&nbsp;and&nbsp;tmp&lt;=49895)&nbsp;then&nbsp;<br />getpychar=&nbsp;"L"<br />elseif(tmp&gt;=49896&nbsp;and&nbsp;tmp&lt;=50370)&nbsp;then&nbsp;<br />getpychar=&nbsp;"M"<br />elseif(tmp&gt;=50371&nbsp;and&nbsp;tmp&lt;=50613)&nbsp;then&nbsp;<br />getpychar=&nbsp;"N"<br />elseif(tmp&gt;=50614&nbsp;and&nbsp;tmp&lt;=50621)&nbsp;then&nbsp;<br />getpychar=&nbsp;"O"<br />elseif(tmp&gt;=50622&nbsp;and&nbsp;tmp&lt;=50905)&nbsp;then<br />getpychar=&nbsp;"P"<br />elseif(tmp&gt;=50906&nbsp;and&nbsp;tmp&lt;=51386)&nbsp;then&nbsp;<br />getpychar=&nbsp;"Q"<br />elseif(tmp&gt;=51387&nbsp;and&nbsp;tmp&lt;=51445)&nbsp;then&nbsp;<br />getpychar=&nbsp;"R"<br />elseif(tmp&gt;=51446&nbsp;and&nbsp;tmp&lt;=52217)&nbsp;then&nbsp;<br />getpychar=&nbsp;"S"<br />elseif(tmp&gt;=52218&nbsp;and&nbsp;tmp&lt;=52697)&nbsp;then&nbsp;<br />getpychar=&nbsp;"T"<br />elseif(tmp&gt;=52698&nbsp;and&nbsp;tmp&lt;=52979)&nbsp;then&nbsp;<br />getpychar=&nbsp;"W"<br />elseif(tmp&gt;=52980&nbsp;and&nbsp;tmp&lt;=53688)&nbsp;then&nbsp;<br />getpychar=&nbsp;"X"<br />elseif(tmp&gt;=53689&nbsp;and&nbsp;tmp&lt;=54480)&nbsp;then&nbsp;<br />getpychar=&nbsp;"Y"<br />elseif(tmp&gt;=54481&nbsp;and&nbsp;tmp&lt;=62289)&nbsp;then<br />getpychar=&nbsp;"Z"<br />else&nbsp;'如果不是中文，则不处理<br />getpychar=char<br />end&nbsp;if<br />end&nbsp;function<br /><br />function&nbsp;getpy(str)<br />for&nbsp;i=1&nbsp;to&nbsp;len(str)<br />getpy=getpy&nbsp;&&nbsp;getpychar(mid(str,i,1))<br />next<br />end&nbsp;function<br />response.write&nbsp;getpy("维尔康复日期万恶哦请我呢人气哦颇为而当年去玩儿")<br />%&gt;</div></div>]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">多条件查询代码(同时生成分页转向url)</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_158.html" />
      <updated>2008-12-8 14:00:16</updated>
      <published>2008-12-8 14:00:16</published>
      <id>http://dev.mo.cn/article_158.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;程序编写过程中经常用到多条件查询,如果条件很多,处理起来是不是会很麻烦?<br />&nbsp;&nbsp;&nbsp;&nbsp;查询完后要分页,点"下一页"后查询参数没了?<br />&nbsp;&nbsp;&nbsp;&nbsp;不知道前人是怎么解决的,下面是自己摸索出来的一种方法,使用起来比较方便；<br />&nbsp;&nbsp;&nbsp;保存下面的代码到example.asp,然后运行example.asp文件,就会看到效果<br />&nbsp;&nbsp;&nbsp;程序会自动保存提交的查询参数,即使翻页也不会丢失！<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;!--获取页面传递过来的参数--&gt;<br />&lt;%<br />keyword&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =trim(request.querystring("keyword"))<br />YY_Type&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =trim(request.querystring("YY_Type"))<br />YY_IS_Check&nbsp; &nbsp; &nbsp; &nbsp; =trim(request.querystring("YY_Is_Check"))<br />YY_Is_Start&nbsp; &nbsp; &nbsp; &nbsp; =trim(request.querystring("YY_Is_Start"))<br />YY_Is_End&nbsp; &nbsp; &nbsp; &nbsp; =trim(request.querystring("YY_Is_End"))<br />%&gt;<br />&lt;!--获取页面传递过来的参数结束--&gt;<br />&lt;HTML&gt;<br />&lt;HEAD&gt;<br />&lt;meta&nbsp;http-equiv="Content-Type"&nbsp;content="text/html;&nbsp;charset=gb2312"&gt;<br />&lt;TITLE&gt;多条件查询示例&lt;/TITLE&gt;<br />&lt;style&gt;<br />BODY&nbsp;{font-size:12px;}<br />&lt;/style&gt;<br />&lt;/HEAD&gt;<br />&lt;body&gt;<br />&lt;b&gt;请输入关键字进行搜索&lt;/b&gt;&nbsp;:&lt;br&nbsp;/&gt;&nbsp;<br />&lt;!--提交表单开始--&gt;<br />&lt;form&nbsp;style="display:inline;"&nbsp;name="search"&nbsp;action=""&nbsp;method="get"&gt;&nbsp;&lt;!--注意,必须用get方法提交表单--&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;input&nbsp;id="search"&nbsp;name="keyword"&nbsp;value="&lt;%=keyword%&gt;"&nbsp;/&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;select&nbsp;name="YY_Type"&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;option&nbsp;value="0"&nbsp;&lt;%if&nbsp;YY_Type="0"&nbsp;then&nbsp;response.write&nbsp;"selected"%&gt;&gt;不限&lt;/option&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;option&nbsp;value="2"&nbsp;&lt;%if&nbsp;YY_Type="2"&nbsp;then&nbsp;response.write&nbsp;"selected"%&gt;&gt;仪器预约&lt;/option&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;option&nbsp;value="1"&nbsp;&lt;%if&nbsp;YY_Type="1"&nbsp;then&nbsp;response.write&nbsp;"selected"%&gt;&gt;实验室预约&lt;/option&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/select&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;select&nbsp;name="YY_Is_Check"&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;option&nbsp;value="all"&nbsp;&lt;%if&nbsp;YY_IS_Check="all"&nbsp;then&nbsp;response.write&nbsp;"selected"%&gt;&gt;不限&lt;/option&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;option&nbsp;value="0"&nbsp;&lt;%if&nbsp;YY_IS_Check="0"&nbsp;then&nbsp;response.write&nbsp;"selected"%&gt;&gt;未审核&lt;/option&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;option&nbsp;value="1"&nbsp;&lt;%if&nbsp;YY_IS_Check="1"&nbsp;then&nbsp;response.write&nbsp;"selected"%&gt;&gt;已经审核&lt;/option&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/select&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;select&nbsp;name="YY_Is_Start"&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;option&nbsp;value="all"&nbsp;&lt;%if&nbsp;YY_Is_Start="all"&nbsp;then&nbsp;response.write&nbsp;"selected"%&gt;&gt;不限&lt;/option&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;option&nbsp;value="0"&nbsp;&lt;%if&nbsp;YY_Is_Start="0"&nbsp;then&nbsp;response.write&nbsp;"selected"%&gt;&gt;未开约&lt;/option&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;option&nbsp;value="1"&nbsp;&lt;%if&nbsp;YY_Is_Start="1"&nbsp;then&nbsp;response.write&nbsp;"selected"%&gt;&gt;已经开约&lt;/option&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/select&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;select&nbsp;name="YY_Is_End"&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;option&nbsp;value="all"&nbsp;&lt;%if&nbsp;YY_Is_End="all"&nbsp;then&nbsp;response.write&nbsp;"selected"%&gt;&gt;不限&lt;/option&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;option&nbsp;value="0"&nbsp;&lt;%if&nbsp;YY_Is_End="0"&nbsp;then&nbsp;response.write&nbsp;"selected"%&gt;&gt;未销约&lt;/option&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;option&nbsp;value="1"&nbsp;&lt;%if&nbsp;YY_Is_End="1"&nbsp;then&nbsp;response.write&nbsp;"selected"%&gt;&gt;已经销约&lt;/option&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/select&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;input&nbsp;type="button"&nbsp;onclick="this.form.submit();"&nbsp;value="搜索"&nbsp;style="width:120px;"&nbsp;/&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/form&gt;<br />&lt;!--提交表单结束--&gt;<br />&lt;%<br />page=cint(request.querystring("page"))&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '获取页面传递过来的分页参数<br />if&nbsp;page=""&nbsp;or&nbsp;page&lt;1&nbsp;then&nbsp;page=1&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '处理传递过来的分页参数<br />dim&nbsp;keyword,YY_Type,YY_Is_Check,YY_Is_Start,YY_Is_End&nbsp; &nbsp; &nbsp; &nbsp; '定义变量<br /><br />dim&nbsp;vs(5)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '定义数组,本数组用来存储url参数<br />vs(0)="":vs(1)="":vs(2)="":vs(3)="":vs(4)=""&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '初始化<br /><br />'根据条件开始给数组元素赋值,以确定查询参数<br />if&nbsp;keyword&lt;&gt;""&nbsp;then&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; vs(0)="keyword="&nbsp;&&nbsp;keyword<br />if&nbsp;YY_Type&lt;&gt;""&nbsp;then&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; vs(1)="YY_Type="&nbsp;&&nbsp;YY_Type<br />if&nbsp;YY_IS_Check&lt;&gt;""&nbsp;then&nbsp;vs(2)="YY_IS_Check="&nbsp;&&nbsp;YY_IS_Check<br />if&nbsp;YY_Is_Start&lt;&gt;""&nbsp;then&nbsp;vs(3)="YY_Is_Start="&nbsp;&&nbsp;YY_Is_Start<br />if&nbsp;YY_Is_End&lt;&gt;""&nbsp;then&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; vs(4)="YY_Is_End="&nbsp;&&nbsp;YY_Is_End<br />'赋值结束<br /><br />dim&nbsp;conStr(5)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '定义数组,本数组存储SQL查询条件<br />conStr(0)="":conStr(1)="":conStr(2)="":conStr(3)="":conStr(4)=""&nbsp; &nbsp; &nbsp; &nbsp; '初始化<br /><br />'根据条件开始给数组元素赋值,以确定查询条件<br />if&nbsp;keyword&lt;&gt;""&nbsp;then&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; conStr(0)="[YY_User]='"&nbsp;&&nbsp;keyword&nbsp;&&nbsp;"'"<br />if&nbsp;YY_Type&lt;&gt;"0"&nbsp;and&nbsp;YY_Type&lt;&gt;""&nbsp;then&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; conStr(1)="[YY_Type]="&nbsp;&&nbsp;YY_Type<br />if&nbsp;YY_Is_Check&lt;&gt;"all"&nbsp;and&nbsp;YY_Is_Check&lt;&gt;""&nbsp;then&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; conStr(2)="[YY_Is_Check]="&nbsp;&&nbsp;YY_Is_Check&nbsp;&nbsp;&nbsp;'这里排除all值,是all的话就没必要加查询条件了;下同<br />if&nbsp;YY_Is_Start&lt;&gt;"all"&nbsp;and&nbsp;YY_Is_Start&lt;&gt;""&nbsp;then&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; conStr(3)="[YY_Is_Start]="&nbsp;&&nbsp;YY_Is_Start<br />if&nbsp;YY_Is_End&lt;&gt;"all"&nbsp;and&nbsp;YY_Is_End&lt;&gt;""&nbsp;then&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; conStr(4)="[YY_Is_End]="&nbsp;&&nbsp;YY_Is_End<br />'赋值结束<br /><br />dim&nbsp;SQLSTR:SQLSTR=""&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '定义变量,存储组合后的SQL查询条件<br />dim&nbsp;sendSTR:sendSTR=""&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '定义变量,存储组合后的url参数<br /><br />'循环赋值<br />for&nbsp;i=0&nbsp;to&nbsp;4<br />&nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;conStr(i)&lt;&gt;""&nbsp;then<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;SQLSTR=""&nbsp;then&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; SQLSTR="&nbsp;where&nbsp;"&nbsp;&&nbsp;conStr(i)&nbsp; &nbsp; &nbsp; &nbsp; '使用此条件来添加where关键字<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SQLSTR=SQLSTR&nbsp;&&nbsp;"&nbsp;and&nbsp;"&nbsp;&&nbsp;conStr(i)&nbsp; &nbsp; &nbsp; &nbsp; '关键字and来连接查询条件<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end&nbsp;if<br />&nbsp; &nbsp; &nbsp; &nbsp; end&nbsp;if<br />&nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;vs(i)&lt;&gt;""&nbsp;then<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sendSTR=sendStr&nbsp;&&nbsp;vs(i)&nbsp;&&nbsp;"&"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '直接用&来链接各url参数<br />&nbsp; &nbsp; &nbsp; &nbsp; end&nbsp;if<br />next<br /><br />SQL="Select&nbsp;*&nbsp;from&nbsp;[YYStatus]"&nbsp;&&nbsp;SQLSTR&nbsp;&&nbsp;"&nbsp;Order&nbsp;By&nbsp;[ID]&nbsp;DESC"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '生成查询SQl<br />s_url="example.asp?"&nbsp;&&nbsp;sendStr&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; '生成分页转向url,注意example.asp后面的?,一定不要漏了<br />response.write&nbsp;"&lt;br&nbsp;/&gt;&lt;br&nbsp;/&gt;生成的SQL查询语句:"&nbsp;&&nbsp;SQL<br />response.write&nbsp;"&lt;br&nbsp;/&gt;&lt;br&nbsp;/&gt;生成的分页转向url:"&nbsp;&&nbsp;s_url<br />response.write&nbsp;"&lt;br&nbsp;/&gt;&lt;br&nbsp;/&gt;当前在第"&nbsp;&&nbsp;page&nbsp;&&nbsp;"页!"<br />response.write&nbsp;"&lt;br&nbsp;/&gt;&lt;br&nbsp;/&gt;&lt;a&nbsp;href="""&nbsp;&&nbsp;s_url&nbsp;&&nbsp;"page="&nbsp;&&nbsp;page-1&nbsp;&&nbsp;"""&gt;上一页&lt;/a&gt;&nbsp;&lt;a&nbsp;href="""&nbsp;&&nbsp;s_url&nbsp;&&nbsp;"page="&nbsp;&&nbsp;page+1&nbsp;&&nbsp;"""&gt;下一页&lt;/a&gt;"<br />%&gt;<br />&lt;/BODY&gt;<br />&lt;/HTML&gt;</div></div>]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">图片滚动代码（非Marquee）</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_157.html" />
      <updated>2008-12-2 21:28:07</updated>
      <published>2008-12-2 21:28:07</published>
      <id>http://dev.mo.cn/article_157.html</id>
      <summary type="html">
      <![CDATA[&lt;DIV&nbsp;id="demo"&nbsp;onmouseover="stopscroll();"&nbsp;style="OVERFLOW:&nbsp;hidden;&nbsp;WIDTH:&nbsp;500px"&nbsp;onmouseout="doscroll();"&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &lt;DIV&nbsp;id="demo1"&nbsp;style="PADDING-RIGHT:&nbsp;0px;&nbsp;PADDING-LEFT:&nbsp;0px;&nbsp;PADDING-BOTTOM:&nbsp;0px;&nbsp;PADDING-TOP:&nbsp;0px;&nbsp;WHITE-SPACE:&nbsp;nowrap"&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;IMG&nbsp;height=75&nbsp;&nbsp;src="images/gd1.jpg"&nbsp;width=120&nbsp;border=0&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;IMG&nbsp;height=75&nbsp;&nbsp;src="images/gd2.jpg"&nbsp;width=120&nbsp;border=0&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;IMG&nbsp;height=75&nbsp;&nbsp;src="images/gd3.jpg"&nbsp;width=120&nbsp;border=0&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;IMG&nbsp;height=75&nbsp;&nbsp;src="images/gd4.jpg"&nbsp;width=120&nbsp;border=0&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;IMG&nbsp;height=75&nbsp;&nbsp;src="images/gd11.jpg"&nbsp;width=120&nbsp;border=0&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &lt;/DIV&gt;<br />&lt;/DIV&gt;<br />&lt;SCRIPT&gt;<br /><br />var&nbsp;t=demo.scrollWidth;<br />demo1.innerHTML+=demo1.innerHTML;<br />function&nbsp;doMarquee(){<br />&nbsp; &nbsp; &nbsp; &nbsp; demo.scrollLeft=demo.scrollLeft&lt;demo.scrollWidth-demo.offsetWidth?demo.scrollLeft+1:t-demo.offsetWidth;<br />}<br /><br />function&nbsp;doscroll(){<br />&nbsp; &nbsp; &nbsp; &nbsp; sc=setInterval(doMarquee,20);<br />}<br /><br />function&nbsp;stopscroll(){<br />&nbsp; &nbsp; &nbsp; &nbsp; clearInterval(sc);<br />}<br />doscroll();<br /><br /><br />&lt;/SCRIPT&gt;]]>
      </summary>
      <category term="" label="HTML/CSS" scheme="http://dev.mo.cn/cat_diary_8.html" />
   </entry>
   <entry>
      <title type="html">关于包含文件---服务器端包含</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_156.html" />
      <updated>2008-11-28 10:04:35</updated>
      <published>2008-11-28 10:04:35</published>
      <id>http://dev.mo.cn/article_156.html</id>
      <summary type="html">
      <![CDATA[“服务器端包含”指令提供了一种方式，可在&nbsp;Web&nbsp;服务器处理文件之前，在此文件中插入其他文件的内容。ASP&nbsp;只实现此机制的&nbsp;#include。可使用下列语法将文件插入&nbsp;.asp&nbsp;文件：<br /><br />&lt;!--&nbsp;#include&nbsp;virtual&nbsp;|&nbsp;file&nbsp;="filename"&nbsp;--&gt;&nbsp;<br />关键字&nbsp;virtual&nbsp;和&nbsp;file&nbsp;表示包含文件的路径类型，filename&nbsp;表示想要包含文件的路径和文件名。<br /><br />被包含的文件并不要求具有特定的文件扩展名；但是，赋予被包含文件&nbsp;.inc&nbsp;扩展名是一个良好的编程习惯，这样有助于将它们与其他类型的文件区分开来。<br /><br />使用&nbsp;Virtual&nbsp;关键字<br />可以使用关键字&nbsp;virtual&nbsp;表示以虚拟目录开始的路径。例如，如果文件&nbsp;Footer.inc&nbsp;驻留在虚拟目录&nbsp;/Myapp&nbsp;中，则下列命令将&nbsp;Footer.inc&nbsp;的内容插入到包含此行的文件中：<br /><br />&lt;!--&nbsp;#include&nbsp;virtual&nbsp;="/myapp/footer.inc"&nbsp;--&gt;<br />使用&nbsp;File&nbsp;关键字<br />可以使用关键字&nbsp;file&nbsp;表示相对路径。相对路径以包含文件所在的路径开始。例如，如果文件&nbsp;Header1.inc&nbsp;在&nbsp;Myapp\Headers&nbsp;中，并且&nbsp;Myapp&nbsp;中有一个文件，则下列命令将&nbsp;Header1.inc&nbsp;插入到此文件中：<br /><br />&lt;!--&nbsp;#include&nbsp;file&nbsp;="headers\header1.inc"&nbsp;--&gt;<br />注意，被包含文件&nbsp;Headers\header1.inc&nbsp;的路径是相对于包含文件的；如果包含此&nbsp;#include&nbsp;语句的脚本不位于目录&nbsp;/Myapp&nbsp;中，语句将不起作用。<br /><br />也可以使用关键字&nbsp;file&nbsp;和语法&nbsp;(..\)&nbsp;来包含父目录或更高层目录中的文件，但必须选中&nbsp;Internet&nbsp;信息服务管理单元中的“启用父路径”选项。&nbsp;有关说明，请参阅配置&nbsp;ASP&nbsp;应用程序。<br /><br />被包含文件的位置<br />ASP&nbsp;检测被包含文件的变化（不考虑位置），并当浏览器下一次请求包含此文件的&nbsp;.asp&nbsp;文件时插入此文件内容。不过，通常而言，如果包含文件驻留在同一应用程序或网站内部，则很容易维护这些文件的安全性。若需要更高安全性，最好将包含文件放到应用程序内的单独目录中（如&nbsp;\Includes），并且只应用适当的“执行”（Web&nbsp;服务器）权限。详细信息，请参阅设置&nbsp;Web&nbsp;服务器权限。<br /><br />要点&nbsp;&nbsp;&nbsp;默认情况下，对所有文件应用&nbsp;Web&nbsp;服务器“读取”权限。不过，要防止用户查看包含文件的内容，可以禁用&nbsp;Include&nbsp;目录的“读取”权限。&nbsp;<br /><br />包含文件：提示和警告<br />被包含的文件也可以包含其他文件。只要&nbsp;#include&nbsp;命令不导致循环，.asp&nbsp;文件也可以多次包含同一文件。例如，如果文件&nbsp;First.asp&nbsp;包含文件&nbsp;Second.inc，则&nbsp;Second.inc&nbsp;不能反过来包含&nbsp;First.asp。文件也不能包含其自身。ASP&nbsp;检测这种循环或嵌套错误，生成错误消息，并停止处理请求的&nbsp;.asp&nbsp;文件。<br /><br />ASP&nbsp;在执行脚本命令之前包含文件。因此，不能使用脚本命令建立被包含的文件名。举例来说，因为&nbsp;ASP&nbsp;试图在将文件名指派给变量&nbsp;name&nbsp;之前执行&nbsp;#include&nbsp;命令，所以下列脚本无法打开文件&nbsp;Header1.inc。<br /><br />&lt;!--&nbsp;此脚本将失败&nbsp;--&gt;<br />&lt;%&nbsp;name=(header1&nbsp;&&nbsp;".inc")&nbsp;%&gt;&nbsp;<br />&lt;!--&nbsp;#include&nbsp;file="&lt;%=&nbsp;name&nbsp;%&gt;"&nbsp;--&gt;<br />脚本命令和过程必须完全包含在脚本分隔符&nbsp;&lt;%&nbsp;和&nbsp;%&gt;、HTML&nbsp;标签&nbsp;&lt;SCRIPT&gt;&nbsp;和&nbsp;&lt;/SCRIPT&gt;、或&nbsp;HTML&nbsp;标签&nbsp;&lt;OBJECT&gt;&nbsp;和&nbsp;&lt;/OBJECT&gt;&nbsp;之内。也就是说，不能在一个包含&nbsp;.asp&nbsp;文件中打开脚本分隔符，并在被包含的文件中关闭分隔符；脚本或脚本命令必须是一个完整的单元。例如，下列脚本将不起作用：<br /><br />&lt;!--&nbsp;此脚本将失败&nbsp;--&gt;<br />&lt;%<br />&nbsp;&nbsp;For&nbsp;i&nbsp;=&nbsp;1&nbsp;To&nbsp;n<br />&nbsp;&nbsp;&nbsp;&nbsp;主文件中的语句<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--&nbsp;&nbsp;#include&nbsp;file="header1.inc"&nbsp;--&gt;<br />&nbsp;&nbsp;Next<br />%&gt;<br />但下列脚本可以正常工作：<br /><br />&lt;%&nbsp;<br />&nbsp;&nbsp;For&nbsp;i&nbsp;=&nbsp;1&nbsp;to&nbsp;n<br />&nbsp;&nbsp;&nbsp;&nbsp;主文件中的语句<br />%&gt;&nbsp;<br />&lt;!--&nbsp;&nbsp;#include&nbsp;file="header1.inc"&nbsp;&nbsp;&nbsp;--&gt;<br />&lt;%&nbsp;Next&nbsp;%&gt;<br />注意&nbsp;&nbsp;&nbsp;如果&nbsp;ASP&nbsp;脚本包含的文件中存在包含脚本不需要的大量函数和变量，则这些无用的结构反而会影响性能，并最终降低&nbsp;Web&nbsp;应用程序的可扩展性。因此，通常将包含文件分成多个小文件，并且只包含那些服务器端脚本必需的文件，而不是包含那些带有冗余信息的一个或多个大型包含文件。<br /><br />有时，可能需要使用&nbsp;HTML&nbsp;&lt;SCRIPT&gt;&lt;/SCRIPT&gt;&nbsp;标签来包含服务器端文件。例如，下列脚本包含一个服务器可以执行的文件（使用相对路径）：<br /><br />&lt;SCRIPT&nbsp;LANGUAGE="VBScript"&nbsp;RUNAT=SERVER&nbsp;SRC="Utils\datasrt.inc"&gt;&lt;/SCRIPT&gt;<br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">利用ASP显示Excel电子表格</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_155.html" />
      <updated>2008-11-22 8:54:41</updated>
      <published>2008-11-22 8:54:41</published>
      <id>http://dev.mo.cn/article_155.html</id>
      <summary type="html">
      <![CDATA[本课程要求在系统中已安装了&nbsp;Microsoft&nbsp;Excel，且示例不支持在&nbsp;64&nbsp;位平台上运行，除非&nbsp;Excel&nbsp;是为&nbsp;64&nbsp;位平台开发的版本。<br /><br />本课程演示如何在网页中显示一个&nbsp;Microsoft&nbsp;Excel&nbsp;电子表格。如同在以前课程中那样，将使用&nbsp;ADO。然而，在本课程中，您将连接到&nbsp;Excel&nbsp;电子表格，而不是&nbsp;Access&nbsp;数据库。&nbsp;<br /><br />准备将在&nbsp;Active&nbsp;Server&nbsp;Page&nbsp;中显示的&nbsp;Excel&nbsp;电子表格<br />使用&nbsp;Excel&nbsp;98&nbsp;或&nbsp;Excel&nbsp;2000，创建一个电子表格，并将其保存在&nbsp;x:\Inetpub\Wwwroot\Tutorial&nbsp;中，文件名为&nbsp;ASPTOC.xls。创建电子表格时不要包括任何特殊的格式或列标签。<br />用随机数据填充一些字段。将单元格的第一行作为列名称。<br />选中要在网页中显示的电子表格的行和列（在某一单元格中单击，然后沿对角线拖动鼠标选中一组单元格）。<br />在“插入”菜单上，选择“名称”，然后单击“定义”。所有工作簿的名称和单元格区域都在此对话框中定义。<br />确保选中的单元格区域正确显示在底部。为您的工作簿键入名称“MYBOOK”，然后选择“添加”。无论何时改变&nbsp;MYBOOK&nbsp;时，请确保在“定义名称”窗口底部的“引用位置”文本框中显示了正确的单元格区域。仅仅在新选中一组单元格后选择&nbsp;MYBOOK，不会更新单元格区域。<br />在名称显示在工作簿列表后，单击“确定”按钮。保存电子表格。<br />关闭&nbsp;Excel，去除对文件的锁定，以便&nbsp;ASP&nbsp;网页可以对其进行访问。&nbsp;<br />在第&nbsp;3&nbsp;课的示例中，将在连接字符串中指定提供程序的名称，以映射到特定的&nbsp;ADO&nbsp;DLL。在本示例中，将使用一个驱动程序名称，使&nbsp;ASP&nbsp;使用此驱动程序的默认提供程序。&nbsp;<br /><br />将下列代码复制并粘贴到文本编辑器中，将文件保存在&nbsp;x:\Inetpub\Wwwroot\Tutorial&nbsp;目录中，文件名为“ViewExcel.asp”。在浏览器地址栏中键入&nbsp;http://localhost/Tutorial/ViewExcel.asp&nbsp;查看此示例。&nbsp;<br /><br />&nbsp;&nbsp;&lt;%@&nbsp;Language=VBScript&nbsp;%&gt;&nbsp;<br /><br />&nbsp;&nbsp;&lt;html&gt;&nbsp;<br />&nbsp;&nbsp;&lt;head&gt;&nbsp;<br />&nbsp;&nbsp;&lt;title&gt;在网页中显示&nbsp;Excel&nbsp;电子表格&lt;/title&gt;&nbsp;<br />&nbsp;&nbsp;&lt;/head&gt;&nbsp;<br />&nbsp;&nbsp;&lt;body&gt;&nbsp;<br />&nbsp;&nbsp;&lt;font&nbsp;face="宋体"&gt;&nbsp;<br />&nbsp;&nbsp;&lt;h2&gt;在网页中显示&nbsp;Excel&nbsp;电子表格&lt;/h2&gt;&nbsp;<br /><br />&nbsp;&nbsp;&lt;%&nbsp;<br />&nbsp;&nbsp;&nbsp;'创建连接字符串，创建一个&nbsp;Connection&nbsp;对象示例，&nbsp;<br />&nbsp;&nbsp;&nbsp;'然后连接到数据库。&nbsp;<br />&nbsp;&nbsp;&nbsp;strDriver&nbsp;=&nbsp;"Driver={Microsoft&nbsp;Excel&nbsp;Driver&nbsp;(*.xls)};DBQ=C:\Inetpub\Wwwroot\Tutorial\MyExcel.xls;"&nbsp;<br />&nbsp;&nbsp;&nbsp;Set&nbsp;objConn&nbsp;=&nbsp;Server.CreateObject("ADODB.Connection")&nbsp;<br />&nbsp;&nbsp;&nbsp;objConn.Open&nbsp;strDriver&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;'使用已保存的工作簿名称从&nbsp;Excel&nbsp;电子表格中选择记录。&nbsp;<br />&nbsp;&nbsp;&nbsp;strSELECT&nbsp;=&nbsp;"SELECT&nbsp;*&nbsp;from&nbsp;`MYBOOK`"&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;'创建一个&nbsp;ADO&nbsp;Recordset&nbsp;对象示例，并将其连接到&nbsp;objConn。&nbsp;<br />&nbsp;&nbsp;&nbsp;Set&nbsp;objRS&nbsp;=&nbsp;Server.CreateObject("ADODB.Recordset")&nbsp;<br />&nbsp;&nbsp;&nbsp;objRS.Open&nbsp;strSELECT,&nbsp;objConn&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;'使用&nbsp;GetString&nbsp;方法打印表中的单元格和行。&nbsp;<br />&nbsp;&nbsp;&nbsp;Response.Write&nbsp;"&lt;H4&gt;使用&nbsp;GetString&nbsp;方法将&nbsp;Excel&nbsp;数据取入一个字符串&lt;/H4&gt;"&nbsp;<br />&nbsp;&nbsp;&nbsp;Response.Write&nbsp;"&lt;table&nbsp;border=1&nbsp;&gt;&lt;tr&gt;&lt;td&gt;"&nbsp;<br />&nbsp;&nbsp;&nbsp;Response.Write&nbsp;objRS.GetString&nbsp;(,&nbsp;,&nbsp;"&lt;/td&gt;&lt;td&gt;&lt;font&nbsp;face=&quot;MS&nbsp;Gothic&quot;&gt;",&nbsp;"&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;",&nbsp;NBSPACE)&nbsp;<br />&nbsp;&nbsp;&nbsp;Response.Write&nbsp;"&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;"&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;'移动到第一条记录。&nbsp;<br />&nbsp;&nbsp;&nbsp;objRS.MoveFirst&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;'使用&nbsp;ViewGB.asp&nbsp;方法打印表中的单元格和行。&nbsp;<br />&nbsp;&nbsp;&nbsp;Response.Write&nbsp;"&lt;H4&gt;使用&nbsp;MoveNext&nbsp;方法获取&nbsp;Excel&nbsp;数据&nbsp;&lt;/H4&gt;"&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;'使用相应方法和属性打印输出&nbsp;Recordset&nbsp;对象的&nbsp;<br />&nbsp;&nbsp;&nbsp;'字段名称和属性&nbsp;<br />&nbsp;&nbsp;&nbsp;Response.Write&nbsp;"&lt;table&nbsp;border=1&nbsp;&gt;&lt;tr&gt;"&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;'对于当前行中的每一列...&nbsp;<br />&nbsp;&nbsp;&nbsp;For&nbsp;i&nbsp;=&nbsp;0&nbsp;to&nbsp;(objRS.Fields.Count&nbsp;-&nbsp;1)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;输出字段名称。&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.Write&nbsp;"&lt;td&gt;&lt;font&nbsp;face=&quot;MS&nbsp;Gothic&quot;&gt;&lt;B&gt;"&nbsp;&&nbsp;objRS(i).Name&nbsp;&&nbsp;"&lt;/B&gt;&lt;/font&gt;&lt;/td&gt;"&nbsp;<br />&nbsp;&nbsp;&nbsp;Next&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;'如果还没有到达记录集的尾部...&nbsp;<br />&nbsp;&nbsp;&nbsp;While&nbsp;Not&nbsp;objRS.EOF&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.Write&nbsp;"&lt;/tr&gt;&lt;tr&gt;"&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'对于当前行中的每一列...&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;i&nbsp;=&nbsp;0&nbsp;to&nbsp;(objRS.Fields.Count&nbsp;-&nbsp;1)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;输出字段中的数据。&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%&gt;&lt;td&gt;&lt;font&nbsp;face="宋体"&gt;&lt;%=objRS(i)%&gt;&lt;/font&gt;&lt;/td&gt;&lt;%&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'移动到下一行。&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objRS.MoveNext&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;Wend&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;Response.Write&nbsp;"&lt;/tr&gt;&lt;/table&gt;"&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;'关闭连接。&nbsp;<br />&nbsp;&nbsp;&nbsp;objConn.Close&nbsp;<br />&nbsp;&nbsp;%&gt;&nbsp;<br /><br />&nbsp;&nbsp;&lt;/font&gt;&nbsp;<br />&nbsp;&nbsp;&lt;/body&gt;&nbsp;<br />&nbsp;&nbsp;&lt;/html&gt;&nbsp;<br /><br />在浏览器中，您应看到下列结果：&nbsp;<br /><br /><br />&nbsp;在网页中显示&nbsp;Excel&nbsp;电子表格<br />&nbsp;使用&nbsp;GetString&nbsp;方法将&nbsp;Excel&nbsp;数据取入一个字符串<br />A2&nbsp;B2&nbsp;C2&nbsp;<br />A3&nbsp;B3&nbsp;C3&nbsp;<br /><br />&nbsp;使用&nbsp;MoveNext&nbsp;方法获取&nbsp;Excel&nbsp;数据<br />A1&nbsp;B1&nbsp;C1&nbsp;<br />A2&nbsp;B2&nbsp;C2&nbsp;<br />A3&nbsp;B3&nbsp;C3&nbsp;<br /><br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">在ASP网页中使用COM组件-创建VisualBasicCOM对象</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_154.html" />
      <updated>2008-11-22 8:45:52</updated>
      <published>2008-11-22 8:45:52</published>
      <id>http://dev.mo.cn/article_154.html</id>
      <summary type="html">
      <![CDATA[在本课中，您将使用&nbsp;Visual&nbsp;Basic&nbsp;创建简单的&nbsp;COM&nbsp;对象，此对象可以从&nbsp;ASP&nbsp;网页中进行调用。本示例需要&nbsp;Visual&nbsp;Basic&nbsp;带有&nbsp;ActiveX&nbsp;向导，64&nbsp;位的平台不支持本示例，除非此&nbsp;Visual&nbsp;Basic&nbsp;Runtime&nbsp;是为&nbsp;64&nbsp;位平台开发的。您可以创建运行在&nbsp;64&nbsp;位平台上的&nbsp;32&nbsp;位&nbsp;COM&nbsp;对象，但必须从&nbsp;32&nbsp;位应用程序调用这个&nbsp;32&nbsp;位&nbsp;COM&nbsp;对象。因为&nbsp;IIS&nbsp;是&nbsp;64&nbsp;位平台上的&nbsp;64&nbsp;位应用程序，它无法调用&nbsp;32&nbsp;位对象。<br /><br />假定您需要创建一个&nbsp;Web&nbsp;应用程序，而此应用程序需要的功能&nbsp;VBScript&nbsp;却不具备。此时，必须创建一个自定义过程，并且需要时能从应用程序中的任何&nbsp;ASP&nbsp;网页进行调用。<br /><br />通常，这种解决方案对于封装自定义功能是足够的。然而，您可能要创建一个为数千用户提供服务的&nbsp;Web&nbsp;应用程序，而您的过程封装了不希望其他人看到的私有函数。此时，将功能封装为&nbsp;COM&nbsp;组件的形式应当是首选方案。组件提供的安全性和性能比脚本更高，因为它们是已编译的代码。组件还允许您使用由&nbsp;Visual&nbsp;Basic、C++、Java&nbsp;或其他兼容&nbsp;COM&nbsp;的语言提供的功能。<br /><br />创建&nbsp;ActiveX&nbsp;COM&nbsp;对象<br />Visual&nbsp;Basic&nbsp;的&nbsp;ActiveX&nbsp;DLL&nbsp;向导是创建&nbsp;COM&nbsp;组件最简便的方法。您也可以使用&nbsp;Microsoft&nbsp;Visual&nbsp;C++&nbsp;创建&nbsp;COM&nbsp;组件，方法是通过&nbsp;Active&nbsp;Template&nbsp;Library&nbsp;(ATL)&nbsp;或自己编写全部代码，本示例使用&nbsp;Visual&nbsp;Basic。<br /><br />在本课程中，您将学习如何创建一个&nbsp;Visual&nbsp;Basic&nbsp;函数，并将其封装为组件。Visual&nbsp;Basic&nbsp;包含许多不能用于&nbsp;VBScript&nbsp;的财务函数。本示例根据固定的利率以及定期、固定的付款来计算一笔投资的未来价值。<br /><br />打开&nbsp;Visual&nbsp;Basic。如果未出现标题为“新建工程”的窗口，请选择“文件”，然后单击“新建工程”。&nbsp;<br />选择“ActiveX&nbsp;DLL”，单击“确定”。<br />将打开一个名为“工程1&nbsp;-&nbsp;Class1&nbsp;(Code)”的窗口。可以在此处输入代码。&nbsp;<br />在“工程”菜单中，单击“工程1&nbsp;属性”。在“通用”属性页的“工程名称”框中，键入&nbsp;ASPTut。您的&nbsp;DLL&nbsp;称为&nbsp;ASPTut.dll。选中“执行无用户界面”复选框，这样工程就可以在没有用户交互的情况下运行，并且不出现用户界面元素。请确认“线程模型”为“单元线程”，这样，多个用户就可以同时访问&nbsp;DLL。单击“确定”。<br />在&nbsp;Visual&nbsp;Basic&nbsp;中，定义一个类，将方法和属性组合在一起。在“工程&nbsp;-&nbsp;ASPTut”窗口之下，单击“Class1&nbsp;(Class1)”节点，列出类的属性。在“属性&nbsp;-&nbsp;Class1”之下，在“（名称）”旁边的文本字段中单击，并将类名称更改为&nbsp;Finance。当您在&nbsp;ASP&nbsp;网页或其他脚本中调用此&nbsp;COM&nbsp;组件时，需要使用&nbsp;ASPTut.Finance&nbsp;对其进行引用。单击“Instancing”旁边的下拉菜单，并选择“5&nbsp;-&nbsp;MultiUse”。&nbsp;<br />了解一下将要使用的&nbsp;Visual&nbsp;Basic&nbsp;函数。可在&nbsp;MSDN&nbsp;上的&nbsp;Visual&nbsp;Basic&nbsp;库中找到有关&nbsp;FV&nbsp;函数的信息。&nbsp;<br />刚才标题为“工程1&nbsp;-&nbsp;Class1&nbsp;(Code)”的窗口的标题现在更改为&nbsp;ASPTut&nbsp;-&nbsp;Finance&nbsp;(Code)。将下列文本复制并粘贴到此窗口中：&nbsp;<br /><br />Option&nbsp;Explicit<br /><br />'声明将由&nbsp;Property&nbsp;函数设置的全局变量。<br />Dim&nbsp;gAnnualIntRate&nbsp;As&nbsp;Double<br />Dim&nbsp;gNumPayPeriods&nbsp;As&nbsp;Integer<br />Dim&nbsp;gPayment&nbsp;As&nbsp;Double<br />Dim&nbsp;gPresentSavings&nbsp;As&nbsp;Variant&nbsp;'可选<br />Dim&nbsp;gWhenDue&nbsp;As&nbsp;Variant&nbsp;'可选<br /><br />Public&nbsp;Function&nbsp;CalcFutureValue()&nbsp;As&nbsp;Double<br /><br />&nbsp;&nbsp;'用户在&nbsp;ASP&nbsp;网页中设置属性时，<br />&nbsp;&nbsp;'也就设置了要传递给&nbsp;FV&nbsp;函数的全局变量。<br />&nbsp;&nbsp;'如果想避免使用属性，<br />&nbsp;&nbsp;'可以将变量传递给&nbsp;CalcFutureValue()&nbsp;函数。<br />&nbsp;&nbsp;'CalcFutureValue&nbsp;将成为组件中的一种方法。<br /><br />&nbsp;&nbsp;Dim&nbsp;IntRatePerPeriod&nbsp;As&nbsp;Double<br />&nbsp;&nbsp;Dim&nbsp;FullFutureValue&nbsp;As&nbsp;Double<br /><br />&nbsp;&nbsp;If&nbsp;(gAnnualIntRate&nbsp;=&nbsp;Null)&nbsp;Or&nbsp;(gNumPayPeriods&nbsp;=&nbsp;Null)&nbsp;Or&nbsp;(gPayment&nbsp;=&nbsp;Null)&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;CalcFutureValue&nbsp;=&nbsp;0<br />&nbsp;&nbsp;Else<br />&nbsp;&nbsp;&nbsp;&nbsp;IntRatePerPeriod&nbsp;=&nbsp;gAnnualIntRate&nbsp;/&nbsp;100&nbsp;/&nbsp;12<br />&nbsp;&nbsp;&nbsp;&nbsp;FullFutureValue&nbsp;=&nbsp;FV(IntRatePerPeriod,&nbsp;gNumPayPeriods,&nbsp;gPayment,&nbsp;gPresentSavings,&nbsp;gWhenDue)<br />&nbsp;&nbsp;&nbsp;&nbsp;CalcFutureValue&nbsp;=&nbsp;Round(FullFutureValue,&nbsp;2)<br />&nbsp;&nbsp;End&nbsp;If<br /><br />End&nbsp;Function<br /><br />Public&nbsp;Property&nbsp;Get&nbsp;AnnualIntRate()&nbsp;As&nbsp;Double<br />&nbsp;&nbsp;'Get&nbsp;函数以类似属性的形式<br />&nbsp;&nbsp;'返回全局变量的值。<br />&nbsp;&nbsp;'在&nbsp;ASP&nbsp;网页中，可以表述为&nbsp;x&nbsp;=&nbsp;oASPTut.Rate。<br />&nbsp;&nbsp;AnnualIntRate&nbsp;=&nbsp;gAnnualIntRate<br />End&nbsp;Property<br /><br />Public&nbsp;Property&nbsp;Let&nbsp;AnnualIntRate(ByVal&nbsp;vAnnualIntRate&nbsp;As&nbsp;Double)<br />&nbsp;&nbsp;'Let&nbsp;函数在&nbsp;ASP&nbsp;网页进行调用（例如&nbsp;oASPTut.Rate&nbsp;=&nbsp;5）时<br />&nbsp;&nbsp;'设置全局变量<br />&nbsp;&nbsp;gAnnualIntRate&nbsp;=&nbsp;vAnnualIntRate<br />End&nbsp;Property<br /><br />Public&nbsp;Property&nbsp;Get&nbsp;NumPayPeriods()&nbsp;As&nbsp;Integer<br />&nbsp;&nbsp;NumPayPeriods&nbsp;=&nbsp;gNumPayPeriods<br />End&nbsp;Property<br /><br />Public&nbsp;Property&nbsp;Let&nbsp;NumPayPeriods(ByVal&nbsp;vNumPayPeriods&nbsp;As&nbsp;Integer)<br />&nbsp;&nbsp;gNumPayPeriods&nbsp;=&nbsp;vNumPayPeriods<br />End&nbsp;Property<br /><br />Public&nbsp;Property&nbsp;Get&nbsp;Payment()&nbsp;As&nbsp;Double<br />&nbsp;&nbsp;Payment&nbsp;=&nbsp;gPayment<br />End&nbsp;Property<br /><br />Public&nbsp;Property&nbsp;Let&nbsp;Payment(ByVal&nbsp;vPayment&nbsp;As&nbsp;Double)<br />&nbsp;&nbsp;gPayment&nbsp;=&nbsp;-(vPayment)<br />End&nbsp;Property<br /><br />Public&nbsp;Property&nbsp;Get&nbsp;PresentSavings()&nbsp;As&nbsp;Variant<br />&nbsp;&nbsp;PresentSavings&nbsp;=&nbsp;gPresentSavings<br />End&nbsp;Property<br /><br />Public&nbsp;Property&nbsp;Let&nbsp;PresentSavings(ByVal&nbsp;vPresentSavings&nbsp;As&nbsp;Variant)<br />&nbsp;&nbsp;gPresentSavings&nbsp;=&nbsp;-(vPresentSavings)<br />End&nbsp;Property<br /><br />Public&nbsp;Property&nbsp;Get&nbsp;WhenDue()&nbsp;As&nbsp;Variant<br />&nbsp;&nbsp;WhenDue&nbsp;=&nbsp;gWhenDue<br />End&nbsp;Property<br /><br />Public&nbsp;Property&nbsp;Let&nbsp;WhenDue(ByVal&nbsp;vWhenDue&nbsp;As&nbsp;Variant)<br />&nbsp;&nbsp;gWhenDue&nbsp;=&nbsp;vWhenDue<br />End&nbsp;Property<br /><br /><br />所有服务器组件都需要一个入口（起始）点。所谓入口点就是使用&nbsp;Server.CreateObject&nbsp;初次设置对象实例时要调用的代码。首次调用&nbsp;ASPTut&nbsp;组件时，无需进行任何特殊操作。因此，您可以提供一个空的&nbsp;Sub&nbsp;Main&nbsp;过程。在“工程”菜单中选择“添加模块”。在“添加模块”窗口中的“新建”选项卡之下，选择“模块”图标并单击“打开”。在“Module&nbsp;1”代码窗口中，键入&nbsp;Sub&nbsp;Main&nbsp;并按&nbsp;Enter&nbsp;键。这样即创建了一个空的子过程。&nbsp;<br />将&nbsp;Sub&nbsp;Main&nbsp;模块保存为&nbsp;Main.bas。将类文件保存为&nbsp;Finance.cls。将工程保存为&nbsp;ASPTut.vbp。&nbsp;<br />单击“文件”，再单击“生成&nbsp;ASPTut.dll”。这将编译并注册&nbsp;ASPTut.dll。从&nbsp;ASP&nbsp;网页调用&nbsp;ASPTut.dll&nbsp;之后，除非卸载运行&nbsp;ASP&nbsp;文件的应用程序，否则将不能再在&nbsp;Visual&nbsp;Basic&nbsp;中生成&nbsp;DLL。卸载方法之一是使用&nbsp;Internet&nbsp;信息服务管理单元打开默认网站的属性，再单击“卸载”按钮。如果需要在另一个&nbsp;Web&nbsp;服务器上注册此&nbsp;DLL，请将&nbsp;ASPTut.dll&nbsp;复制到此服务器，再单击“开始”，单击“运行”，然后在“打开”文本框中键入&nbsp;cmd。在&nbsp;ASPTut.dll&nbsp;所在的目录中，键入&nbsp;regsvr32&nbsp;ASPTut.dll。&nbsp;<br />退出&nbsp;Visual&nbsp;Basic。<br />创建一个使用&nbsp;Visual&nbsp;Basic&nbsp;COM&nbsp;对象的&nbsp;ASP&nbsp;网页<br />本示例中的&nbsp;ASP&nbsp;网页使用表单读取用户数据，创建一个对象实例，并计算储蓄计划的未来价值。&nbsp;<br /><br />将下列代码复制并粘贴到文本编辑器中，然后将此文件保存在&nbsp;x:\Inetpub\Wwwroot\Tutorial&nbsp;目录中，文件名为&nbsp;CalculateFutureValue.asp。通过在浏览器的地址栏中键入&nbsp;http://localhost/Tutorial/CalculateFutureValue.asp，可以在浏览器中查看此示例的效果。&nbsp;<br /><br />&nbsp;&nbsp;&lt;%@&nbsp;Language=VBScript&nbsp;%&gt;<br /><br />&nbsp;&nbsp;&lt;%<br />&nbsp;&nbsp;Response.Expires&nbsp;=&nbsp;0<br />&nbsp;&nbsp;Payment&nbsp;=&nbsp;Request.Form("Payment")<br />&nbsp;&nbsp;AnnualIntRate&nbsp;=&nbsp;Request.Form("AnnualIntRate")<br />&nbsp;&nbsp;NumPayPeriods&nbsp;=&nbsp;Request.Form("NumPayPeriods")<br />&nbsp;&nbsp;WhenDue&nbsp;=&nbsp;Request.Form("WhenDue")<br />&nbsp;&nbsp;PresentSavings&nbsp;=&nbsp;Request.Form("PresentSavings")<br />&nbsp;&nbsp;%&gt;<br /><br />&nbsp;&nbsp;&lt;HTML&gt;<br />&nbsp;&nbsp;&lt;HEAD&gt;&lt;TITLE&gt;计算未来价值&lt;/TITLE&gt;&lt;/HEAD&gt;<br />&nbsp;&nbsp;&lt;BODY&gt;<br />&nbsp;&nbsp;&lt;FONT&nbsp;FACE="MS&nbsp;Gothic"&gt;<br /><br />&nbsp;&nbsp;&lt;H2&nbsp;align=center&gt;计算储蓄计划的未来价值&lt;/H2&gt;&nbsp;<br /><br />&nbsp;&nbsp;&lt;FORM&nbsp;METHOD=POST&nbsp;ACTION="calculatefuturevalue.asp"&gt;&nbsp;<br />&nbsp;&nbsp;&lt;TABLE&nbsp;cellpadding=4&nbsp;align=center&gt;&nbsp;<br />&nbsp;&nbsp;&lt;TR&gt;<br />&nbsp;&nbsp;&lt;TD&gt;每月计划存入多少钱？&lt;/TD&gt;<br />&nbsp;&nbsp;&lt;TD&gt;&lt;INPUT&nbsp;TYPE=TEXT&nbsp;NAME=Payment&nbsp;VALUE=&lt;%=Payment%&gt;&gt;&nbsp;（必填）&lt;/TD&gt;<br />&nbsp;&nbsp;&lt;/TR&gt;&lt;TR&gt;<br />&nbsp;&nbsp;&lt;TD&gt;请输入年利率。&lt;/TD&gt;<br />&nbsp;&nbsp;&lt;TD&gt;&lt;INPUT&nbsp;TYPE=TEXT&nbsp;NAME=AnnualIntRate&nbsp;VALUE=&lt;%=AnnualIntRate%&gt;&gt;&nbsp;（必填）&lt;/TD&gt;<br />&nbsp;&nbsp;&lt;/TR&gt;&lt;TR&gt;&nbsp;<br />&nbsp;&nbsp;&lt;TD&gt;您要存几个月？&lt;/TD&gt;<br />&nbsp;&nbsp;&lt;TD&gt;&lt;INPUT&nbsp;TYPE=TEXT&nbsp;NAME=NumPayPeriods&nbsp;VALUE=&lt;%=NumPayPeriods%&gt;&gt;&nbsp;（必填）&lt;/TD&gt;<br />&nbsp;&nbsp;&lt;/TR&gt;&lt;TR&gt;&nbsp;<br />&nbsp;&nbsp;&lt;TD&gt;您将在每月的何时付款？&lt;/TD&gt;<br />&nbsp;&nbsp;&lt;TD&gt;&lt;INPUT&nbsp;TYPE=RADIO&nbsp;NAME=WhenDue&nbsp;VALUE=1&nbsp;&lt;%If&nbsp;1=WhenDue&nbsp;Then&nbsp;Response.Write"CHECKED"%&gt;&gt;月初&nbsp;<br />&nbsp;&nbsp;&lt;INPUT&nbsp;TYPE=RADIO&nbsp;NAME=WhenDue&nbsp;VALUE=0&nbsp;&lt;%If&nbsp;0=WhenDue&nbsp;Then&nbsp;Response.Write"CHECKED"%&gt;&gt;月末&nbsp;&lt;/TD&gt;<br />&nbsp;&nbsp;&lt;/TR&gt;&lt;TR&gt;&nbsp;<br />&nbsp;&nbsp;&lt;TD&gt;此储蓄帐号里现在有多少钱？&lt;/TD&gt;<br />&nbsp;&nbsp;&lt;TD&gt;&lt;INPUT&nbsp;TYPE=TEXT&nbsp;NAME=PresentSavings&nbsp;VALUE=&lt;%=PresentSavings%&gt;&gt;&nbsp;&lt;/TD&gt;<br />&nbsp;&nbsp;&lt;/TR&gt;<br />&nbsp;&nbsp;&lt;/TABLE&gt;<br />&nbsp;&nbsp;&lt;P&nbsp;align=center&gt;&lt;INPUT&nbsp;TYPE=SUBMIT&nbsp;VALUE="计算未来价值"&gt;<br />&nbsp;&nbsp;&lt;/FORM&gt;&nbsp;<br /><br />&nbsp;&nbsp;&lt;%<br />&nbsp;&nbsp;If&nbsp;(""&nbsp;=&nbsp;Payment)&nbsp;Or&nbsp;(""&nbsp;=&nbsp;AnnualIntRate)&nbsp;Or&nbsp;(""&nbsp;=&nbsp;NumPayPeriods)&nbsp;Then<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Response.Write&nbsp;"&lt;H3&nbsp;align=center&gt;尚未输入有效值。&lt;/H3&gt;"<br /><br />&nbsp;&nbsp;ElseIf&nbsp;(IsNumeric(Payment))&nbsp;And&nbsp;(IsNumeric(AnnualIntRate))&nbsp;And&nbsp;(IsNumeric(NumPayPeriods))&nbsp;Then<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;FutureValue<br />&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;oASPTut&nbsp;=&nbsp;Server.CreateObject("ASPTut.Finance")<br />&nbsp;&nbsp;&nbsp;&nbsp;oASPTut.AnnualIntRate&nbsp;=&nbsp;CDbl(AnnualIntRate)<br />&nbsp;&nbsp;&nbsp;&nbsp;oASPTut.NumPayPeriods&nbsp;=&nbsp;CInt(NumPayPeriods)<br />&nbsp;&nbsp;&nbsp;&nbsp;oASPTut.Payment&nbsp;=&nbsp;CDbl(Payment)<br />&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;Not&nbsp;""&nbsp;=&nbsp;PresentSavings&nbsp;Then&nbsp;oASPTut.PresentSavings&nbsp;=&nbsp;CDbl(PresentSavings)<br />&nbsp;&nbsp;&nbsp;&nbsp;oASPTut.WhenDue&nbsp;=&nbsp;WhenDue<br />&nbsp;&nbsp;&nbsp;&nbsp;FutureValue&nbsp;=&nbsp;oASPTut.CalcFutureValue<br />&nbsp;&nbsp;&nbsp;&nbsp;Response.Write&nbsp;"&lt;H3&nbsp;align=center&gt;未来价值&nbsp;=&nbsp;$"&nbsp;&&nbsp;FutureValue&nbsp;&&nbsp;"&lt;/H3&gt;"<br /><br />&nbsp;&nbsp;Else<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Response.Write&nbsp;"&lt;H3&nbsp;align=center&gt;某些值不是数字。&lt;/H3&gt;"<br /><br />&nbsp;&nbsp;End&nbsp;If<br /><br />&nbsp;&nbsp;%&gt;<br /><br />&nbsp;&nbsp;&lt;/FONT&gt;&nbsp;<br />&nbsp;&nbsp;&lt;/BODY&gt;&nbsp;<br />&nbsp;&nbsp;&lt;/HTML&gt;&nbsp;<br /><br />在浏览器中，您应看到下列结果：&nbsp;<br /><br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">在ASP网页中使用COM组件-统计网页的点击数</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_153.html" />
      <updated>2008-11-22 8:44:03</updated>
      <published>2008-11-22 8:44:03</published>
      <id>http://dev.mo.cn/article_153.html</id>
      <summary type="html">
      <![CDATA[了解人们请求（或点击）网页的次数可能会对您很有帮助。高流量的站点可以为您带来更多的广告收入。一些网站使用此数据按单次点击向广告用户收取统一的费用。流量信息也可说明用户在站点中浏览导航的方式，告诉您应当将广告置于何处。至于那些几乎从不被人点击的网页，说明需要对其设计进行修改。<br /><br />PageCounter&nbsp;组件使用一个内部对象在服务器上记录网页的点击数。PageCounter&nbsp;定期将所有信息保存在一个文本文件中，这样就不会因断电或系统故障而丢失任何统计数据。PageCounter&nbsp;组件使用如下三种方法：&nbsp;<br /><br />Hits&nbsp;&nbsp;&nbsp;此方法显示网页的点击次数。默认值为调用网页。&nbsp;<br />PageHit&nbsp;&nbsp;&nbsp;此方法增加当前网页的点击次数。如果需要记录&nbsp;ASP&nbsp;网页的点击次数，必须在此网页内部调用这个方法。&nbsp;<br />Reset&nbsp;&nbsp;&nbsp;此方法将网页的点击次数设置为零。默认值为调用网页。<br />将下列代码复制并粘贴到文本编辑器中，然后将此文件保存在&nbsp;x:\Inetpub\Wwwroot\Tutorial&nbsp;目录中，文件名为&nbsp;PageCounter.asp。通过在浏览器的地址栏中键入&nbsp;http://localhost/Tutorial/PageCounter.asp，可以在浏览器中查看此示例的效果。<br /><br />&nbsp;&nbsp;&lt;%@&nbsp;Language=VBScript&nbsp;%&gt;&nbsp;<br /><br />&nbsp;&nbsp;&lt;html&gt;&nbsp;<br />&nbsp;&nbsp;&lt;head&gt;&nbsp;<br />&nbsp;&nbsp;&lt;title&gt;网页计数器示例&lt;/title&gt;&nbsp;<br />&nbsp;&nbsp;&lt;/head&gt;&nbsp;<br />&nbsp;&nbsp;&lt;body&gt;&nbsp;<br />&nbsp;&nbsp;&lt;font&nbsp;face="MS&nbsp;Gothic"&gt;&nbsp;<br /><br />&nbsp;&nbsp;&lt;H3&gt;网页计数器示例&lt;/H3&gt;&nbsp;<br /><br />&nbsp;&nbsp;&lt;p&gt;&nbsp;<br />&nbsp;&nbsp;&lt;FORM&nbsp;NAME="PageCounter"&nbsp;METHOD="GET"&nbsp;ACTION="PageCounter.asp"&gt;&nbsp;<br />&nbsp;&nbsp;&lt;INPUT&nbsp;TYPE="CHECKBOX"&nbsp;NAME="reset"&nbsp;VALUE="True"&gt;是否要重新设置此网页的计数器？&lt;BR&gt;&nbsp;<br />&nbsp;&nbsp;&lt;INPUT&nbsp;TYPE="SUBMIT"&nbsp;VALUE="提交"&gt;&nbsp;<br />&nbsp;&nbsp;&lt;/FORM&gt;&nbsp;<br />&nbsp;&nbsp;&lt;/p&gt;&nbsp;<br /><br />&nbsp;&nbsp;&lt;%&nbsp;<br />&nbsp;&nbsp;&nbsp;'设置&nbsp;PageCounter&nbsp;对象的实例。&nbsp;<br />&nbsp;&nbsp;&nbsp;Set&nbsp;MyPageCounter&nbsp;=&nbsp;Server.CreateObject("MSWC.PageCounter")&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;'增加此网页的计数器值。&nbsp;<br />&nbsp;&nbsp;&nbsp;MyPageCounter.PageHit&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;If&nbsp;Request.QueryString("reset")&nbsp;=&nbsp;"True"&nbsp;Then&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'重新设置此网页的计数器。&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyPageCounter.Reset("/Tutorial/PageCounter.asp")&nbsp;<br />&nbsp;&nbsp;&nbsp;End&nbsp;If&nbsp;<br />&nbsp;&nbsp;%&gt;&nbsp;<br /><br />&nbsp;&nbsp;此网页的点击数为&nbsp;&lt;%=MyPageCounter.Hits&nbsp;%&gt;&lt;BR&gt;&nbsp;<br /><br />&nbsp;&nbsp;&lt;/font&gt;&nbsp;<br />&nbsp;&nbsp;&lt;/body&gt;&nbsp;<br />&nbsp;&nbsp;&lt;/html&gt;&nbsp;<br /><br />在浏览器中，您应该看到下列结果：<br /><br /><br />&nbsp;&nbsp;网页计数器示例<br />&nbsp;&nbsp;是否要重新设置此网页的计数器？<br />&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;此网页的点击数为&nbsp;1<br /><br /><br />单击浏览器中的“刷新”按钮或网页上的“提交”按钮，观察点击计数器值的增加过程。如果需要重新设置计数器，请选中以上复选框。&nbsp;<br /><br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">在ASP网页中使用COM组件-轮换广告</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_152.html" />
      <updated>2008-11-22 8:42:52</updated>
      <published>2008-11-22 8:42:52</published>
      <id>http://dev.mo.cn/article_152.html</id>
      <summary type="html">
      <![CDATA[广告是网站的重要业务。本教程说明了如何使用与&nbsp;IIS&nbsp;一起安装的&nbsp;Ad&nbsp;Rotator&nbsp;组件在网页上轮换广告。Ad&nbsp;Rotator&nbsp;组件在每次用户加载或刷新网页时为网页选择一个广告。另外，如果您需要更改广告，则只需要在重定向和轮换计划文件中更改此广告即可，而不必修改包含此广告的所有&nbsp;ASP&nbsp;文件。如果此广告出现在网站中的许多网页上，这样就可以节省开发时间。<br /><br />建立&nbsp;Ad&nbsp;Rotator&nbsp;组件需要两个文件：重定向文件（包含指向广告的&nbsp;URL&nbsp;链接）以及轮换计划文件（包含显示数据）。通过建立这两个文件，网站上的任何&nbsp;ASP&nbsp;网页都可调用&nbsp;Ad&nbsp;Rotator&nbsp;组件。&nbsp;<br /><br />在本教程中，您将执行下列任务：<br /><br />示例&nbsp;1&nbsp;&nbsp;&nbsp;创建一个&nbsp;Ad&nbsp;Rotator&nbsp;轮换计划文件，此文件在调用它的任何网页上创建一个广告图像链接。<br />示例&nbsp;2&nbsp;&nbsp;&nbsp;创建一个&nbsp;Ad&nbsp;Rotator&nbsp;重定向文件，此文件指定公共的广告显示数据以及每个广告的特定信息。&nbsp;<br />示例&nbsp;3&nbsp;&nbsp;&nbsp;创建一个包含文件以保存&nbsp;Ad&nbsp;Rotator&nbsp;调用代码。&nbsp;<br />示例&nbsp;4&nbsp;&nbsp;&nbsp;创建一个调用&nbsp;Ad&nbsp;Rotator&nbsp;组件的&nbsp;ASP&nbsp;网页来显示和轮换广告，从而测试&nbsp;Ad&nbsp;Rotator。本示例要求首先完成示例&nbsp;1、2、3。<br /><br />示例&nbsp;1：创建一个&nbsp;Ad&nbsp;Rotator&nbsp;轮换计划文件<br />轮换计划文件用于为要显示的广告编录信息，这些信息包括单击广告后的重定向信息、要显示的广告的大小、要显示的图象、广告的注释，以及表明特定广告被选中的频率的数字。在&nbsp;ASP&nbsp;网页中调用&nbsp;Ad&nbsp;Rotator&nbsp;组件的方法时，组件会使用此文件来选择要显示的广告。&nbsp;<br /><br />轮换计划文件用星号&nbsp;(*)&nbsp;分成两节。第一节提供了所有广告的公共信息，第二节则列出了每个广告的特定数据。若要测试轮换计划文件，您可以使用&nbsp;Microsoft.com&nbsp;上的一些图像作为广告图像。下列列表概述了轮换计划文件的结构：&nbsp;<br /><br />第&nbsp;1&nbsp;节<br />Redirection&nbsp;&nbsp;&nbsp;URL&nbsp;形式的、可在显示广告前执行的&nbsp;ASP&nbsp;文件的路径和名称。此文件可用于记录单击广告的用户的有关信息。您可以记录客户端&nbsp;IP&nbsp;地址、客户端看到的广告所在的网页、广告点击的频率等信息。如果没有任何&nbsp;URL&nbsp;与第&nbsp;2&nbsp;节中的广告相关联，ASP&nbsp;文件也可以处理这种情况。在按广告点击次数向广告客户收费时，最好能够向客户证明这些点击不是同一位用户反复点击“刷新”的结果。&nbsp;<br />Width&nbsp;&nbsp;&nbsp;每个广告图像的宽度，以像素为单位。默认值为&nbsp;440。&nbsp;<br />Height&nbsp;&nbsp;&nbsp;每个广告图像的高度，以像素为单位。&nbsp;默认值为&nbsp;60。&nbsp;<br />Border&nbsp;&nbsp;&nbsp;环绕在每个广告图像周围的边框宽度。默认值为&nbsp;1。&nbsp;<br />星号&nbsp;(*)&nbsp;&nbsp;&nbsp;将第&nbsp;1&nbsp;节与第&nbsp;2&nbsp;节分开。此字符必须独立成行。<br />第&nbsp;2&nbsp;节<br />您需要为每个广告提供下列信息：&nbsp;<br /><br />图像&nbsp;URL&nbsp;&nbsp;&nbsp;广告的图像文件的虚拟路径和文件名。&nbsp;<br />广告客户主页的&nbsp;URL&nbsp;&nbsp;&nbsp;选择此链接时跳转到的&nbsp;URL。如果没有链接，请使用连字符&nbsp;(-)。&nbsp;<br />文本&nbsp;&nbsp;&nbsp;浏览器不支持图片时显示的文字。&nbsp;<br />印记&nbsp;&nbsp;&nbsp;一个整数，表示&nbsp;Ad&nbsp;Rotator&nbsp;组件选择广告时选中此广告的相对几率。例如，如果列出两个广告，印记值为&nbsp;3&nbsp;的广告被选中的几率为&nbsp;30%，而印记值为&nbsp;7&nbsp;的广告被选中的几率为&nbsp;70%。在本示例中，Ad&nbsp;Rotator&nbsp;组件选中&nbsp;Microsoft&nbsp;Windows&reg;&nbsp;广告的几率为&nbsp;2/5，而选中&nbsp;Microsoft&nbsp;Office&nbsp;广告的几率为&nbsp;3/5。&nbsp;<br />将下列代码复制并粘贴到文本编辑器中，然后将此文件保存在&nbsp;x:\Inetpub\Wwwroot\Tutorial&nbsp;目录中，文件名为&nbsp;MyAdRot.txt。&nbsp;<br /><br />&nbsp;&nbsp;REDIRECT&nbsp;AdRotRedirect.asp&nbsp;<br />&nbsp;&nbsp;WIDTH&nbsp;250&nbsp;<br />&nbsp;&nbsp;HEIGHT&nbsp;60&nbsp;<br />&nbsp;&nbsp;BORDER&nbsp;0&nbsp;<br />&nbsp;&nbsp;*&nbsp;<br />&nbsp;&nbsp;http://www.microsoft.com/windows/images/bnrWinfam.gif&nbsp;<br />&nbsp;&nbsp;http://www.microsoft.com/windows&nbsp;<br />&nbsp;&nbsp;Microsoft&nbsp;Windows&nbsp;<br />&nbsp;&nbsp;2&nbsp;<br />&nbsp;&nbsp;http://www.microsoft.com/office/images/office_logo.gif&nbsp;<br />&nbsp;&nbsp;http://www.microsoft.com/office&nbsp;<br />&nbsp;&nbsp;Office&nbsp;2000&nbsp;<br />&nbsp;&nbsp;3&nbsp;<br /><br />&nbsp;&nbsp;<br /><br />示例&nbsp;2：创建一个&nbsp;Ad&nbsp;Rotator&nbsp;重定向文件&nbsp;<br />用户单击广告时，用&nbsp;ASP&nbsp;编写的&nbsp;Ad&nbsp;Rotator&nbsp;重定向文件可以在显示广告之前，捕获某些信息，并将这些信息写入一个文件。&nbsp;<br /><br />要使其生效，x:\InetPub\Wwwroot\Tutorial&nbsp;文件夹必须为&nbsp;IUSR_ComputerName&nbsp;和&nbsp;IWAM_ComputerName&nbsp;帐号授予读/写的访问权限。您也可以使用本教程单元&nbsp;1&nbsp;第&nbsp;3&nbsp;课中的代码将此信息写入一个&nbsp;Microsoft&nbsp;Access&nbsp;数据库。&nbsp;<br /><br />将下列代码复制并粘贴到文本编辑器中，然后将此文件保存在&nbsp;x:\Inetpub\Wwwroot\Tutorial&nbsp;目录中，文件名为&nbsp;AdRotRedirect.asp。&nbsp;<br /><br />&nbsp;&nbsp;&lt;%@&nbsp;Language=VBScript&nbsp;%&gt;&nbsp;<br /><br />&nbsp;&nbsp;&lt;html&gt;&nbsp;<br />&nbsp;&nbsp;&lt;head&gt;&nbsp;<br />&nbsp;&nbsp;&lt;title&gt;AdRotRedirect&nbsp;file&lt;/title&gt;&nbsp;<br />&nbsp;&nbsp;&lt;/head&gt;&nbsp;<br />&nbsp;&nbsp;&lt;body&gt;&nbsp;<br /><br />&nbsp;&nbsp;&lt;%&nbsp;<br />&nbsp;&nbsp;&nbsp;'创建一些变量。&nbsp;<br />&nbsp;&nbsp;&nbsp;dim&nbsp;strLogFile&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;'获取&nbsp;Web&nbsp;目录的物理路径，这样我们就可以知道此路径确实存在。&nbsp;<br />&nbsp;&nbsp;&nbsp;'ASP&nbsp;Server&nbsp;对象有许多有用的方法。&nbsp;<br />&nbsp;&nbsp;&nbsp;strLogFile&nbsp;=&nbsp;Server.MapPath(".")&&nbsp;"\AdRotLog.txt"&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;'设置一些用于处理文件的常量。&nbsp;<br />&nbsp;&nbsp;&nbsp;Const&nbsp;cForAppending&nbsp;=&nbsp;8&nbsp;<br />&nbsp;&nbsp;&nbsp;Const&nbsp;cTristateUseDefault&nbsp;=&nbsp;-2&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;'创建一个&nbsp;FileSystemObject&nbsp;对象，&nbsp;<br />&nbsp;&nbsp;&nbsp;'此对象使您能够对系统中的文件和文件夹进行访问。&nbsp;<br />&nbsp;&nbsp;&nbsp;Set&nbsp;fsoObject&nbsp;=&nbsp;Server.CreateObject("Scripting.FileSystemObject")&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;'打开指向此文件的句柄。&nbsp;<br />&nbsp;&nbsp;&nbsp;'True&nbsp;表示如果此文件不存在，则创建此文件。&nbsp;<br />&nbsp;&nbsp;&nbsp;Set&nbsp;tsObject&nbsp;=&nbsp;fsoObject.OpenTextFile(strLogFile,&nbsp;cForAppending,&nbsp;True)&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;'记录刚刚单击广告的用户的数据。&nbsp;<br />&nbsp;&nbsp;&nbsp;'我们已经使用过&nbsp;ASP&nbsp;Request&nbsp;对象的&nbsp;Write&nbsp;方法。&nbsp;<br />&nbsp;&nbsp;&nbsp;'ASP&nbsp;Request&nbsp;对象的&nbsp;ServerVariables&nbsp;集合可以保存&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;'向&nbsp;Web&nbsp;服务器发出的每个请求的大量有关数据。&nbsp;<br />&nbsp;&nbsp;&nbsp;tsObject.WriteLine&nbsp;"--------------------"&nbsp;<br />&nbsp;&nbsp;&nbsp;tsObject.WriteLine&nbsp;Date&nbsp;&&nbsp;",&nbsp;"&nbsp;&&nbsp;Time&nbsp;<br />&nbsp;&nbsp;&nbsp;tsObject.WriteLine&nbsp;Request.ServerVariables("LOGON_USER")&nbsp;<br />&nbsp;&nbsp;&nbsp;tsObject.WriteLine&nbsp;Request.ServerVariables("REMOTE_ADDR")&nbsp;<br />&nbsp;&nbsp;&nbsp;tsObject.WriteLine&nbsp;Request.QueryString("url")&nbsp;<br />&nbsp;&nbsp;&nbsp;tsObject.WriteLine&nbsp;Request.ServerVariables("HTTP_REFERER")&nbsp;<br />&nbsp;&nbsp;&nbsp;tsObject.WriteLine&nbsp;Request.ServerVariables("HTTP_USER_AGENT")&nbsp;<br />&nbsp;&nbsp;&nbsp;tsObject.Close&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;'使用&nbsp;ASP&nbsp;Response&nbsp;对象的&nbsp;Redirect&nbsp;方法<br />&nbsp;&nbsp;&nbsp;'重定向到广告客户的网站。&nbsp;<br />&nbsp;&nbsp;&nbsp;'AdRotator&nbsp;组件调用&nbsp;AdRotRedirect.asp&nbsp;时，&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;'会自动将广告客户的&nbsp;URL&nbsp;传入到&nbsp;QueryString&nbsp;中。&nbsp;<br />&nbsp;&nbsp;&nbsp;Response.Redirect&nbsp;Request.QueryString("url")&nbsp;<br />&nbsp;&nbsp;%&gt;&nbsp;<br /><br />&nbsp;&nbsp;&lt;/body&gt;&nbsp;<br />&nbsp;&nbsp;&lt;/html&gt;&nbsp;<br /><br />&nbsp;&nbsp;<br /><br />示例&nbsp;3：创建一个&nbsp;Ad&nbsp;Rotator&nbsp;包含文件&nbsp;<br />包含文件可以存储那些要用于多个&nbsp;ASP&nbsp;或&nbsp;HTML&nbsp;文件的代码。将&nbsp;Ad&nbsp;Rotator&nbsp;代码放入包含文件中的一个简单函数将非常有用。利用&nbsp;Ad&nbsp;Rotator&nbsp;包含文件，您在希望显示一个广告时，只需要从任何&nbsp;ASP&nbsp;或&nbsp;HTML&nbsp;文件进行一次函数调用即可。您也可以将包含文件中的代码放入每一个要显示广告的&nbsp;ASP&nbsp;文件中。但是，这种情况下，如果需要修改此代码，就必须修改每一个&nbsp;ASP&nbsp;文件，而不是仅仅在一个包含文件中进行修改。&nbsp;<br /><br />在本示例中，您将创建一个&nbsp;Ad&nbsp;Rotator&nbsp;包含文件，其中包含一个函数，名为&nbsp;GetAd。此函数随机选择将显示在&nbsp;ASP&nbsp;网页上的广告。&nbsp;<br /><br />将下列代码复制并粘贴到文本编辑器中，然后将此文件保存在&nbsp;x:\Inetpub\Wwwroot\Tutorial&nbsp;目录中，文件名为&nbsp;AdRotatorLogic.inc。&nbsp;<br /><br />&nbsp;&nbsp;&lt;%&nbsp;<br />&nbsp;&nbsp;&nbsp;Function&nbsp;GetAd()&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dim&nbsp;objLoad&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'创建一个&nbsp;AdRotator&nbsp;组件的实例。&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;objLoad&nbsp;=&nbsp;Server.CreateObject("MSWC.AdRotator")&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'设置&nbsp;TargetFrame&nbsp;属性（如果有）。如果网页使用框架，&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'将在这个框架中打开此&nbsp;URL。&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'如果&nbsp;HTML&nbsp;网页没有找到这个&nbsp;TARGET&nbsp;名称，<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'则将在新窗口中打开此&nbsp;URL。&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objLoad.TargetFrame&nbsp;=&nbsp;"TARGET=new"&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'设置一个其他的&nbsp;AdRotator&nbsp;属性。&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objLoad.Border&nbsp;=&nbsp;1&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'从文本文件获取随机广告。&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetAd&nbsp;=&nbsp;objLoad.GetAdvertisement("MyAdRot.txt")&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;End&nbsp;Function&nbsp;<br />&nbsp;&nbsp;%&gt;&nbsp;<br /><br />&nbsp;&nbsp;<br /><br />示例&nbsp;4：测试&nbsp;Ad&nbsp;Rotator<br />若要测试建立在&nbsp;Ad&nbsp;Rotator&nbsp;组件基础之上的应用程序，您需要一个&nbsp;ASP&nbsp;网页用来调用所创建的&nbsp;Ad&nbsp;Rotator&nbsp;包含文件中的函数。&nbsp;<br /><br />将下列代码复制并粘贴到文本编辑器中，然后将此文件保存在&nbsp;x:\Inetpub\Wwwroot\Tutorial&nbsp;目录中，文件名为&nbsp;DisplayAds.asp。通过在浏览器地址栏中键入&nbsp;http://localhost/Tutorial/DisplayAds.asp，可以在浏览器中查看此示例的效果。<br /><br />&nbsp;&nbsp;&lt;%@&nbsp;Language=VBScript&nbsp;%&gt;&nbsp;<br /><br />&nbsp;&nbsp;&lt;html&gt;&nbsp;<br />&nbsp;&nbsp;&lt;head&gt;&nbsp;<br />&nbsp;&nbsp;&lt;title&gt;显示一个广告&lt;/title&gt;&nbsp;<br />&nbsp;&nbsp;&lt;/head&gt;&nbsp;<br />&nbsp;&nbsp;&lt;body&gt;&nbsp;<br /><br />&nbsp;&nbsp;&lt;font&nbsp;face="MS&nbsp;Gothic"&gt;&nbsp;<br />&nbsp;&nbsp;&lt;h2&gt;显示一个广告&lt;/h2&gt;&nbsp;<br /><br />&nbsp;&nbsp;&lt;comment&gt;包括您创建的文件以获取广告。&lt;/comment&gt;&nbsp;<br />&nbsp;&nbsp;&lt;!--#include&nbsp;File&nbsp;=&nbsp;"AdRotatorLogic.inc"&nbsp;--&gt;&nbsp;<br /><br />&nbsp;&nbsp;&lt;comment&gt;调用包含文件中的函数。&lt;/comment&gt;&nbsp;<br />&nbsp;&nbsp;&lt;%=GetAd()%&gt;&nbsp;<br /><br />&nbsp;&nbsp;&lt;/font&gt;&nbsp;<br />&nbsp;&nbsp;&lt;/body&gt;&nbsp;<br />&nbsp;&nbsp;&lt;/html&gt;&nbsp;<br /><br />&nbsp;<br />在浏览器中单击“刷新”按钮大约&nbsp;20&nbsp;次，观察广告的变化。单击此广告，看看&nbsp;AdRotRedirect.asp&nbsp;如何将您重定向到广告用户的网站。打开&nbsp;AdRotLog.txt&nbsp;查看单击广告时记录的信息。&nbsp;<br /><br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">利用JQuery实现简单AJAX</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_151.html" />
      <updated>2008-10-29 17:00:46</updated>
      <published>2008-10-29 17:00:46</published>
      <id>http://dev.mo.cn/article_151.html</id>
      <summary type="html">
      <![CDATA[简单的ajax示例,其中jquery-1.2.6.pack.js包可以到这里来下载<br /><a href="http://dev.mo.cn/detial.asp?id=160" target="new"><span style="color:Red;">jquery-1.2.6.pack.js</span></a><br />解压后,里面的jquery1.26.rar就有本文件，是压缩版<br /><br />下面是具体代码<br /><br />example.html文件内容<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;实例&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;script&nbsp;language="javascript"&nbsp;src="jquery-1.2.6.pack.js"&gt;&lt;/script&gt;<br />&lt;script&nbsp;language="javascript"&nbsp;src="code.js"&gt;&lt;/script&gt;<br />&lt;body&gt;<br />&lt;div&nbsp;id="msg"&gt;<br />msg<br />&lt;/div&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</div></div><br /><br /><br />code.js的内容<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">$(document).ready(function(){<br />&nbsp; &nbsp; &nbsp; &nbsp; $("#msg").css({<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; "width":"800px",<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "border":"1px&nbsp;#dddddd&nbsp;solid"<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; });<br />&nbsp; &nbsp; &nbsp; &nbsp; $("#msg").ajaxStart(function(){$(this).html("请求中...")});<br />&nbsp; &nbsp; &nbsp; &nbsp; $("#msg").hide().fadeIn("slow");<br />&nbsp; &nbsp; &nbsp; &nbsp; $.ajax({<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; type:&nbsp;"get",<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; url:&nbsp;"http://dev.mo.cn",<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; data:&nbsp;&nbsp;&nbsp;"name=John&location=Boston",<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; success:&nbsp;function(msg){$("#msg").html(msg).hide().fadeIn("slow");}&nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });&nbsp;<br />});</div></div>]]>
      </summary>
      <category term="" label="JavaScript/DOM" scheme="http://dev.mo.cn/cat_diary_9.html" />
   </entry>
   <entry>
      <title type="html">任意拖动层(DIV)JS代码</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_150.html" />
      <updated>2008-10-17 18:39:07</updated>
      <published>2008-10-17 18:39:07</published>
      <id>http://dev.mo.cn/article_150.html</id>
      <summary type="html">
      <![CDATA[任意拖动层(DIV)的代码,调用方法有点复杂！<br /><br /><br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;html&gt;<br /><br />&lt;head&gt;<br /><br />&lt;title&gt;层拖动代码&lt;/title&gt;<br /><br />&lt;script&nbsp;type="text/javascript"&gt;<br /><br />&lt;!--<br /><br />function&nbsp;MM_findObj(n,&nbsp;d)&nbsp;{&nbsp;//v3.0<br /><br />&nbsp;&nbsp;var&nbsp;p,i,x;&nbsp;&nbsp;if(!d)&nbsp;d=document;&nbsp;if((p=n.indexOf("?"))&gt;0&&parent.frames.length)&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;d=parent.frames[n.substring(p+1)].document;&nbsp;n=n.substring(0,p);}<br /><br />&nbsp;&nbsp;if(!(x=d[n])&&d.all)&nbsp;x=d.all[n];&nbsp;for&nbsp;(i=0;!x&&i&lt;d.forms.length;i++)&nbsp;x=d.forms[&nbsp;i][n];<br /><br />&nbsp;&nbsp;for(i=0;!x&&d.layers&&i&lt;d.layers.length;i++)&nbsp;x=MM_findObj(n,d.layers[&nbsp;i].document);&nbsp;return&nbsp;x;<br /><br />}<br /><br /><br /><br />function&nbsp;MM_dragLayer(objName,x,hL,hT,hW,hH,toFront,dropBack,cU,cD,cL,cR,targL,targT,tol,dropJS,et,dragJS)&nbsp;{&nbsp;//v3.0<br /><br />&nbsp;&nbsp;//Copyright&nbsp;1998&nbsp;Macromedia,&nbsp;Inc.&nbsp;All&nbsp;rights&nbsp;reserved.<br /><br />&nbsp;&nbsp;var&nbsp;i,j,aLayer,retVal,curDrag=null,NS=(navigator.appName=='Netscape'),&nbsp;curLeft,&nbsp;curTop;<br /><br />&nbsp;&nbsp;if&nbsp;(!document.all&nbsp;&&&nbsp;!document.layers)&nbsp;return&nbsp;false;<br /><br />&nbsp;&nbsp;retVal&nbsp;=&nbsp;true;&nbsp;if(!NS&nbsp;&&&nbsp;event)&nbsp;event.returnValue&nbsp;=&nbsp;true;<br /><br />&nbsp;&nbsp;if&nbsp;(MM_dragLayer.arguments.length&nbsp;&gt;&nbsp;1)&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;curDrag&nbsp;=&nbsp;MM_findObj(objName);&nbsp;if&nbsp;(!curDrag)&nbsp;return&nbsp;false;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!document.allLayers)&nbsp;{&nbsp;document.allLayers&nbsp;=&nbsp;new&nbsp;Array();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;(document)&nbsp;if&nbsp;(NS)&nbsp;{&nbsp;for&nbsp;(i=0;&nbsp;i&lt;layers.length;&nbsp;i++)&nbsp;allLayers[&nbsp;i]=layers[&nbsp;i];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i=0;&nbsp;i&lt;allLayers.length;&nbsp;i++)&nbsp;if&nbsp;(allLayers[&nbsp;i].document&nbsp;&&&nbsp;allLayers[&nbsp;i].document.layers)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;(allLayers[&nbsp;i].document)&nbsp;for&nbsp;(j=0;&nbsp;j&lt;layers.length;&nbsp;j++)&nbsp;allLayers[allLayers.length]=layers[j];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;for&nbsp;(i=0;i&lt;all.length;i++)&nbsp;if&nbsp;(all[&nbsp;i].style&&all[&nbsp;i].style.position)&nbsp;allLayers[allLayers.length]=all[&nbsp;i];}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;curDrag.MM_dragOk=true;&nbsp;curDrag.MM_targL=targL;&nbsp;curDrag.MM_targT=targT;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;curDrag.MM_tol=Math.pow(tol,2);&nbsp;curDrag.MM_hLeft=hL;&nbsp;curDrag.MM_hTop=hT;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;curDrag.MM_hWidth=hW;&nbsp;curDrag.MM_hHeight=hH;&nbsp;curDrag.MM_toFront=toFront;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;curDrag.MM_dropBack=dropBack;&nbsp;curDrag.MM_dropJS=dropJS;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;curDrag.MM_everyTime=et;&nbsp;curDrag.MM_dragJS=dragJS;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;curDrag.MM_oldZ&nbsp;=&nbsp;(NS)?curDrag.zIndex:curDrag.style.zIndex;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;curLeft=&nbsp;(NS)?curDrag.left:curDrag.style.pixelLeft;&nbsp;curDrag.MM_startL&nbsp;=&nbsp;curLeft;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;curTop&nbsp;=&nbsp;(NS)?curDrag.top:curDrag.style.pixelTop;&nbsp;curDrag.MM_startT&nbsp;=&nbsp;curTop;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;curDrag.MM_bL=(cL&lt;0)?null:curLeft-cL;&nbsp;curDrag.MM_bT=(cU&lt;0)?null:curTop&nbsp;-cU;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;curDrag.MM_bR=(cR&lt;0)?null:curLeft+cR;&nbsp;curDrag.MM_bB=(cD&lt;0)?null:curTop&nbsp;+cD;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;curDrag.MM_LEFTRIGHT=0;&nbsp;curDrag.MM_UPDOWN=0;&nbsp;curDrag.MM_SNAPPED=false;&nbsp;//use&nbsp;in&nbsp;your&nbsp;JS!<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;document.onmousedown&nbsp;=&nbsp;MM_dragLayer;&nbsp;document.onmouseup&nbsp;=&nbsp;MM_dragLayer;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(NS)&nbsp;document.captureEvents(Event.MOUSEDOWN|Event.MOUSEUP);<br /><br />&nbsp;&nbsp;}&nbsp;else&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;theEvent&nbsp;=&nbsp;((NS)?objName.type:event.type);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(theEvent&nbsp;==&nbsp;'mousedown')&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;mouseX&nbsp;=&nbsp;(NS)?objName.pageX&nbsp;:&nbsp;event.clientX&nbsp;+&nbsp;document.body.scrollLeft;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;mouseY&nbsp;=&nbsp;(NS)?objName.pageY&nbsp;:&nbsp;event.clientY&nbsp;+&nbsp;document.body.scrollTop;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;maxDragZ=null;&nbsp;document.MM_maxZ&nbsp;=&nbsp;0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i=0;&nbsp;i&lt;document.allLayers.length;&nbsp;i++)&nbsp;{&nbsp;aLayer&nbsp;=&nbsp;document.allLayers[&nbsp;i];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;aLayerZ&nbsp;=&nbsp;(NS)?aLayer.zIndex:aLayer.style.zIndex;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(aLayerZ&nbsp;&gt;&nbsp;document.MM_maxZ)&nbsp;document.MM_maxZ&nbsp;=&nbsp;aLayerZ;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;isVisible&nbsp;=&nbsp;(((NS)?aLayer.visibility:aLayer.style.visibility).indexOf('hid')&nbsp;==&nbsp;-1);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(aLayer.MM_dragOk&nbsp;!=&nbsp;null&nbsp;&&&nbsp;isVisible)&nbsp;with&nbsp;(aLayer)&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;parentL=0;&nbsp;var&nbsp;parentT=0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!NS)&nbsp;{&nbsp;parentLayer&nbsp;=&nbsp;aLayer.parentElement;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(parentLayer&nbsp;!=&nbsp;null&nbsp;&&&nbsp;parentLayer.style.position)&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parentL&nbsp;+=&nbsp;parentLayer.offsetLeft;&nbsp;parentT&nbsp;+=&nbsp;parentLayer.offsetTop;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parentLayer&nbsp;=&nbsp;parentLayer.parentElement;&nbsp;}&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;tmpX=mouseX-(((NS)?pageX:style.pixelLeft+parentL)+MM_hLeft);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;tmpY=mouseY-(((NS)?pageY:style.pixelTop&nbsp;+parentT)+MM_hTop);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;tmpW&nbsp;=&nbsp;MM_hWidth;&nbsp;&nbsp;if&nbsp;(tmpW&nbsp;&lt;=&nbsp;0)&nbsp;tmpW&nbsp;+=&nbsp;((NS)?clip.width&nbsp;:offsetWidth);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;tmpH&nbsp;=&nbsp;MM_hHeight;&nbsp;if&nbsp;(tmpH&nbsp;&lt;=&nbsp;0)&nbsp;tmpH&nbsp;+=&nbsp;((NS)?clip.height:offsetHeight);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((0&nbsp;&lt;=&nbsp;tmpX&nbsp;&&&nbsp;tmpX&nbsp;&lt;&nbsp;tmpW&nbsp;&&&nbsp;0&nbsp;&lt;=&nbsp;tmpY&nbsp;&&&nbsp;tmpY&nbsp;&lt;&nbsp;tmpH)&nbsp;&&&nbsp;(maxDragZ&nbsp;==&nbsp;null<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||&nbsp;maxDragZ&nbsp;&lt;=&nbsp;aLayerZ))&nbsp;{&nbsp;curDrag&nbsp;=&nbsp;aLayer;&nbsp;maxDragZ&nbsp;=&nbsp;aLayerZ;&nbsp;}&nbsp;}&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(curDrag)&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.onmousemove&nbsp;=&nbsp;MM_dragLayer;&nbsp;if&nbsp;(NS)&nbsp;document.captureEvents(Event.MOUSEMOVE);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curLeft&nbsp;=&nbsp;(NS)?curDrag.left:curDrag.style.pixelLeft;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curTop&nbsp;=&nbsp;(NS)?curDrag.top:curDrag.style.pixelTop;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MM_oldX&nbsp;=&nbsp;mouseX&nbsp;-&nbsp;curLeft;&nbsp;MM_oldY&nbsp;=&nbsp;mouseY&nbsp;-&nbsp;curTop;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.MM_curDrag&nbsp;=&nbsp;curDrag;&nbsp;&nbsp;curDrag.MM_SNAPPED=false;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(curDrag.MM_toFront)&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eval('curDrag.'+((NS)?'':'style.')+'zIndex=document.MM_maxZ+1');<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!curDrag.MM_dropBack)&nbsp;document.MM_maxZ++;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;retVal&nbsp;=&nbsp;false;&nbsp;if(!NS)&nbsp;event.returnValue&nbsp;=&nbsp;false;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;}&nbsp;else&nbsp;if&nbsp;(theEvent&nbsp;==&nbsp;'mousemove')&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(document.MM_curDrag)&nbsp;with&nbsp;(document.MM_curDrag)&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;mouseX&nbsp;=&nbsp;(NS)?objName.pageX&nbsp;:&nbsp;event.clientX&nbsp;+&nbsp;document.body.scrollLeft;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;mouseY&nbsp;=&nbsp;(NS)?objName.pageY&nbsp;:&nbsp;event.clientY&nbsp;+&nbsp;document.body.scrollTop;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newLeft&nbsp;=&nbsp;mouseX-MM_oldX;&nbsp;newTop&nbsp;&nbsp;=&nbsp;mouseY-MM_oldY;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(MM_bL!=null)&nbsp;newLeft&nbsp;=&nbsp;Math.max(newLeft,MM_bL);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(MM_bR!=null)&nbsp;newLeft&nbsp;=&nbsp;Math.min(newLeft,MM_bR);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(MM_bT!=null)&nbsp;newTop&nbsp;&nbsp;=&nbsp;Math.max(newTop&nbsp;,MM_bT);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(MM_bB!=null)&nbsp;newTop&nbsp;&nbsp;=&nbsp;Math.min(newTop&nbsp;,MM_bB);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MM_LEFTRIGHT&nbsp;=&nbsp;newLeft-MM_startL;&nbsp;MM_UPDOWN&nbsp;=&nbsp;newTop-MM_startT;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(NS)&nbsp;{left&nbsp;=&nbsp;newLeft;&nbsp;top&nbsp;=&nbsp;newTop;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;{style.pixelLeft&nbsp;=&nbsp;newLeft;&nbsp;style.pixelTop&nbsp;=&nbsp;newTop;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(MM_dragJS)&nbsp;eval(MM_dragJS);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;retVal&nbsp;=&nbsp;false;&nbsp;if(!NS)&nbsp;event.returnValue&nbsp;=&nbsp;false;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;}&nbsp;else&nbsp;if&nbsp;(theEvent&nbsp;==&nbsp;'mouseup')&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.onmousemove&nbsp;=&nbsp;null;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(NS)&nbsp;document.releaseEvents(Event.MOUSEMOVE);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(NS)&nbsp;document.captureEvents(Event.MOUSEDOWN);&nbsp;//for&nbsp;mac&nbsp;NS<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(document.MM_curDrag)&nbsp;with&nbsp;(document.MM_curDrag)&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(typeof&nbsp;MM_targL&nbsp;=='number'&nbsp;&&&nbsp;typeof&nbsp;MM_targT&nbsp;==&nbsp;'number'&nbsp;&&<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Math.pow(MM_targL-((NS)?left:style.pixelLeft),2)+<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Math.pow(MM_targT-((NS)?top:style.pixelTop),2))&lt;=MM_tol)&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(NS)&nbsp;{left&nbsp;=&nbsp;MM_targL;&nbsp;top&nbsp;=&nbsp;MM_targT;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;{style.pixelLeft&nbsp;=&nbsp;MM_targL;&nbsp;style.pixelTop&nbsp;=&nbsp;MM_targT;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MM_SNAPPED&nbsp;=&nbsp;true;&nbsp;MM_LEFTRIGHT&nbsp;=&nbsp;MM_startL-MM_targL;&nbsp;MM_UPDOWN&nbsp;=&nbsp;MM_startT-MM_targT;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(MM_everyTime&nbsp;||&nbsp;MM_SNAPPED)&nbsp;eval(MM_dropJS);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(MM_dropBack)&nbsp;{if&nbsp;(NS)&nbsp;zIndex&nbsp;=&nbsp;MM_oldZ;&nbsp;else&nbsp;style.zIndex&nbsp;=&nbsp;MM_oldZ;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;retVal&nbsp;=&nbsp;false;&nbsp;if(!NS)&nbsp;event.returnValue&nbsp;=&nbsp;false;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.MM_curDrag&nbsp;=&nbsp;null;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(NS)&nbsp;document.routeEvent(objName);<br /><br />&nbsp;&nbsp;}&nbsp;return&nbsp;retVal;<br /><br />}<br /><br />//--&gt;<br /><br />&lt;/script&gt;<br /><br />&lt;/head&gt;<br /><br />&lt;body&nbsp;onLoad="MM_dragLayer('Layer1','',0,0,0,0,true,false,-1,-1,-1,-1,false,false,0,'',false,'')"&gt;<br /><br />&lt;div&nbsp;id="Layer1"&nbsp;style="position:absolute;border:1px&nbsp;#dddddd&nbsp;solid;border-top:10px&nbsp;#dddddd&nbsp;solid;width:300px;height:200px;"&gt;<br /><br /><br /><br />&lt;/div&gt;<br /><br />&lt;/body&gt;<br /><br />&lt;/html&gt;</div></div>]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">简单的服务器组件支持情况查询</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_149.html" />
      <updated>2008-10-17 14:11:28</updated>
      <published>2008-10-17 14:11:28</published>
      <id>http://dev.mo.cn/article_149.html</id>
      <summary type="html">
      <![CDATA[<div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;table&nbsp;cellspacing=1&nbsp;cellpadding=1&nbsp;border=1&nbsp;width=700&nbsp;align=center&nbsp;bordercolor=#eeeeee&nbsp;&gt;<br />&lt;tr&gt;<br />&lt;td&nbsp;colspan="2"&nbsp;height="25"&nbsp;align=center&gt;组件支持情况&lt;/td&gt;<br />&lt;/tr&gt;<br />&lt;%<br />Dim&nbsp;theInstalledObjects(16)<br />theInstalledObjects(0)&nbsp;=&nbsp;"MSWC.AdRotator"<br />theInstalledObjects(1)&nbsp;=&nbsp;"MSWC.BrowserType"<br />theInstalledObjects(2)&nbsp;=&nbsp;"MSWC.NextLink"<br />theInstalledObjects(3)&nbsp;=&nbsp;"MSWC.Tools"<br />theInstalledObjects(4)&nbsp;=&nbsp;"MSWC.Status"<br />theInstalledObjects(5)&nbsp;=&nbsp;"MSWC.Counters"<br />theInstalledObjects(6)&nbsp;=&nbsp;"MSWC.PermissionChecker"<br />theInstalledObjects(7)&nbsp;=&nbsp;"Scripting.FileSystemObject"<br />theInstalledObjects(8)&nbsp;=&nbsp;"adodb.connection"<br />theInstalledObjects(9)&nbsp;=&nbsp;"SoftArtisans.FileUp"<br />theInstalledObjects(10)&nbsp;=&nbsp;"SoftArtisans.FileManager"<br />theInstalledObjects(11)&nbsp;=&nbsp;"JMail.Message"<br />theInstalledObjects(12)&nbsp;=&nbsp;"CDONTS.NewMail"<br />theInstalledObjects(13)&nbsp;=&nbsp;"Persits.MailSender"<br />theInstalledObjects(14)&nbsp;=&nbsp;"LyfUpload.UploadFile"<br />theInstalledObjects(15)&nbsp;=&nbsp;"Persits.Upload.1"<br />theInstalledObjects(16)&nbsp;=&nbsp;"w3.upload"<br />For&nbsp;i=0&nbsp;to&nbsp;16<br />Response.Write&nbsp;"&lt;TR&nbsp;class=lanyuds&gt;&lt;TD&nbsp;width='57%'&gt;&nbsp;"&nbsp;&&nbsp;theInstalledObjects(i)&nbsp;&&nbsp;"&lt;font&nbsp;color=888888&gt;&nbsp;"<br />select&nbsp;case&nbsp;i<br />case&nbsp;7<br />Response.Write&nbsp;"(FSO&nbsp;文本文件读写)"<br />case&nbsp;8<br />Response.Write&nbsp;"(ACCESS&nbsp;数据库)"<br />case&nbsp;9<br />Response.Write&nbsp;"(SA-FileUp&nbsp;文件上传)"<br />case&nbsp;10<br />Response.Write&nbsp;"(SA-FM&nbsp;文件管理)"<br />case&nbsp;11<br />Response.Write&nbsp;"(JMail&nbsp;邮件发送)"<br />case&nbsp;12<br />Response.Write&nbsp;"(WIN虚拟SMTP&nbsp;发信)"<br />case&nbsp;13<br />Response.Write&nbsp;"(ASPEmail&nbsp;邮件发送)"<br />case&nbsp;14<br />Response.Write&nbsp;"(LyfUpload&nbsp;文件上传)"<br />case&nbsp;15<br />Response.Write&nbsp;"(ASPUpload&nbsp;文件上传)"<br />case&nbsp;16<br />Response.Write&nbsp;"(w3&nbsp;upload&nbsp;文件上传)"<br />end&nbsp;select<br />Response.Write&nbsp;"&lt;/font&gt;&lt;/td&gt;&lt;td&nbsp;height=25&nbsp;width='41%'&nbsp;align=center&gt;"<br />If&nbsp;Not&nbsp;IsObjInstalled(theInstalledObjects(i))&nbsp;Then<br />Response.Write&nbsp;"&lt;font&nbsp;color=red&gt;&lt;b&gt;×&lt;/b&gt;&lt;/font&gt;"<br />Else<br />Response.Write&nbsp;"&lt;b&gt;√&lt;/b&gt;&nbsp;"&nbsp;&&nbsp;getver(theInstalledObjects(i))&nbsp;&&nbsp;""<br />End&nbsp;If<br />Response.Write&nbsp;"&lt;/td&gt;&lt;/TR&gt;"&nbsp;&&nbsp;vbCrLf<br />Next<br />%&gt;<br />&lt;/table&gt;<br />&lt;%<br />Function&nbsp;IsObjInstalled(strClassString)<br />On&nbsp;Error&nbsp;Resume&nbsp;Next<br />IsObjInstalled&nbsp;=&nbsp;False<br />Err&nbsp;=&nbsp;0<br />Dim&nbsp;xTestObj<br />Set&nbsp;xTestObj&nbsp;=&nbsp;Server.CreateObject(strClassString)<br />If&nbsp;0&nbsp;=&nbsp;Err&nbsp;Then&nbsp;IsObjInstalled&nbsp;=&nbsp;True<br />Set&nbsp;xTestObj&nbsp;=&nbsp;Nothing<br />Err&nbsp;=&nbsp;0<br />End&nbsp;Function<br />''''''''''''''''''''''''''''''<br />Function&nbsp;getver(Classstr)<br />On&nbsp;Error&nbsp;Resume&nbsp;Next<br />getver=""<br />Err&nbsp;=&nbsp;0<br />Dim&nbsp;xTestObj<br />Set&nbsp;xTestObj&nbsp;=&nbsp;Server.CreateObject(Classstr)<br />If&nbsp;0&nbsp;=&nbsp;Err&nbsp;Then&nbsp;getver=xtestobj.version<br />Set&nbsp;xTestObj&nbsp;=&nbsp;Nothing<br />Err&nbsp;=&nbsp;0<br />End&nbsp;Function<br />%&gt;</div></div>]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">滑动门效果(利用Table边框)</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_148.html" />
      <updated>2008-10-15 17:12:17</updated>
      <published>2008-10-15 17:12:17</published>
      <id>http://dev.mo.cn/article_148.html</id>
      <summary type="html">
      <![CDATA[下午帮人做了个滑动门,有点复杂~仅仅作为参考吧<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;滑动门效果(利用Table边框)&lt;/title&gt;<br />&lt;style&nbsp;type="text/css"&gt;<br />.eTable&nbsp;{font-size:12px;color:#222222;width:300px;border:1px&nbsp;solid&nbsp;#333333;border-collapse:&nbsp;collapse;margin-bottom:5px;}<br />TD&nbsp;{padding:3px;border:1px&nbsp;#333333&nbsp;solid;}<br />.eHead&nbsp;{font-weight:bold;}<br />.eCount&nbsp;{width:100px;}<br />.hiddenw&nbsp;{display:none;}<br />&lt;/style&gt;<br />&lt;script&nbsp;type="text/javascript"&gt;<br />function&nbsp;change(x,tid){<br />var&nbsp;obj;<br />var&nbsp;tTd;<br />&nbsp; &nbsp; &nbsp; &nbsp; var&nbsp;i=0;<br />&nbsp; &nbsp; &nbsp; &nbsp; for(i=1+(x-1)*3;i&lt;=x*3;i++){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; obj=document.getElementById("div"+i);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tTd=document.getElementById("t"+i);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(parseInt(tid)+(x-1)*3==i){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tTd.style.border="0";<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; obj.style.display="block";<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }else{&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tTd.style.border="1px&nbsp;#333333&nbsp;solid";<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; obj.style.display="none";&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />}<br />&lt;/script&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &lt;table&nbsp;class="eTable"&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;tr&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td&nbsp;id="t1"&nbsp;class="eCount"&nbsp;onmouseover="change(1,1);"&gt;1&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td&nbsp;id="t2"&nbsp;class="eCount"&nbsp;onmouseover="change(1,2);"&gt;2&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td&nbsp;id="t3"&nbsp;class="eCount"&nbsp;onmouseover="change(1,3);"&gt;3&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/tr&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;tr&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td&nbsp;colspan="3"&nbsp;style="border:0;"&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;div&nbsp;id="div1"&nbsp;class="hiddenw"&gt;项目一&lt;/div&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;div&nbsp;id="div2"&nbsp;class="hiddenw"&gt;项目二&lt;/div&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;div&nbsp;id="div3"&nbsp;class="hiddenw"&gt;项目三&lt;/div&gt;<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/td&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/tr&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/table&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &lt;table&nbsp;class="eTable"&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;tr&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td&nbsp;id="t4"&nbsp;class="eCount"&nbsp;onmouseover="change(2,1);"&gt;1&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td&nbsp;id="t5"&nbsp;class="eCount"&nbsp;onmouseover="change(2,2);"&gt;2&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td&nbsp;id="t6"&nbsp;class="eCount"&nbsp;onmouseover="change(2,3);"&gt;3&lt;/td&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/tr&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;tr&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td&nbsp;colspan="3"&nbsp;style="border:0;"&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;div&nbsp;id="div4"&nbsp;class="hiddenw"&gt;项目4&lt;/div&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;div&nbsp;id="div5"&nbsp;class="hiddenw"&gt;项目5&lt;/div&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;div&nbsp;id="div6"&nbsp;class="hiddenw"&gt;项目6&lt;/div&gt;<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/td&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/tr&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/table&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</div></div>]]>
      </summary>
      <category term="" label="JavaScript/DOM" scheme="http://dev.mo.cn/cat_diary_9.html" />
   </entry>
   <entry>
      <title type="html">类似MSN提示的页面效果</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_147.html" />
      <updated>2008-10-14 20:37:57</updated>
      <published>2008-10-14 20:37:57</published>
      <id>http://dev.mo.cn/article_147.html</id>
      <summary type="html">
      <![CDATA[<div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;html&gt;<br />&lt;head&gt;<br />&lt;meta&nbsp;http-equiv="Content-Type"&nbsp;content="text/html;&nbsp;charset=gb2312"&gt;<br />&lt;meta&nbsp;name="Keywords"&nbsp;content="51windows.Net"&gt;<br />&lt;META&nbsp;NAME="Author"&nbsp;CONTENT="haiwa"&gt;<br />&lt;title&gt;类似MSN提示的页面效果&lt;/title&gt;<br />&lt;/head&gt;<br /><br />&lt;body&nbsp;scroll=no&gt;<br />看到右下角的提示了吗？如果没有看到，&lt;button&nbsp;onclick=location.reload();&gt;刷新&lt;/button&gt;一下<br />&lt;script&nbsp;language="JavaScript"&gt;<br />window.onload&nbsp;=&nbsp;getMsg;<br />window.onresize&nbsp;=&nbsp;resizeDiv;<br />window.onerror&nbsp;=&nbsp;function(){}<br />//短信提示使用(asilas添加)<br />var&nbsp;divTop,divLeft,divWidth,divHeight,docHeight,docWidth,objTimer,i&nbsp;=&nbsp;0;<br />function&nbsp;getMsg()<br />{<br />&nbsp;&nbsp;try{<br />&nbsp;&nbsp;divTop&nbsp;=&nbsp;parseInt(document.getElementById("eMeng").style.top,10)<br />&nbsp;&nbsp;divLeft&nbsp;=&nbsp;parseInt(document.getElementById("eMeng").style.left,10)<br />&nbsp;&nbsp;divHeight&nbsp;=&nbsp;parseInt(document.getElementById("eMeng").offsetHeight,10)<br />&nbsp;&nbsp;divWidth&nbsp;=&nbsp;parseInt(document.getElementById("eMeng").offsetWidth,10)<br />&nbsp;&nbsp;docWidth&nbsp;=&nbsp;document.body.clientWidth;<br />&nbsp;&nbsp;docHeight&nbsp;=&nbsp;document.body.clientHeight;<br />&nbsp;&nbsp;document.getElementById("eMeng").style.top&nbsp;=&nbsp;parseInt(document.body.scrollTop,10)&nbsp;+&nbsp;docHeight&nbsp;+&nbsp;10;//&nbsp;divHeight<br />&nbsp;&nbsp;document.getElementById("eMeng").style.left&nbsp;=&nbsp;parseInt(document.body.scrollLeft,10)&nbsp;+&nbsp;docWidth&nbsp;-&nbsp;divWidth<br />&nbsp;&nbsp;document.getElementById("eMeng").style.visibility="visible"<br />&nbsp;&nbsp;objTimer&nbsp;=&nbsp;window.setInterval("moveDiv()",10)<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;catch(e){}<br />}<br /><br />function&nbsp;resizeDiv()<br />{<br />&nbsp;&nbsp;i+=1<br />&nbsp;&nbsp;if(i&gt;500)&nbsp;closeDiv()<br />&nbsp;&nbsp;try{<br />&nbsp;&nbsp;divHeight&nbsp;=&nbsp;parseInt(document.getElementById("eMeng").offsetHeight,10)<br />&nbsp;&nbsp;divWidth&nbsp;=&nbsp;parseInt(document.getElementById("eMeng").offsetWidth,10)<br />&nbsp;&nbsp;docWidth&nbsp;=&nbsp;document.body.clientWidth;<br />&nbsp;&nbsp;docHeight&nbsp;=&nbsp;document.body.clientHeight;<br />&nbsp;&nbsp;document.getElementById("eMeng").style.top&nbsp;=&nbsp;docHeight&nbsp;-&nbsp;divHeight&nbsp;+&nbsp;parseInt(document.body.scrollTop,10)<br />&nbsp;&nbsp;document.getElementById("eMeng").style.left&nbsp;=&nbsp;docWidth&nbsp;-&nbsp;divWidth&nbsp;+&nbsp;parseInt(document.body.scrollLeft,10)<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;catch(e){}<br />}<br /><br />function&nbsp;moveDiv()<br />{<br />&nbsp;&nbsp;try<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;if(parseInt(document.getElementById("eMeng").style.top,10)&nbsp;&lt;=&nbsp;(docHeight&nbsp;-&nbsp;divHeight&nbsp;+&nbsp;parseInt(document.body.scrollTop,10)))<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;window.clearInterval(objTimer)<br />&nbsp;&nbsp;objTimer&nbsp;=&nbsp;window.setInterval("resizeDiv()",1)<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;divTop&nbsp;=&nbsp;parseInt(document.getElementById("eMeng").style.top,10)<br />&nbsp;&nbsp;document.getElementById("eMeng").style.top&nbsp;=&nbsp;divTop&nbsp;-&nbsp;1<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;catch(e){}<br />}<br />function&nbsp;closeDiv()<br />{<br />&nbsp;&nbsp;document.getElementById('eMeng').style.visibility='hidden';<br />&nbsp;&nbsp;if(objTimer)&nbsp;window.clearInterval(objTimer)<br />}<br />&lt;/script&gt;<br />&lt;DIV&nbsp;id=eMeng&nbsp;style="BORDER-RIGHT:&nbsp;#455690&nbsp;1px&nbsp;solid;&nbsp;BORDER-TOP:&nbsp;#a6b4cf&nbsp;1px&nbsp;solid;&nbsp;Z-INDEX:99999;&nbsp;LEFT:&nbsp;0px;&nbsp;VISIBILITY:&nbsp;hidden;&nbsp;BORDER-LEFT:&nbsp;#a6b4cf&nbsp;1px&nbsp;solid;&nbsp;WIDTH:&nbsp;180px;&nbsp;BORDER-BOTTOM:&nbsp;#455690&nbsp;1px&nbsp;solid;&nbsp;POSITION:&nbsp;absolute;&nbsp;TOP:&nbsp;0px;&nbsp;HEIGHT:&nbsp;116px;&nbsp;BACKGROUND-COLOR:&nbsp;#c9d3f3"&gt;<br />&nbsp;&nbsp;&lt;TABLE&nbsp;style="BORDER-TOP:&nbsp;#ffffff&nbsp;1px&nbsp;solid;&nbsp;BORDER-LEFT:&nbsp;#ffffff&nbsp;1px&nbsp;solid"&nbsp;cellSpacing=0&nbsp;cellPadding=0&nbsp;width="100%"&nbsp;bgColor=#cfdef4&nbsp;border=0&gt;<br />&nbsp;&nbsp;&lt;TBODY&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;TR&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;TD&nbsp;style="FONT-SIZE:&nbsp;12px;&nbsp;BACKGROUND-IMAGE:&nbsp;url(msgTopBg.gif);&nbsp;COLOR:&nbsp;#0f2c8c"&nbsp;width=30&nbsp;height=24&gt;&lt;/TD&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;TD&nbsp;style="FONT-WEIGHT:&nbsp;normal;&nbsp;FONT-SIZE:&nbsp;12px;&nbsp;BACKGROUND-IMAGE:&nbsp;url(msgTopBg.gif);&nbsp;COLOR:&nbsp;#1f336b;&nbsp;PADDING-TOP:&nbsp;4px;PADDING-left:&nbsp;4px"&nbsp;vAlign=center&nbsp;width="100%"&gt;&nbsp;短消息提示：&lt;/TD&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;TD&nbsp;style="BACKGROUND-IMAGE:&nbsp;url(msgTopBg.gif);&nbsp;PADDING-TOP:&nbsp;2px;PADDING-right:2px"&nbsp;vAlign=center&nbsp;align=right&nbsp;width=19&gt;&lt;span&nbsp;title=关闭&nbsp;style="CURSOR:&nbsp;hand;color:red;font-size:12px;font-weight:bold;margin-right:4px;"&nbsp;onclick=closeDiv()&nbsp;&gt;×&lt;/span&gt;&lt;!--&nbsp;&lt;IMG&nbsp;title=关闭&nbsp;style="CURSOR:&nbsp;hand"&nbsp;onclick=closeDiv()&nbsp;hspace=3&nbsp;src="msgClose.jpg"&gt;&nbsp;--&gt;&lt;/TD&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/TR&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;TR&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;TD&nbsp;style="PADDING-RIGHT:&nbsp;1px;&nbsp;BACKGROUND-IMAGE:&nbsp;url(1msgBottomBg.jpg);&nbsp;PADDING-BOTTOM:&nbsp;1px"&nbsp;colSpan=3&nbsp;height=90&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;DIV&nbsp;style="BORDER-RIGHT:&nbsp;#b9c9ef&nbsp;1px&nbsp;solid;&nbsp;PADDING-RIGHT:&nbsp;13px;&nbsp;BORDER-TOP:&nbsp;#728eb8&nbsp;1px&nbsp;solid;&nbsp;PADDING-LEFT:&nbsp;13px;&nbsp;FONT-SIZE:&nbsp;12px;&nbsp;PADDING-BOTTOM:&nbsp;13px;&nbsp;BORDER-LEFT:&nbsp;#728eb8&nbsp;1px&nbsp;solid;&nbsp;WIDTH:&nbsp;100%;&nbsp;COLOR:&nbsp;#1f336b;&nbsp;PADDING-TOP:&nbsp;18px;&nbsp;BORDER-BOTTOM:&nbsp;#b9c9ef&nbsp;1px&nbsp;solid;&nbsp;HEIGHT:&nbsp;100%"&gt;您有&lt;font&nbsp;color=#FF0000&gt;1&lt;/font&gt;封新短消息&lt;BR&gt;&lt;BR&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;DIV&nbsp;align=center&nbsp;style="word-break:break-all"&gt;&lt;a&nbsp;href="javascript:alert('你好')"&gt;&lt;font&nbsp;color=#FF0000&gt;点击查看短信&lt;/font&gt;&lt;/a&gt;&lt;/DIV<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/DIV&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/TD&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/TR&gt;<br />&nbsp;&nbsp;&lt;/TBODY&gt;<br />&nbsp;&nbsp;&lt;/TABLE&gt;<br />&lt;/DIV&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</div></div>]]>
      </summary>
      <category term="" label="JavaScript/DOM" scheme="http://dev.mo.cn/cat_diary_9.html" />
   </entry>
   <entry>
      <title type="html">ASP利用纯真数据库查询IP地理位置</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_146.html" />
      <updated>2008-10-13 14:11:49</updated>
      <published>2008-10-13 14:11:49</published>
      <id>http://dev.mo.cn/article_146.html</id>
      <summary type="html">
      <![CDATA[把前人的方法总结了一下,具体实例请到这里来下载<br /><br /><a href="http://download.csdn.net/source/685822" target="new"><span style="color:Red;">http://download.csdn.net/source/685822</span></a><br /><br />首先,是前人写的ASP查询纯真IP的类，请保存为cz.asp<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;%<br />Class&nbsp;TQQWry<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;Country,LocalStr,Buf,OffSet<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Private&nbsp;StartIP,EndIP,CountryFlag<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Public&nbsp;FirstStartIP,LastStartIP,RecordCount,QQWryFile<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Private&nbsp;Stream,EndIPOff<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Private&nbsp;Sub&nbsp;Class_Initialize<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Country=""<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LocalStr=""<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StartIP=0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EndIP=0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CountryFlag=0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FirstStartIP=0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LastStartIP=0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EndIPOff=0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QQWryFile=Server.MapPath("cz.dat")<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;Sub<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Public&nbsp;Sub&nbsp;SetPath(p)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QQWryFile&nbsp;=&nbsp;Server.MapPath(p)<br />&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;Sub<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Function&nbsp;IP2Int(IP)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;IPArray,i<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IPArray=Split(IP,".",-1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FOr&nbsp;i=0&nbsp;to&nbsp;3<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;If&nbsp;Not&nbsp;IsNumeric(IPArray(i))&nbsp;Then&nbsp;IPArray(i)=0<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;If&nbsp;CInt(IPArray(i))&lt;0&nbsp;Then&nbsp;IPArray(i)=Abs(CInt(IPArray(i)))<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;If&nbsp;CInt(IPArray(i))&gt;255&nbsp;Then&nbsp;IPArray(i)=255<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IP2Int=(CInt(IPArray(0))*256*256*256)+(CInt(IPArray(1))*256*256)+(CInt(IPArray(2))*256)+CInt(IPArray(3))'-1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;Function<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Function&nbsp;Int2IP(IntValue)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p4=IntValue-Fix(IntValue/256)*256<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntValue=(IntValue-p4)/256<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p3=IntValue-Fix(IntValue/256)*256<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntValue=(IntValue-p3)/256<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2=IntValue-Fix(IntValue/256)*256<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntValue=(IntValue-p2)/256<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p1=IntValue<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Int2IP=Cstr(p1)&"."&Cstr(p2)&"."&Cstr(p3)&"."&Cstr(p4)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;Function<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Private&nbsp;Function&nbsp;GetStartIP(RecNo)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OffSet=FirstStartIP+RecNo&nbsp;*&nbsp;7<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stream.Position=OffSet<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Buf=Stream.Read(7)<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;EndIPOff=AscB(MidB(Buf,5,1))+(AscB(MidB(Buf,6,1))*256)+(AscB(MidB(Buf,7,1))*256*256)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StartIP=AscB(MidB(Buf,1,1))+(AscB(MidB(Buf,2,1))*256)+(AscB(MidB(Buf,3,1))*256*256)+(AscB(MidB(Buf,4,1))*256*256*256)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetStartIP=StartIP<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;Function<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Private&nbsp;Function&nbsp;GetEndIP()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stream.Position=EndIPOff<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Buf=Stream.Read(5)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EndIP=AscB(MidB(Buf,1,1))+(AscB(MidB(Buf,2,1))*256)+(AscB(MidB(Buf,3,1))*256*256)+(AscB(MidB(Buf,4,1))*256*256*256)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CountryFlag=AscB(MidB(Buf,5,1))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetEndIP=EndIP<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;Function<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Private&nbsp;Sub&nbsp;GetCountry(IP)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;(CountryFlag=1&nbsp;Or&nbsp;CountryFlag=2)&nbsp;Then<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;Country=GetFlagStr(EndIPOff+4)<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;If&nbsp;CountryFlag=1&nbsp;Then<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;LocalStr=GetFlagStr(Stream.Position)<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;If&nbsp;IP&gt;=&nbsp;IP2Int("255.255.255.0")&nbsp;And&nbsp;IP&lt;=IP2Int("255.255.255.255")&nbsp;Then<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;LocalStr=GetFlagStr(EndIPOff+21)<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;Country=GetFlagStr(EndIPOff+12)<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;End&nbsp;If<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;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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LocalStr=GetFlagStr(EndIPOff+8)<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;End&nbsp;If<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Country=GetFlagStr(EndIPOff+4)<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;LocalStr=GetFlagStr(Stream.Position)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Country=Trim(Country)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LocalStr=Trim(LocalStr)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;InStr(Country,"CZ88.NET")&nbsp;Then&nbsp;Country&nbsp;=&nbsp;"IALVIN.CN"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;InStr(LocalStr,"CZ88.NET")&nbsp;Then&nbsp;LocalStr&nbsp;=&nbsp;"IALVIN.CN"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;Sub<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Private&nbsp;Function&nbsp;GetFlagStr(OffSet)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;Flag<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Flag=0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Do&nbsp;While&nbsp;(True)<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;Stream.Position=OffSet<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;Flag=AscB(Stream.Read(1))<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;If(Flag=1&nbsp;Or&nbsp;Flag=2&nbsp;)&nbsp;Then<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;Buf=Stream.Read(3)&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;(Flag=2&nbsp;)&nbsp;Then<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;CountryFlag=2<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;EndIPOff=OffSet-4<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;End&nbsp;If<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;OffSet=AscB(MidB(Buf,1,1))+(AscB(MidB(Buf,2,1))*256)+(AscB(MidB(Buf,3,1))*256*256)<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;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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit&nbsp;Do<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;End&nbsp;If<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Loop<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&nbsp;(OffSet&lt;12&nbsp;)&nbsp;Then<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;GetFlagStr=""<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stream.Position=OffSet<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;GetFlagStr=GetStr()&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;Function<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Private&nbsp;Function&nbsp;GetStr()&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;c<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetStr=""<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Do&nbsp;While&nbsp;(True)<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;c=AscB(Stream.Read(1))<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;If&nbsp;(c=0)&nbsp;Then&nbsp;Exit&nbsp;Do&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;<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;If&nbsp;c&gt;127&nbsp;Then<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;If&nbsp;Stream.EOS&nbsp;Then&nbsp;Exit&nbsp;Do<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;GetStr=GetStr&Chr(AscW(ChrB(AscB(Stream.Read(1)))&ChrB(C)))<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;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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetStr=GetStr&Chr(c)<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;End&nbsp;If<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Loop&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;Function<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Public&nbsp;Function&nbsp;QQWry(DotIP)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;IP,nRet<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;RangB,RangE,RecNo&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;IP=IP2Int(DotIP)&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;Set&nbsp;Stream=CreateObject("ADodb.Stream")<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stream.Mode=3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stream.Type=1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stream.Open<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stream.LoadFromFile&nbsp;QQWryFile<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stream.Position=0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Buf=Stream.Read(8)&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;FirstStartIP=AscB(MidB(Buf,1,1))+(AscB(MidB(Buf,2,1))*256)+(AscB(MidB(Buf,3,1))*256*256)+(AscB(MidB(Buf,4,1))*256*256*256)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LastStartIP=AscB(MidB(Buf,5,1))+(AscB(MidB(Buf,6,1))*256)+(AscB(MidB(Buf,7,1))*256*256)+(AscB(MidB(Buf,8,1))*256*256*256)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RecordCount=Int((LastStartIP-FirstStartIP)/7)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;(RecordCount&lt;=1)&nbsp;Then<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;Country="Unknow"<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;QQWry=2<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;Exit&nbsp;Function<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If&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;RangB=0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RangE=RecordCount&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;Do&nbsp;While&nbsp;(RangB&lt;(RangE-1))&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;RecNo=Int((RangB+RangE)/2)&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;Call&nbsp;GetStartIP&nbsp;(RecNo)<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;If&nbsp;(IP=StartIP)&nbsp;Then<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;RangB=RecNo<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;Exit&nbsp;Do<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;End&nbsp;If<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;If&nbsp;(IP&gt;StartIP)&nbsp;Then<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;RangB=RecNo<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;Else&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RangE=RecNo<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;End&nbsp;If<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Loop&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;Call&nbsp;GetStartIP(RangB)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Call&nbsp;GetEndIP()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;(StartIP&lt;=IP)&nbsp;And&nbsp;(&nbsp;EndIP&gt;=IP)&nbsp;Then<br /><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;nRet=0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else<br /><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;nRet=3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Call&nbsp;GetCountry(IP)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QQWry=nRet<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;Function<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Private&nbsp;Sub&nbsp;Class_Terminate()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;On&nbsp;ErrOr&nbsp;Resume&nbsp;Next<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stream.Close<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;Err&nbsp;Then&nbsp;Err.Clear<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;Stream=Nothing<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;Sub&nbsp;&nbsp;<br />End&nbsp;Class<br /><br /><br /><br />Function&nbsp;Look_Ip(path,IP)<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;Wry,&nbsp;IPType,&nbsp;QQWryVersion,&nbsp;IpCounter<br />&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;Wry&nbsp;=&nbsp;New&nbsp;TQQWry<br />&nbsp;&nbsp;&nbsp;&nbsp;Wry.SetPath&nbsp;path<br />&nbsp;&nbsp;&nbsp;&nbsp;On&nbsp;Error&nbsp;Resume&nbsp;Next<br />&nbsp;&nbsp;&nbsp;&nbsp;IPType&nbsp;=&nbsp;Wry.QQWry(IP)<br />&nbsp;&nbsp;&nbsp;&nbsp;Look_Ip&nbsp;=&nbsp;Wry.Country&nbsp;&&nbsp;"&nbsp;-&nbsp;"&nbsp;&&nbsp;Wry.LocalStr<br />&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;Err&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Err.Clear<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Look_Ip&nbsp;=&nbsp;"查询出错"<br />&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br />End&nbsp;Function<br />%&gt;</div></div><br /><br />下面是查询代码,请保存为search.asp<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;!--#include&nbsp;file="cz.asp"&nbsp;--&gt;<br />&lt;%<br />Dim&nbsp;IP<br />ip=request.querystring("ip")<br /><br />if&nbsp;trim(ip)=""&nbsp;then<br />&nbsp;&nbsp;&nbsp;IP=Request.ServerVariables("REMOTE_ADDR")<br />elseif&nbsp;ubound(split(trim(ip),"."))&lt;&gt;3&nbsp;then<br />&nbsp;&nbsp;&nbsp;IP=Request.ServerVariables("REMOTE_ADDR")&nbsp;'ip地址<br />end&nbsp;if<br />IPAdd=Look_Ip("cz.dat",IP)&nbsp;&nbsp;'这里注意,数据库文件名是cz.dat<br />response.write&nbsp;IPAdd<br />%&gt;</div></div>]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">如何利用ASP把图片上传到数据库</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_145.html" />
      <updated>2008-10-2 10:38:30</updated>
      <published>2008-10-2 10:38:30</published>
      <id>http://dev.mo.cn/article_145.html</id>
      <summary type="html">
      <![CDATA[演示:<a href="http://dev.mo.cn/an%2Dupload/demo/bytes%5Fupload/" target="new">http://dev.mo.cn/an%2Dupload/demo/bytes%5Fupload/</a><br />下载:<a href="http://dev.mo.cn/an-upload/demo/bytes_upload/bytes_upload.rar" target="new">http://dev.mo.cn/an-upload/demo/bytes_upload/bytes_upload.rar</a><br /><br />ASP（Active&nbsp;Server&nbsp;Pages）是Microsoft很早就推出的一种WEB应用程序解决方案，也是绝大多数从事网站开发人员很熟悉的一个比较简单的编程环境。通过ASP我们可以创建功能强大的动态的WEB应用程序。ASP虽然功能很强大，但有些功能用纯ASP代码完成不了，为了能保证开发出功能更加强大的WEB应用程序，我们可以借助调用COM组件。<br /><br />　　在日常工作中，例如开发一个“商品网上销售系统”吧，为了使顾客对商品的外观有所了解，也就是顾客在看商品的文字介绍的同时在文字的旁边有该商品的图片加以说明，这样顾客就可以对该商品有个系统的了解，对推销商品有很大的帮助。所以我们在开发系统时当然就要加入图片处理模块，即如何把图片上传到服务器（图片可以放在WEB服务器上某一个文件夹里也可以放在SQL&nbsp;Server服务器里）和如何让上传的图片在浏览器端显示出来，这都是开发人员要考虑到的问题。<br /><br />　　上传图片到服务器有多种方法，可以使用文件上传组件也可以使用纯ASP代码来实现。在CSDN的WEB版ASP上经常有网友问这样的问题“如何利用ASP把图片上传到数据库里”，为了方便CSDN需要了解这方面的知识，这篇文章将详细讲解使用ASP上传图片的做法并给出代码，以飨读者。<br /><br />　　首先了解一下在程序中用到的各种对象及其语法：<br /><br />　　1）&nbsp;Request.BinaryRead()方法<br /><br />　　●&nbsp;使用Request.BinaryRead()方法可以获取提交的文件数据<br /><br />　　●&nbsp;语法<br /><br />　　VarReValue=&nbsp;Request.BinaryRead(number)<br /><br />　　变量VarReValue返回值保存从客户端读取到的二进制数据；<br /><br />　　参数number指明要从客户端读取的二进制数据量的大小。<br /><br />　　2）&nbsp;Response.BinaryWrite()方法<br /><br />　　●&nbsp;使用Response.BinaryWrite()方法可以从数据库中获取图片数据并显示到客户端的浏览器中。<br /><br />　　●&nbsp;语法<br /><br />　　Response.BinaryWrite&nbsp;data<br /><br />　　参数data是要写进客户端浏览器中的二进制数据包。<br /><br />　　3）&nbsp;AppendChunk方法<br /><br />　　●&nbsp;AppendChunk方法的作用是将二进制数据追加到Field或Parameter对象。<br /><br />　　●&nbsp;语法<br /><br />　　object.AppendChunk&nbsp;data<br /><br />　　参数data为要追加到Field或Parameter对象中的数据包。<br /><br />　　4）&nbsp;GetChunk方法<br /><br />　　●&nbsp;GetChunk方法返回二进制数据的内容。<br /><br />　　●&nbsp;语法<br /><br />　　object.&nbsp;GetChunk(size)<br /><br />　　参数size指明要返回二进制数据的长度，可以是长整型表达式。<br /><br />　　5）&nbsp;Request.TotalBytes方法<br /><br />　　●&nbsp;Request.TotalBytes方法返回从客户端读取到的数据的字节数，这个值跟上面所提到的number相对应，可以大于或等于number值。<br /><br />　　●&nbsp;语法<br /><br />　　number=&nbsp;Request.TotalBytes<br /><br />　　大体了解了一些方法及其使用方法后，接下来我们就开始设计数据库和相关编写代码了。<br /><br />　　第一步：数据库的设计（以Ms&nbsp;SQL&nbsp;Server7为例）：<br /><br />　　Create&nbsp;table&nbsp;img&nbsp;--创建用来存储图片的表，命名为img<br /><br />　　(<br /><br />　　id&nbsp;int&nbsp;identity(1,1)&nbsp;not&nbsp;null,<br /><br />　　img&nbsp;image&nbsp;<br /><br />　　)&nbsp;<br />第二步：程序编写，其中省略了用户输入界面，这里只给出很重要的两个文件即图片上传处理(processimg.asp)和显示图片(ShowImg.asp)文件。<br /><br />　　1）&nbsp;processimg.asp文件代码：<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">　　〈%<br /><br />　　Response.Buffer=True<br /><br />　　ImageSize=Request.TotalBytes&nbsp;‘获取提交数据量的总字节数<br /><br />　　ImageData=Request.BinaryRead(ImageSize)&nbsp;‘保存从客户端读取到的数据<br /><br />　　‘优化读取到的二进制数据<br /><br />　　BnCrLf=chrB(13)&chr(10)<br /><br />　　Divider=LeftB(ImageData,Clng(InstrB(ImageData,&nbsp;BnCrLf))-1)<br /><br />　　Dstart=InstrB(ImageData,&nbsp;BnCrLf&&nbsp;BnCrLf)+4<br /><br />　　Dend=InstrB(Dstart+1,&nbsp;ImageData,&nbsp;Divider)-&nbsp;Dstart<br /><br />　　MyData=MidB(ImageData,&nbsp;Dstart,&nbsp;Dend)<br /><br />　　‘创建对象实例<br /><br />　　Set&nbsp;imgConn=Server.CreateObject(“ADODB.Connection”)<br /><br />　　StrConn=”Driver={SQL&nbsp;Server};Server=ServerName;”&&nbsp;_<br /><br />“Uid=xxxx;Pwd=xxxx;DataBase=DataBaseName”<br /><br />　　imgConn.open&nbsp;strConn<br /><br />　　Set&nbsp;Rs=&nbsp;Server.CreateObject(“ADODB.RecordSet”)<br /><br />　　Sql=”Select&nbsp;*&nbsp;From&nbsp;img&nbsp;Where&nbsp;id&nbsp;is&nbsp;null”<br />　<br />　　Rs.open&nbsp;sql,imgConn,1,3<br /><br />　　‘追加数据到数据库<br /><br />　　Rs.AddNew<br /><br />　　Rs(“img”).AppendChunk&nbsp;myData<br /><br />　　Rs.Update<br /><br />　　‘关闭和释放对象<br /><br />　　Rs.close<br /><br />　　ImgConn.close<br /><br />　　Set&nbsp;Rs=Nothing<br /><br />　　Set&nbsp;ImgConn=Nothing<br /><br />　　%〉</div></div><br />　　2)&nbsp;ShowImg.asp文件代码：<br /><br />　　<div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">〈%<br /><br />　　Response.Expires&nbsp;=&nbsp;0<br /><br />　　Response.buffer=True<br /><br />　　Response.clear<br /><br />　　‘创建对象实例<br /><br />　　Set&nbsp;imgConn=Server.CreateObject(“ADODB.Connection”)<br /><br />　　StrConn=”Driver={SQL&nbsp;Server};Server=ServerName;”&&nbsp;_<br /><br />“Uid=xxxx;Pwd=xxxx;DataBase=DataBaseName”<br /><br />　　imgConn.open&nbsp;strConn<br /><br />　　Set&nbsp;Rs=&nbsp;Server.CreateObject(“ADODB.RecordSet”)<br /><br />　　Sql=”Select&nbsp;img&nbsp;From&nbsp;img&nbsp;Where&nbsp;id=1”&nbsp;这里的id可以使用Request(“id”)获得<br /><br />　　Rs.open&nbsp;sql,imgConn,1,1<br /><br />　　Response.ContentType=”image/*”<br /><br />　　Response.BinaryWrite&nbsp;Rs.(“img”).GetChunk(7500000)<br /><br />　　‘关闭和释放对象<br /><br />　　Rs.close<br /><br />　　ImgConn.close<br /><br />　　Set&nbsp;Rs=Nothing<br /><br />　　Set&nbsp;ImgConn=Nothing<br /><br />　　%〉</div></div><br />　　至此，本文对如何使用ASP上传图片的原理和示例都讲完了，有什么不妥的地方请各位指正，谢谢！同时希望本文能够确实能为需要这方面帮助的网友提供实质性的帮助。（csdn）]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">某变态公司的面试IQ题,做得出来算你牛!</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_144.html" />
      <updated>2008-10-2 10:34:14</updated>
      <published>2008-10-2 10:34:14</published>
      <id>http://dev.mo.cn/article_144.html</id>
      <summary type="html">
      <![CDATA[爱因斯坦在20世纪初出的这个谜语。他说世界上有98％的人答不出来。某家公司在面试应聘者时借用了爱因斯坦的这个IQ题，考查应聘者的IQ，现在我们暂且不去讨论这个公司用这样的题目来考查应聘者的IQ有多“变态”，如果是你，拿到了这样的笔试题目，你能做得出来吗？<br /><br /><br /><br />　　1、在一条街上，有5座房子，喷了5种颜色。<br /><br />　　2、每个房里住着不同国籍的人<br /><br />　　3、每个人喝不同的饮料，抽不同品牌的香烟，养不同的宠物<br /><br />　　问题是：谁养鱼？<br /><br /><br /><br />　　提示：<br /><br />　　1、英国人住红色房子<br /><br />　　2、瑞典人养狗<br /><br />　　3、丹麦人喝茶<br /><br />　　4、绿色房子在白色房子左面<br /><br />　　5、绿色房子主人喝咖啡<br /><br />　　6、抽Pall&nbsp;Mall&nbsp;香烟的人养鸟<br /><br />　　7、黄色房子主人抽Dunhill&nbsp;香烟<br /><br />　　8、住在中间房子的人喝牛奶<br /><br />　　9、&nbsp;挪威人住第一间房<br /><br />　　10、抽Blends香烟的人住在养猫的人隔壁<br /><br />　　11、养马的人住抽Dunhill&nbsp;香烟的人隔壁<br /><br />　　12、抽Blue&nbsp;Master的人喝啤酒<br /><br />　　13、德国人抽Prince香烟<br /><br />　　14、挪威人住蓝色房子隔壁<br /><br />　　15、抽Blends香烟的人有一个喝水的邻居<br /><br />　　以上是爱因斯坦在20世纪初出的这个谜语。他说世界上有98％的人答不出来。<br /><br /><br /><br />　　你能做出来吗？<br /><br />]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">ASP如何获取真实IP地址</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_143.html" />
      <updated>2008-10-2 10:28:27</updated>
      <published>2008-10-2 10:28:27</published>
      <id>http://dev.mo.cn/article_143.html</id>
      <summary type="html">
      <![CDATA[大家都知道，在ASP中可以使用Request.ServerVariables("REMOTE_ADDR")来取得客户端的IP地址，但如果客户端是使用代理服务器来访问，那取到的就是代理服务器的IP地址，而不是真正的客户端IP地址。要想透过代理服务器取得客户端的真实IP地址，就要使用Request.ServerVariables("HTTP_X_FORWARDED_FOR")来读取。<br /><br />　　不过要注意的是，并不是每个代理服务器都能用Request.ServerVariables("HTTP_X_FORWARDED_FOR")来读取客户端的真实&nbsp;IP，有些用此方法读取到的仍然是代理服务器的&nbsp;IP。&nbsp;<br /><br />　　还有一点需要注意的是：如果客户端没有通过代理服务器来访问，那么用Request.ServerVariables&nbsp;("HTTP_X_FORWARDED_FOR")取到的值将是空的。因此，如果要在程序中使用此方法，可以这样处理:<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">　　userip&nbsp;=&nbsp;Request.ServerVariables("HTTP_X_FORWARDED_FOR")&nbsp;<br />　　If&nbsp;userip&nbsp;=&nbsp;""&nbsp;Then&nbsp;userip&nbsp;=&nbsp;Request.ServerVariables("REMOTE_ADDR")&nbsp;</div></div><br />　<br /><br />　　即：如果客户端通过代理服务器，则取HTTP_X_FORWARDED_FOR的值，如果没通过代理服务器，就取&nbsp;REMOTE_ADDR的值。&nbsp;<br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">ASP＋Access的安全隐患及对策</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_142.html" />
      <updated>2008-10-2 10:24:56</updated>
      <published>2008-10-2 10:24:56</published>
      <id>http://dev.mo.cn/article_142.html</id>
      <summary type="html">
      <![CDATA[随着Internet的发展，Web技术日新月异。继通用网关接口（CGI）之后，“ASP”(Active&nbsp;Server&nbsp;Pages)作为一种典型的服务器端网页设计技术，被广泛地应用在网上银行、电子商务、搜索引擎等各种互联网应用中。同时Access数据库作为微软推出的以标准JET为引擎的桌面型数据库系统，由于具有操作简单、界面友好等特点，具有较大的用户群体。因此ASP＋Access成为许多中小型网上应用系统的首选方案。但ASP＋Access解决方案在为我们带来便捷的同时，也带来了不容忽视的安全问题。&nbsp;<br /><br />　　ASP＋Access的安全隐患ASP＋Access解决方案的主要安全隐患来自Access数据库的安全性，其次在于ASP网页设计过程中的安全漏洞。&nbsp;<br /><br />　　1.Access数据库的存储隐患&nbsp;<br /><br />　　在ASP＋Access应用系统中，如果获得或者猜到Access数据库的存储路径和数据库名，则该数据库就可以被下载到本地。例如：对于网上书店的Access数据库，人们一般命名为book.mdb、store.mdb等，而存储的路径一般为“URL/database”或干脆放在根目录（“URL/”）下。这样，只要在浏览器地址栏中敲入地址：“URL/database/store.mdb”，就可以轻易地把store.mdb下载到本地的机器中。&nbsp;<br /><br />　　2.Access数据库的解密隐患&nbsp;<br /><br />　　由于Access数据库的加密机制非常简单，所以即使数据库设置了密码，解密也很容易。该数据库系统通过将用户输入的密码与某一固定密钥进行异或来形成一个加密串，并将其存储在＊.mdb文件中从地址“＆H42”开始的区域内。由于异或操作的特点是“经过两次异或就恢复原值”，因此，用这一密钥与＊.mdb文件中的加密串进行第二次异或操作，就可以轻松地得到Access数据库的密码。基于这种原理，可以很容易地编制出解密程序。&nbsp;<br /><br />　　由此可见，无论是否设置了数据库密码，只要数据库被下载，其信息就没有任何安全性可言了。&nbsp;<br /><br />　　3.源代码的安全隐患&nbsp;<br /><br />　　由于ASP程序采用的是非编译性语言，这大大降低了程序源代码的安全性。任何人只要进入站点，就可以获得源代码，从而造成ASP应用程序源代码的泄露。&nbsp;<br /><br />　　4.程序设计中的安全隐患　　&nbsp;<br /><br />　　ASP代码利用表单（form）实现与用户交互的功能，而相应的内容会反映在浏览器的地址栏中，如果不采用适当的安全措施，只要记下这些内容，就可以绕过验证直接进入某一页面。例如在浏览器中敲入“……page.asp?x=1”，即可不经过表单页面直接进入满足“x=1”条件的页面。因此，在设计验证或注册页面时，必须采取特殊措施来避免此类问题的发生。&nbsp;<br /><br />　　提高数据库的安全性由于Access数据库加密机制过于简单，因此，如何有效地防止Access数据库被下载,就成了提高ASP＋Access解决方案安全性的重中之重。&nbsp;<br /><br />　　1.非常规命名法&nbsp;<br /><br />　　防止数据库被找到的简便方法是为Access数据库文件起一个复杂的非常规名字，并把它存放在多层目录下。例如，对于网上书店的数据库文件，不要简单地命名为“book.mdb”或“store.mdb”，而是要起个非常规的名字，例如：&nbsp;<br /><br />　　faq19jhsvzbal.mdb，再把它放在如./akkjj16t/kjhgb661/acd/avccx55&nbsp;之类的深层目录下。这样，对于一些通过猜的方式得到Access数据库文件名的非法访问方法起到了有效的阻止作用。&nbsp;<br /><br />　　2.使用ODBC数据源&nbsp;<br /><br />　　在ASP程序设计中，应尽量使用ODBC数据源，不要把数据库名直接写在程序中，否则，数据库名将随ASP源代码的失密而一同失密。例如：&nbsp;<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">　　DBPath&nbsp;=&nbsp;Server.MapPath(“./akkjj16t/&nbsp;<br /><br />　　kjhgb661/acd/avccx55/faq19jhsvzbal.mdb&nbsp;”)&nbsp;<br /><br />　　conn.Open&nbsp;“driver={Microsoft&nbsp;Access&nbsp;Driver&nbsp;(＊.mdb)};dbq=”&nbsp;＆&nbsp;DBPath&nbsp;</div></div><br /><br />　　可见，即使数据库名字起得再怪异，隐藏的目录再深，ASP源代码失密后，数据库也很容易被下载下来。如果使用ODBC数据源，就不会存在这样的问题了：&nbsp;<br /><br />　　<div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">conn.open&nbsp;“ODBC－DSN名”</div></div>&nbsp;<br /><br />　　对ASP页面进行加密为有效地防止ASP源代码泄露，可以对ASP页面进行加密。一般有两种方法对ASP页面进行加密。一种是使用组件技术将编程逻辑封装入DLL之中；另一种是使用微软的Script&nbsp;Encoder对ASP页面进行加密。笔者认为，使用组件技术存在的主要问题是每段代码均需组件化，操作比较烦琐，工作量较大；而使用Script&nbsp;Encoder对ASP页面进行加密，操作简单、收效良好。&nbsp;<br />Script&nbsp;Encoder方法具有许多优点：<br /><br />　　1.HTML仍具有很好的可编辑性。Script&nbsp;Encoder只加密在HTML页面中嵌入的ASP代码，其他部分仍保持不变，这就使得我们仍然可以使用FrontPage或Dreamweaver等常用网页编辑工具对HTML部分进行修改、完善，只是不能对ASP加密部分进行修改，否则将导致文件失效。&nbsp;<br /><br />　　2.操作简单。只要掌握几个命令行参数即可。Script&nbsp;Encoder的运行程序是screnc.exe，其使用方法如下：&nbsp;<br /><br />　　screnc&nbsp;[/s]&nbsp;[/f]&nbsp;[/xl]&nbsp;[/l&nbsp;defLanguage&nbsp;]&nbsp;[/e&nbsp;defExtension]&nbsp;inputfile&nbsp;outputfile&nbsp;<br /><br />　　其中的参数含义如下：&nbsp;<br /><br />　　s：屏蔽屏幕输出；&nbsp;<br /><br />　　f：指定输出文件是否覆盖同名输入文件；&nbsp;<br /><br />　　xl：是否在.asp文件的顶部添加@Language指令；&nbsp;<br /><br />　　l：defLanguag指定缺省的脚本语言；&nbsp;<br /><br />　　e：defExtension&nbsp;指定待加密文件的扩展名。&nbsp;<br /><br />　　3.可以批量加密文件。使用Script&nbsp;Encoder可以对当前目录中的所有的ASP&nbsp;文件进行加密，并把加密后的文件统一输出到相应的目录中。例如：&nbsp;<br /><br />　　screnc&nbsp;＊.asp&nbsp;c:\temp&nbsp;<br /><br />　　4.&nbsp;Script&nbsp;Encoder是免费软件。该加密软件可以从微软网站下载：&nbsp;<br /><br />　　http://msdn.microsoft.com/scripting/vbscript/download/x86/sce10en.exe。下载后，运行安装即可。&nbsp;<br /><br />　　利用Session对象进行注册验证&nbsp;<br /><br />　　为防止未经注册的用户绕过注册界面直接进入应用系统，可以采用Session对象进行注册验证。Session对象最大的优点是可以把某用户的信息保留下来，让后续的网页读取。例如，要设计如图1所示的注册页面。&nbsp;<br /><br />　　设计要求用户注册成功后系统启动hrmis.asp?page=1页面。如果不采用Session对象进行注册验证，则用户在浏览器中敲入“URL/hrmis.asp?page=1”即可绕过注册界面，直接进入系统。利用Session对象可以有效阻止这一情况的发生。相关的程序代码如下：&nbsp;<br /><br />　　<div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;％&nbsp;<br /><br />　　'&nbsp;读取用户输入的账号和密码&nbsp;<br /><br />　　UserID&nbsp;=&nbsp;Request(“UserID”)&nbsp;<br /><br />　　Password&nbsp;=&nbsp;Request(“Password”)&nbsp;<br /><br />　　'&nbsp;检查UserID&nbsp;及Password&nbsp;是否正确（实际程序可能会比较复杂）&nbsp;<br /><br />　　If&nbsp;UserID&nbsp;&lt;&gt;“hrmis”&nbsp;Or&nbsp;Password&nbsp;&lt;&gt;&nbsp;<br /><br />　　“password”&nbsp;Then&nbsp;<br /><br />　　Response.Write&nbsp;“账号错误！”&nbsp;<br /><br />　　Response.End&nbsp;<br /><br />　　End&nbsp;If&nbsp;<br /><br />　　'将Session&nbsp;对象设置为通过验证状态&nbsp;<br /><br />　　Session(“Passed”)&nbsp;=&nbsp;True&nbsp;<br /><br />　　％&gt;&nbsp;</div></div><br />　　进入应用程序后，首先进行验证：&nbsp;<br /><br />　　<div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;％&nbsp;<br /><br />　　'如果未通过验证，返回Login状态&nbsp;<br /><br />　　If&nbsp;Not&nbsp;Session(“Passed”)&nbsp;Then&nbsp;<br /><br />　　Response.Redirect&nbsp;“login.htm”&nbsp;<br /><br />　　End&nbsp;If&nbsp;<br /><br />　　％&gt;</div></div>]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">ASP五大高效提速技巧</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_141.html" />
      <updated>2008-10-2 10:22:06</updated>
      <published>2008-10-2 10:22:06</published>
      <id>http://dev.mo.cn/article_141.html</id>
      <summary type="html">
      <![CDATA[技巧之一：提高使用Request集合的效率&nbsp;<br /><br />　　访问一个ASP集合来提取一个值是费时的、占用计算资源的过程。因为这个操作包含了一系列对相关集合的搜索，这比访问一个局部变量要慢得多。因此，如果打算在页面中多次使用Request集合中的一个值，应该考虑将其存贮为一个局部变量。&nbsp;<br /><br />　　例如将代码写成下面的形式以加快脚本引擎处理速度：<br /><br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">　　strTitle=Request.Form("Title")&nbsp;<br />　　strFirstName=Request.Form("FirstName")&nbsp;<br />　　strLastName=Request.Form("LastName")&nbsp;<br />　　If&nbsp;Len(strTitle)&nbsp;Then&nbsp;strTitle=strTitle&nbsp;&&nbsp;"&nbsp;"&nbsp;<br />　　If&nbsp;strFirstName=""&nbsp;Then&nbsp;strFullName=strTitle&nbsp;&&nbsp;"&nbsp;"&nbsp;&&nbsp;strLastName&nbsp;<br />　　Elseif&nbsp;Len(strFirstName)=1&nbsp;Then&nbsp;<br />　　strFullName=strTitle&nbsp;&&nbsp;strFirstName&nbsp;&&nbsp;".&nbsp;"&nbsp;&&nbsp;strLastName&nbsp;<br />　　Else&nbsp;<br />　　strFullName=strTitle&nbsp;&&nbsp;strFirstName&nbsp;&&nbsp;"&nbsp;"&nbsp;&&nbsp;strLastName&nbsp;<br />　　End&nbsp;If</div></div><br /><br />技巧之二：直接访问适当的集合&nbsp;<br /><br />　　如果不是别无选择，否则不要使用strPage=Request("page")的这样的形式来获取参数，因为这将按顺序搜索全部的集合—QueryString、Form、Cookies、ClientCertificate、ServerVarible直到发现第一个匹配值的名称。这样做比直接访问适当的集合效率低，并且是不安全的，除非能绝对保证这个值不会出现在另外一个集合中。<br /><br />　　例如，可能希望搜索满足客户请求的WEB服务器名称，这通过出现在每个查询中的Request.ServerVarables集合中寻找“SERVER_NAME”来实现。然而，假如其他的集合也包含名为“SERVER_NAME”的值（键名不区分大小写），当使用Request("server_Name")时，就会得到错误的结果。总而言之，应尽可能直接访问适当的集合。&nbsp;<br /><br />技巧之三：在费时操作前使用Response.IsClientConnected属性&nbsp;<br /><br />　　使用Response.IsClientConnected是观察用户是否仍连到服务器并正在载入ASP创建的网页的有用方式。如果用户断开连接或停止下载，我们就不用再浪费服务器的资源创建网页，因为缓冲区内容将被IIS丢弃。所以，对那些需要大量时间计算或资源使用较多的网页来说，值得在每一阶段都检查游览者是否已离线：&nbsp;<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">　　　If&nbsp;Response.IsClientConnected&nbsp;Then&nbsp;<br />　　Response.Flush&nbsp;<br />　　Else&nbsp;<br />　　Response.End&nbsp;<br />　　End&nbsp;If&nbsp;</div></div><br /><br /><br /><br />技巧之四：优化ASP中的ADO操作&nbsp;<br /><br />　　通常面言，数据构成了WEB站点的实际内容。所以，优化ADO操作以加速ASP代码执行，十分有用：&nbsp;<br /><br />　　a.&nbsp;仅选择所需的列：当打开ADO记录集时，除非需要获得所有的列，否则不应自动地使用表名（即SELECT&nbsp;*）。使用单独的列意味着将减少发送到服务器或从服务器取出的数据量。即使需要使用全部列，单独地命名每个列也会获得最佳的性能，因为服务器不必再解释这些列的名字。&nbsp;<br /><br />　　b.&nbsp;尽可能的使用存储过程。存储过程是预先编译的程序，含有一个已经准备好的执行计划，所以比SQL语句执行更快。&nbsp;<br /><br />　　c.&nbsp;使用适当的光标和锁定模式。如果所做的全部工作只是从记录集中读取数据，并将其显示在屏幕上，那么就使用缺省的只能前移、只读的记录集。ADO用来维护记录和锁定的细节的工作越少，执行的性能就越高。&nbsp;<br /><br />　　d.&nbsp;使用对象变量。当遍历记录集时一个肯定能提高性能的方法是使用对象变量指向集合中的成员。例如：&nbsp;<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">　　While&nbsp;Not&nbsp;RsGc.EOF&nbsp;<br />　　Response.Write&nbsp;"工程名称："&nbsp;&&nbsp;RsGc("GcMC")&nbsp;&&nbsp;"(工程代码："&nbsp;&&nbsp;RsGc("GcCode")&nbsp;<br />　　&&nbsp;")&nbsp;<br />　　"&nbsp;<br />　　RsGc.MoveNext&nbsp;<br />　　Wend</div></div><br /><br />　　可以用改写为下面的代码以加快执行：&nbsp;<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">　　set&nbsp;GcMc=RsGc("GcMc")&nbsp;<br />　　set&nbsp;GcCode=RsGc("GcCode")&nbsp;<br />　　While&nbsp;Not&nbsp;rsGc.EOF&nbsp;Response.Write&nbsp;"工程名称："&nbsp;&&nbsp;GcMc&nbsp;&&nbsp;"(工程代码："&nbsp;&&nbsp;GcCode&nbsp;&&nbsp;")&nbsp;<br />　　"&nbsp;RsGc.MoveNext&nbsp;<br />　　Wend</div></div><br /><br />　　新的代码建立了对象变量的引用，所以可以使用对象变量而不是实际的变量，这意味着脚本引擎的工作减少了，因为在集合中进行索引的次数变少了。&nbsp;<br /><br />技巧五：不要混用脚本引擎&nbsp;<br /><br />　　我们知道，ASP页面中既可以使用VBScript，也可以使用JScript。但是在同一个页面上同时使用JScript和VBScript则是不可取的。因为服务器必须实例化并尝试缓存两个（而不是一个）脚本引擎，这在一定程度上增加了系统负担。因此，从性能上考虑，不应在同一页面中混用多种脚本引擎。&nbsp;<br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">ASP判断文件地址是否有效</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_140.html" />
      <updated>2008-10-2 10:17:08</updated>
      <published>2008-10-2 10:17:08</published>
      <id>http://dev.mo.cn/article_140.html</id>
      <summary type="html">
      <![CDATA[原理xmlhttp组件<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;%<br /><br />Response.Write("&lt;head&gt;&lt;style&gt;&lt;!--span{&nbsp;font-size:&nbsp;9pt&nbsp;}--&gt;&lt;/style&gt;&lt;/head&gt;")<br /><br />On&nbsp;Error&nbsp;Resume&nbsp;Next<br /><br />Dim&nbsp;thisurl,thistext<br /><br />thisurl=Request("thisurl")&nbsp;'定义文件地址(非Html格式文档)!<br /><br />if&nbsp;thisurl=""&nbsp;then<br /><br />Response.Write("&lt;span&gt;请先输入文件地址!&lt;/span&gt;")<br /><br />Response.End<br /><br />End&nbsp;if<br />Function&nbsp;objxmlhttp(xmlurl)<br /><br />On&nbsp;Error&nbsp;Resume&nbsp;Next<br /><br />Set&nbsp;objxml&nbsp;=&nbsp;CreateObject("Microsoft.XMLHTTP")<br /><br />objxml.Open&nbsp;"get",xmlurl,false<br /><br />objxml.setrequestheader&nbsp;"content-type","application/x-www-form-urlencoded"<br /><br />objxml.send<br /><br />objxmlhttp&nbsp;=&nbsp;objxml.responsebody<br /><br />if&nbsp;Err&nbsp;then<br /><br />Err.Clear<br /><br />Response.Write("&lt;span&gt;建立连接失败,文件不存在或网络有问题!;错误原因:"&Err.Description&"！&lt;/span&gt;")<br /><br />Response.End<br /><br />End&nbsp;if<br /><br />End&nbsp;Function<br />Function&nbsp;bytes2BSTR(vIn)<br /><br />strReturn&nbsp;=&nbsp;""<br /><br />For&nbsp;i&nbsp;=&nbsp;1&nbsp;To&nbsp;LenB(vIn)<br /><br />ThisCharCode&nbsp;=&nbsp;AscB(MidB(vIn,i,1))<br /><br />If&nbsp;ThisCharCode&nbsp;&lt;&nbsp;&H80&nbsp;Then<br /><br />strReturn&nbsp;=&nbsp;strReturn&nbsp;&&nbsp;Chr(ThisCharCode)<br /><br />Else<br /><br />NextCharCode&nbsp;=&nbsp;AscB(MidB(vIn,i+1,1))<br /><br />strReturn&nbsp;=&nbsp;strReturn&nbsp;&&nbsp;Chr(CLng(ThisCharCode)&nbsp;*&nbsp;&H100&nbsp;+&nbsp;CInt(NextCharCode))<br /><br />i&nbsp;=&nbsp;i&nbsp;+&nbsp;1<br /><br />End&nbsp;If<br /><br />Next<br /><br />bytes2BSTR&nbsp;=&nbsp;strReturn<br /><br />End&nbsp;Function<br />thisurl2=Split(thisurl,",")<br /><br />For&nbsp;Each&nbsp;ii&nbsp;In&nbsp;thisurl2<br /><br />thistext=bytes2BSTR(objxmlhttp(ii))<br /><br />if&nbsp;InStr(thistext,"&lt;html&gt;")&lt;&gt;0&nbsp;then<br /><br />Response.Write("&lt;span&gt;"&&nbsp;ii&nbsp;&"&nbsp;&lt;b&gt;×&lt;/b&gt;&lt;/span&gt;&lt;br&gt;")<br /><br />Else<br /><br />Response.Write("&lt;span&gt;"&&nbsp;ii&nbsp;&"&nbsp;&lt;b&gt;√&lt;/b&gt;&lt;/span&gt;&lt;br&gt;")<br /><br />End&nbsp;if<br /><br />Next<br />if&nbsp;Err&nbsp;then<br /><br />Err.Clear<br /><br />Response.Write("&lt;span&gt;碰到意外!;错误原因:"&Err.Description&"！&lt;/span&gt;")<br /><br />Response.End<br /><br />End&nbsp;if<br /><br />%&gt;</div></div>]]>
      </summary>
      <category term="" label="AJAX" scheme="http://dev.mo.cn/cat_diary_2.html" />
   </entry>
   <entry>
      <title type="html">ASP:Cookie使用指南</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_139.html" />
      <updated>2008-10-2 10:14:25</updated>
      <published>2008-10-2 10:14:25</published>
      <id>http://dev.mo.cn/article_139.html</id>
      <summary type="html">
      <![CDATA[实际上，在web开发中，cookie仅仅是一个文本文件，当用户访问站点时，它就被存储在用户使用的计算机上，其中，保存了一些信息，当用户日后再次访问这个站点时，web可以将这些信息提取出来。&nbsp;<br /><br />　　尽管现在听起来cookie没有什么激动人心的，但实际上利用它，你能实现许多有意义的功能！比如说：你可以在站点上放置&nbsp;<br />一个调查问答表，询问访问者最喜欢的颜色和字体，然后根据这些定制用户的web界面。并且，你还可以保存访问者的登录密码，这&nbsp;<br />样，当访问者再次访问这个站点时，不用再输入密码进行登录。&nbsp;<br /><br />　　当然，cookie也有一些不足。首先，由于利用cookie的功能可以编程实现一些不良企图，所以大多数的浏览器中都有安全设定，其中可以设置是否允许或者接受cookie，因此这就不能保证随时能使用cookie。再者，访问者可能有意或者无意地删除cookie。当访问者的机器遇到“蓝屏”死机时，或者重新格式化硬盘、安装系统后，原来保存的cookie将全部丢失。最后一点，有一些最初始的浏览器并不能支持cookie。&nbsp;<br /><br />　　利用cooklie能做什么？&nbsp;<br /><br />　　有2种使用cookie的基本方式：&nbsp;<br />　　1、将cookie写入访问者的计算机（使用&nbsp;RESPONSE&nbsp;命令）&nbsp;<br />　　2、从访问者的计算机中取回cookie（使用&nbsp;REQUEST&nbsp;命令）&nbsp;<br /><br />　　创建cookie的基本语法&nbsp;<br />　　&nbsp;<div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">Response.Cookies("CookieName")=value</div></div><br /><br />　　&nbsp;执行下面的代码将会在访问者的计算机中创建一个cookie，名字＝VisitorName，值＝Ken&nbsp;<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">Response.Cookies("VisitorName")="Ken"</div></div><br /><br />　　&nbsp;执行下面的代码将会在访问者的计算机中创建一个cookie，名字＝VisitorName，值＝表单中UserName的值&nbsp;<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">Response.Cookies("VisitorName")=Request.Form("UserName")</div></div><br /><br />　　&nbsp;读取cookie的基本语法&nbsp;<br />　　&nbsp;<div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">Request.Cookies("CookieName")</div></div><br /><br />　　&nbsp;可以将Request值当作一个变量看待，执行下面的代码，将取回名字为KensCookie的cookie值，并存入变量MyVar：&nbsp;<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">MyVar=Request.Cookies("KensCookie")</div></div><br /><br />　　&nbsp;执行下面的代码，将判断名字为KensCookie的cookie值是否为“Yes”：&nbsp;<br />If&nbsp;Request.Cookies("KensCookie")="Yes"&nbsp;then...<br /><br /><br />　　&nbsp;功能丰富的cookie&nbsp;<br /><br />　　&nbsp;你可以扩展上面的代码成为Cookie子关键值（CookieSubName），代码如下：&nbsp;<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">Response.Cookies("VisitorName")("FirstName")="Ken"&nbsp;<br />Response.Cookies("VisitorName")("LastName")="Baumbach"</div></div><br /><br /><br />　　&nbsp;讲解例子前，最后讨论2个概念：命令约定和使用到期时间。&nbsp;<br />命名约定&nbsp;<br /><br />　　&nbsp;同其他变量的命名一样，合适地、独特地命名cookie，有利于在程序中前后连贯地使用它。你可以使用下面的1个或者2个&nbsp;<br />cookie属性进行cookie变量的命名：&nbsp;<br /><br />　　&nbsp;域属性（Domain）：域属性表明cookie由哪个网站产生或者读取，默认情况下，cookie的域属性设置为产生它的网站，但你&nbsp;<br />也可以根据需要改变它。相关代码如下：Response.Cookies("CookieName").Domain&nbsp;=&nbsp;"www.mydomain.com"&nbsp;<br /><br />　　&nbsp;路径属性（Path）：路径属性可以实现更多的安全要求，通过设置网站上精确的路径，就能限制cookie的使用范围。例如：&nbsp;<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">Response.Cookies("CookieName").Path&nbsp;=&nbsp;"/maindir/subdir/path"&nbsp;</div></div><br /><br />　　&nbsp;使用到期时间&nbsp;<br /><br />　　&nbsp;通常情况下，当浏览器关闭时，一个cookie就不存在了。但是在许多时候，比如下面将要讨论的web站点例子，我们希望能更长时间地在访问者的计算机上保存cookie。很幸运，有这样的实现方法。下面的代码，就可以设置cookie的使用到期时间为2010年1月1日：&nbsp;<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">Response.Cookies("CookieName").Expires=#January&nbsp;01,&nbsp;2010#</div></div><br /><br />　　&nbsp;执行下面的代码，将设定cookie的过期时间为“cookie的创建时间＋365日”：&nbsp;<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">Response.Cookies("CookieName")=Date+365</div></div><br /><br /><br />　　&nbsp;使用cookie的实际例子<br /><br />　　&nbsp;现在开始讨论实际的例子。假设：你想做一个调查，每个人初次访问时需要填写好信息，但是当日后再访问时，就不需要再那么做。利用cookie，就可以非常圆满地解决这个问题，而大可不必用到数据库。&nbsp;<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;&nbsp;%@&nbsp;LANGUAGE="VBSCRIPT"&nbsp;%&nbsp;&gt;&nbsp;<br /><br />&lt;&nbsp;%&nbsp;<br /><br />Survey=Request.Cookies("KensSurvey")&nbsp;<br /><br />If&nbsp;Survey&nbsp;=""&nbsp;then&nbsp;<br /><br />Response.Cookies("KensSurvey")="x"&nbsp;<br /><br />Response.Cookies("KensSurvey").Expires=#January&nbsp;01,&nbsp;2010#&nbsp;<br /><br />Response.Redirect&nbsp;"survey.asp"&nbsp;<br /><br />Else&nbsp;<br /><br />'rest&nbsp;of&nbsp;the&nbsp;page&nbsp;<br /><br />End&nbsp;if&nbsp;<br /><br />%&nbsp;&gt;</div></div><br />　　&nbsp;好，下面开始从头讨论上面的代码。&nbsp;<br /><br />　　&nbsp;首先，初始设置页面，并读取名字为KensSurvey的cookie值：&nbsp;<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;&nbsp;%@&nbsp;LANGUAGE="VBSCRIPT"&nbsp;%&nbsp;&gt;&nbsp;<br /><br />&lt;&nbsp;%&nbsp;<br /><br />Survey=Request.Cookies("KensSurvey")<br /><br />　　&nbsp;'然后，判断是否已经存在cookie值：&nbsp;<br />If&nbsp;Survey&nbsp;=""&nbsp;then<br /><br />　　&nbsp;'如果不存在，&nbsp;就创建并设置cookie，并转到页面survey.asp。&nbsp;当下一次访问时，因为存在cookie值，就不会再转到survey.asp&nbsp;页面。&nbsp;<br />Response.Cookies("KensSurvey")="x"&nbsp;<br />Response.Cookies("KensSurvey").Expires=#January&nbsp;01,&nbsp;2010#&nbsp;<br />Response.Redirect&nbsp;"survey.asp"&nbsp;<br />　　&nbsp;'如果cookie已经存在，那么访问者将执行页面中剩余的代码：&nbsp;<br />'rest&nbsp;of&nbsp;the&nbsp;page&nbsp;<br /><br />End&nbsp;if&nbsp;<br />%&gt;</div></div><br /><br /><br />　　&nbsp;例子2&nbsp;<br />这里有另外一个简单的例子：当访问者第１次浏览某个站点时，向他们显示欢迎信息。代码如下：&nbsp;<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;&nbsp;%@&nbsp;LANGUAGE="VBSCRIPT"&nbsp;%&nbsp;&gt;&nbsp;<br /><br />&lt;&nbsp;%&nbsp;<br /><br />RequestName&nbsp;=&nbsp;Request.Form("Name")&nbsp;<br /><br />RequestLeaveMeAlone&nbsp;=&nbsp;Request.Form("LeaveMeAlone")&nbsp;<br /><br />If　&nbsp;RequestName&nbsp;&lt;&nbsp;&gt;""&nbsp;or&nbsp;RequestLeaveMeAlone&nbsp;&lt;&nbsp;&gt;""&nbsp;　then&nbsp;<br /><br />Response.Cookies("MySiteVisitorName")&nbsp;=&nbsp;RequestName&nbsp;<br /><br />Response.Cookies("MySiteVisitorName").Expires&nbsp;=&nbsp;#January&nbsp;01,&nbsp;2010#&nbsp;<br /><br />Response.Cookies("MySiteLeaveMeAlone")&nbsp;=&nbsp;RequestLeaveMeAlone&nbsp;<br /><br />Response.Cookies("MySiteLeaveMeAlone").Expires&nbsp;=&nbsp;#January&nbsp;01,&nbsp;2010#&nbsp;<br /><br />End&nbsp;if&nbsp;<br /><br />VisitorName&nbsp;=&nbsp;request.cookies("MySiteVisitorName")&nbsp;<br /><br />LeaveMeAlone&nbsp;=&nbsp;request.cookies("MySiteLeaveMeAlone")&nbsp;<br /><br />If&nbsp;VisitorName&nbsp;=""&nbsp;and&nbsp;LeaveMeAlone&nbsp;=""&nbsp;then&nbsp;<br /><br />%&nbsp;&gt;&nbsp;<br /><br />&lt;&nbsp;HTML&nbsp;&gt;&nbsp;&lt;&nbsp;HEAD&nbsp;&gt;&nbsp;&lt;&nbsp;/HEAD&nbsp;&gt;&nbsp;<br /><br />&lt;&nbsp;body&nbsp;bgcolor="#ccffff"&nbsp;text="black"&nbsp;link="navy"&nbsp;vlink="purple"&nbsp;&gt;&nbsp;<br /><br />&lt;&nbsp;DIV&nbsp;ALIGN="CENTER"&nbsp;&gt;&nbsp;<br /><br />&lt;&nbsp;form&nbsp;action="index.asp"&nbsp;method="POST"&nbsp;&gt;&nbsp;<br /><br />&lt;&nbsp;H2&nbsp;&gt;Let's&nbsp;be&nbsp;friends&lt;&nbsp;/H2&nbsp;&gt;&nbsp;<br /><br />What's&nbsp;your&nbsp;name&nbsp;(leave&nbsp;blank&nbsp;and&nbsp;hit&nbsp;the&nbsp;Submit&nbsp;button&nbsp;if&nbsp;you&nbsp;don't&nbsp;want&nbsp;us&nbsp;to&nbsp;know)?&nbsp;<br /><br />&lt;&nbsp;input&nbsp;type="text"&nbsp;name="name"&nbsp;&gt;&lt;&nbsp;BR&nbsp;&gt;&lt;&nbsp;BR&nbsp;&gt;&nbsp;<br /><br />&lt;&nbsp;input&nbsp;type="hidden"&nbsp;name="LeaveMeAlone"&nbsp;value="x"&nbsp;&gt;&nbsp;<br /><br />&lt;&nbsp;input&nbsp;type="submit"&nbsp;value="Submit"&nbsp;&gt;&nbsp;<br /><br />&lt;&nbsp;/FORM&nbsp;&gt;&nbsp;<br /><br />&lt;&nbsp;/DIV&nbsp;&gt;&nbsp;<br /><br />&lt;&nbsp;/BODY&nbsp;&gt;&nbsp;<br /><br />&lt;&nbsp;%&nbsp;<br /><br />End&nbsp;if&nbsp;<br /><br />If&nbsp;VisitorName&nbsp;&lt;&nbsp;&gt;&nbsp;""&nbsp;then&nbsp;<br /><br />Response.write&nbsp;"Hi,&nbsp;"&nbsp;&&nbsp;VisitorName&nbsp;&&nbsp;"!&nbsp;I&nbsp;hope&nbsp;you&nbsp;are&nbsp;having&nbsp;a&nbsp;great&nbsp;day!"&nbsp;<br /><br />End&nbsp;if&nbsp;<br /><br />'rest&nbsp;of&nbsp;the&nbsp;page&nbsp;<br /><br />%&nbsp;&gt;</div></div><br />　　&nbsp;好，现在来看看上面的代码实现执行了什么。首先，设置页面。然后，检查表单变量（在同一个页面中）。如果表单变量存在，就创建cookie，并设置到期时间。<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;&nbsp;%@&nbsp;LANGUAGE="VBSCRIPT"&nbsp;%&nbsp;&gt;&nbsp;<br /><br />&lt;&nbsp;%&nbsp;<br /><br />RequestName&nbsp;=&nbsp;Request.Form("Name")&nbsp;<br /><br />RequestLeaveMeAlone&nbsp;=&nbsp;Request.Form("LeaveMeAlone")&nbsp;<br /><br />If&nbsp;　RequestName&nbsp;&lt;&nbsp;&gt;""&nbsp;or&nbsp;RequestLeaveMeAlone&nbsp;&lt;&nbsp;&gt;""&nbsp;　then&nbsp;<br /><br />Response.Cookies("MySiteVisitorName")&nbsp;=&nbsp;RequestName&nbsp;<br /><br />Response.Cookies("MySiteVisitorName").Expires&nbsp;=&nbsp;#January&nbsp;01,&nbsp;2010#&nbsp;<br /><br />Response.Cookies("MySiteLeaveMeAlone")&nbsp;=&nbsp;RequestLeaveMeAlone&nbsp;<br /><br />Response.Cookies("MySiteLeaveMeAlone").Expires&nbsp;=&nbsp;#January&nbsp;01,&nbsp;2010#&nbsp;<br /><br />End&nbsp;if</div></div><br />　　&nbsp;接着，读取cookie：&nbsp;<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">VisitorName&nbsp;=&nbsp;request.cookies("MySiteVisitorName")&nbsp;<br />LeaveMeAlone&nbsp;=&nbsp;request.cookies("MySiteLeaveMeAlone")</div></div><br />　　&nbsp;如果cookie在访问者的计算机上不存在，就创建一个表单，询问相关信息：&nbsp;<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">If&nbsp;VisitorName&nbsp;=""&nbsp;and&nbsp;LeaveMeAlone&nbsp;=""&nbsp;then&nbsp;<br /><br />%&nbsp;&gt;&nbsp;<br /><br />&lt;&nbsp;HTML&nbsp;&gt;&nbsp;<br /><br />&lt;&nbsp;HEAD&nbsp;&gt;&nbsp;<br /><br />&lt;&nbsp;/HEAD&nbsp;&gt;&nbsp;<br /><br />&lt;&nbsp;body&nbsp;bgcolor="#ccffff"&nbsp;text="black"&nbsp;link="navy"&nbsp;vlink="purple"&nbsp;&gt;&nbsp;<br /><br />&lt;&nbsp;DIV&nbsp;ALIGN="CENTER"&nbsp;&gt;&nbsp;<br /><br />&lt;&nbsp;form&nbsp;action="index.asp"&nbsp;method="POST"&nbsp;&gt;&nbsp;<br /><br />&lt;&nbsp;H2&nbsp;&gt;Let's&nbsp;be&nbsp;friends&lt;&nbsp;/H2&nbsp;&gt;&nbsp;<br /><br />What's&nbsp;your&nbsp;name&nbsp;(leave&nbsp;blank&nbsp;and&nbsp;hit&nbsp;the&nbsp;Submit&nbsp;button&nbsp;if&nbsp;you&nbsp;don't&nbsp;want&nbsp;us&nbsp;to&nbsp;know)?&nbsp;<br /><br />&lt;&nbsp;input&nbsp;type="text"&nbsp;name="name"&nbsp;&gt;&lt;&nbsp;br&nbsp;&gt;&lt;&nbsp;br&nbsp;&gt;&nbsp;<br /><br />&lt;&nbsp;input&nbsp;type="hidden"&nbsp;name="LeaveMeAlone"&nbsp;value="x"&nbsp;&gt;&nbsp;<br /><br />&lt;&nbsp;input&nbsp;type="submit"&nbsp;value="Submit"&nbsp;&gt;&nbsp;<br /><br />&lt;&nbsp;/FORM&nbsp;&gt;&nbsp;<br /><br />&lt;&nbsp;/DIV&nbsp;&gt;&nbsp;<br /><br />&lt;&nbsp;/BODY&nbsp;&gt;&nbsp;<br /><br />&lt;&nbsp;%&nbsp;<br /><br />End&nbsp;if<br /></div></div><br />　　&nbsp;如果cookie已经存在，并且用户名字存在，就显示给访问者一个欢迎界面，然后执行其余的代码。&nbsp;<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">If&nbsp;VisitorName&nbsp;&lt;&nbsp;&gt;&nbsp;""&nbsp;then&nbsp;<br /><br />Response.write&nbsp;"Hi,&nbsp;"&nbsp;&&nbsp;VisitorName&nbsp;&&nbsp;"!&nbsp;I&nbsp;hope&nbsp;you&nbsp;are&nbsp;<br />having&nbsp;a&nbsp;great&nbsp;day!"&nbsp;<br /><br />End&nbsp;if&nbsp;<br /><br />'rest&nbsp;of&nbsp;the&nbsp;page&nbsp;<br /><br />%&nbsp;&gt;</div></div><br />　　&nbsp;尽管上面的这个例子很简单，但可以从中扩展许多富有创造力的应用。你可以在表单中加入许多功能，以便定制化web站点。&nbsp;<br />你还可以让访问者定制网站的色彩、字体，以至于其他web元素。有可能的话，你可以询问访问者的生日，当访问者在那一天来访&nbsp;<br />时，你就可以显示“生日快乐”的信息给他。&nbsp;<br /><br />　　&nbsp;如你所见，cookie的扩展性是无穷的，这篇文章仅仅是抛砖引玉。&nbsp;<br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">ASP连接11种数据库语法总结</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_138.html" />
      <updated>2008-10-2 10:07:33</updated>
      <published>2008-10-2 10:07:33</published>
      <id>http://dev.mo.cn/article_138.html</id>
      <summary type="html">
      <![CDATA[经常使用到有关数据库的操作。包括连接代码、SQL命令等等，又不曾刻意去记忆它们（我本人是不愿意去记这东东），所以常常在用到的时候又去查书本，翻来翻去。一些比较少用的数据库还不一定能顺利找到，所以现在把它们全归纳到这里，提供大家参考。&nbsp;<br /><br /><br />&lt;一&gt;数据库的连接方法：<br /><br />　　1.Access数据库的DSN-less连接方法:<br /><br />set&nbsp;adocon=Server.Createobject("adodb.connection")<br />adoconn.Open"Driver={Microsoft&nbsp;Access&nbsp;Driver(*.mdb)};DBQ="&&nbsp;_<br />Server.MapPath("数据库所在路径")<br /><br />　　2.Access&nbsp;OLE&nbsp;DB连接方法：<br />set&nbsp;adocon=Server.Createobject("adodb.connection")<br />adocon.open"Provider=Microsoft.Jet.OLEDB.4.0;"&&nbsp;_<br />"Data&nbsp;Source="&nbsp;&&nbsp;Server.MapPath("数据库所在路径")<br /><br />　　3.SQL&nbsp;server连接方法：<br />set&nbsp;adocon=server.createobject("adodb.recordset")<br />adocon.Open"Driver={SQL&nbsp;Server};Server=(Local);UID=***;PWD=***;"&&nbsp;_<br />"database=数据库名;"<br /><br />　　4.SQL&nbsp;server&nbsp;OLE&nbsp;DB连接方法:<br />set&nbsp;adocon=Server.Createobject("adodb.connection")<br />adocon.open"provider=SQLOLEDB.1;Data&nbsp;Source=RITANT4;"&&nbsp;_<br />"user&nbsp;ID=***;Password=***;"&&nbsp;_<br />"inital&nbsp;Catalog=数据库名"<br /><br />　5.Oracle&nbsp;连接方法:<br />set&nbsp;adocon=Server.Createobject("adodb.connection")<br />adocon.open"Driver={microsoft&nbsp;odbc&nbsp;for&nbsp;oracle};server=oraclesever.world;uid=admin;pwd=pass;"<br /><br />　　6.Oracle&nbsp;OLE&nbsp;DB&nbsp;连接方法:<br />set&nbsp;adocon=Server.Createobject("adodb.connection")<br />adocon.open"Provider=OraOLEDB.Oracle;data&nbsp;source=dbname;user&nbsp;id=admin;password=pass;"<br /><br />　　7.dBase&nbsp;连接方法:<br />set&nbsp;adocon=Server.Createobject("adodb.connection")<br />adocon.open"Driver={microsoft&nbsp;dbase&nbsp;driver(*.dbf)};driverid=277;dbq=------------;"<br /><br />　　8.mySQL&nbsp;连接方法:<br />set&nbsp;adocon=Server.Createobject("adodb.connection")<br />adocon.open"Driver={mysql};database=yourdatabase;<br />uid=username;pwd=yourpassword;option=16386;"<br /><br />　　9.Visual&nbsp;Foxpro&nbsp;连接方法:<br />set&nbsp;adocon=Server.Createobject("adodb.connection")<br />adocon.open"Driver={microsoft&nbsp;Visual&nbsp;Foxpro&nbsp;driver};sourcetype=DBC;sourceDB=*.dbc;Exclusive=No;"<br /><br />　　10.MS&nbsp;text&nbsp;连接方法:<br />set&nbsp;adocon=Server.Createobject("adodb.connection")<br />adocon.open"Driver={microsoft&nbsp;text&nbsp;driver(*.txt;&nbsp;*.csv)};dbq=-----;"&_<br />"extensions=asc,csv,tab,txt;Persist&nbsp;SecurityInfo=false;"<br /><br />　　11.MS&nbsp;text&nbsp;OLE&nbsp;DB&nbsp;连接方法:<br />set&nbsp;adocon=Server.Createobject("adodb.connection")<br />adocon.open"Provider=microsoft.jet.oledb.4.0;data&nbsp;source=your_path;"&_<br />"Extended&nbsp;Properties'text;FMT=Delimited'"<br /><br />&lt;二&gt;常用的四种SQL命令：<br /><br />　　1.查询数据记录(Select)<br />　　语法：Select&nbsp;字段串行&nbsp;From&nbsp;table&nbsp;Where&nbsp;字段=内容<br />　　例子：想从book表中找出作者为"cancer"的所有记录，SQL语句便如下：<br />select&nbsp;*&nbsp;from&nbsp;book&nbsp;where&nbsp;author=’cancer’<br /><br />　　"*"是取出book表所有的字段，如查询的字段值为数字，则其后的"内容"便无须加上单引号，如是日期，则在Access中用(#)包括，而在SQL&nbsp;server中则用(’)包括，<br />如:<br />select&nbsp;*&nbsp;from&nbsp;book&nbsp;where&nbsp;id=1<br />select&nbsp;*&nbsp;from&nbsp;book&nbsp;where&nbsp;pub_date=#2002-1-7#&nbsp;(Access)<br />select&nbsp;*&nbsp;from&nbsp;book&nbsp;where&nbsp;pub_date=’2002-1-7’&nbsp;(SQL&nbsp;Server)<br /><br />　　提示：<br />　　日期函数to_date不是标准sql文，不是所有的数据库适用，所以大家在使用的时候要参考数据库具体语法<br /><br />　　另外如果是查询传入的变量，则如下：<br />strau=request.form("author")<br />strsql="select&nbsp;*&nbsp;from&nbsp;book&nbsp;where&nbsp;author=’"&strau&"’"<br /><br />　　如果查询的是数字，则：<br />intID=request.form("id")<br />strsql="select&nbsp;*&nbsp;from&nbsp;book&nbsp;where&nbsp;id="&intID<br /><br />　　在很多数据库中，如：oracle，上面的语句是可以写成：<br />strsql="select&nbsp;*&nbsp;from&nbsp;book&nbsp;where&nbsp;id='"&intID&"'"<br /><br />　　但是字符型一定不能按照数字格式写，需要注意。<br />2.添加记录(Insert)<br />　　语法：<br />Insert&nbsp;into&nbsp;table(field1,field2,....)&nbsp;Values&nbsp;(value1,value2,....)<br /><br />　　例子：添加一作者是"cancer"的记录入book表:<br />insert&nbsp;into&nbsp;book&nbsp;(bookno,author,bookname)&nbsp;values&nbsp;(’CF001’,’cancer’,’Cancer无组件上传程序’)<br /><br />　　同样，如果用到变量就如下：<br />strno=request.form("bookno")<br />strau=request.form("author")<br />strname=request.form("bookname")<br />strsql="insert&nbsp;into&nbsp;book&nbsp;(bookno,author,bookname)&nbsp;values&nbsp;(’"&strno&"’,’"&strau&"’,’"&strname&"’)"<br /><br />　　3.用Recordset对象的Addnew插入数据的方法:<br />　　语法：<br />rs.addnew<br />rs("field1").value=value1<br />rs("field2").value=value2<br />...<br />rs.update<br /><br />　　4.修改数据记录(Update)<br />　　语法：<br />update&nbsp;table&nbsp;set&nbsp;field1=value1,field2=value2,...where&nbsp;fieldx=valuex<br /><br />　　例子：<br />update&nbsp;book&nbsp;set&nbsp;author=’babycrazy’&nbsp;where&nbsp;bookno=’CF001’<br /><br />　　如果用到变量就如下：<br />strno=request.form("bookno")<br />strau=request.form("author")<br />strsql="update&nbsp;book&nbsp;set&nbsp;author=’"&strau&"’&nbsp;where&nbsp;bookno=’"&strno"’"<br />5.Recordset对象的Update方法:<br />　　语法：<br />rs("field1").value=value1<br />rs("field2").value=value2<br />...<br />rs.update<br /><br />　　注意：使用语法3和语法5的时候，一定要注意字段的类型（尤其是日期型）一致，否则出错的几率非常的高。<br /><br />　　例子：<br />strno=request.form("bookno")<br />strau=request.form("author")<br />set&nbsp;adocon=server.createobject("adodb.connection")<br />adocon.open&nbsp;"Driver={Microsoft&nbsp;Access&nbsp;Driver(*.mdb)};DBQ="&nbsp;&&nbsp;_<br />Server.Mappath=("/cancer/cancer.mdb")<br />strsql="select&nbsp;*&nbsp;from&nbsp;book&nbsp;where&nbsp;bookno=’"&strno&"’"<br />set&nbsp;rs=server.createobject("adodb.recordset")<br />rs.open&nbsp;strsql,adconn,1,3<br />if&nbsp;not&nbsp;rs.eof&nbsp;then&nbsp;’如果有此记录的话<br />rs("author").value=strau<br />rs.update<br />end&nbsp;if<br />rs.close<br />set&nbsp;rs=nothing<br />adocon.close<br />set&nbsp;adocon=nothing<br /><br />　　6.删除一条记录(Delete)<br />　　语法：<br />Delete&nbsp;table&nbsp;where&nbsp;field=value<br /><br />　　例子：删除book表中作者是cancer的记录<br />delete&nbsp;book&nbsp;where&nbsp;author=’cancer’<br /><br />　　(注意：如果book表中author字段的值为cancer的记录有多条，将会删除所有author为cancer的记录)<br /><br />　　好了，学会了用这些操作，大家在用asp操作数据库的时候，该是没有什么问题了。&nbsp;]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">用ASP实现在线压缩与解压缩</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_136.html" />
      <updated>2008-10-2 9:56:05</updated>
      <published>2008-10-2 9:56:05</published>
      <id>http://dev.mo.cn/article_136.html</id>
      <summary type="html">
      <![CDATA[一、问题的提出<br /><br />　　随着互连网的发展，网站的数量以惊人的数字增加。网站的作用除了给广大网友们提供信息资讯服务外，还应该成为网友们上传与下载文件的场所。在上传与下载文件的过程中，传输时间是关键，这就要求有较快的传输速度。在传输速度固定不变或是上下变动不大的情况下，尽量减小传输文件的体积，是一个可行的办法：上传文件的时候，先将要上传的文件用WINRAR压缩，上传成功后在网站内通过程序实现解压缩；下载文件的时候，先将要下载的文件在网站内通过程序实现压缩然后再下载。本文就针对该问题的解决进行探讨。<br /><br /><br />二、方法与说明<br /><br />　　首先要上传一个WINRAR的解压程序，就是WINRAR自己的解压程序，只需要它的核心程序RAR.EXE这个文件就可以了，在WINRAR的安装目录里可以找到。然后要上传一个执行RAR.EXE的程序&nbsp;CMD.EXE&nbsp;这个是WINDOWS操作系统里的程序，在系统盘WINNT/SYSTEM32文件夹中可以找到。上传完这两个文件后，就需要编写一些程序代码来实现压缩与解压缩。<br /><br />　　不妨将实现压缩功能的文件取名为ZIP.ASP，实现解压缩功能的文件取名为UNZIP.ASP。<br /><br />　　程序代码中包含了WINRAR这个应用程序的命令行语法，下面简单介绍一下：<br /><br />　　WinRAR&nbsp;&lt;命令&gt;&nbsp;-&lt;开关1&gt;&nbsp;-&lt;开关N&gt;&nbsp;&lt;压缩文件&gt;&nbsp;&lt;文件...&gt;&nbsp;&lt;@列表文件...&gt;&nbsp;&lt;解压路径\&gt;<br /><br />　　命令&nbsp;要&nbsp;WinRAR&nbsp;运行的字符组合代表功能。<br /><br />　　开关&nbsp;切换操作指定类型，压缩强度，压缩文件类型，等等的定义。<br /><br />　　压缩文件&nbsp;要处理的压缩文件名。<br /><br />　　文件&nbsp;要处理的文件名。<br /><br />　　列表文件&nbsp;列表文件是包含要处理文件名称的纯文本。文件名应该在第一卷启动。可以在列表文件中使用//字符后添加注释。例如，你可以包含两列字符串创建&nbsp;backup.lst:c:\work\doc\*.txt&nbsp;//备份文本文档&nbsp;c:\work\image\*.bmp&nbsp;//备份图片c:\work\misc并接着运行:&nbsp;winrar&nbsp;a&nbsp;backup&nbsp;@backup.lst你可以在命令行中同时指定普通的文件名和列表文件名。<br /><br />　　解压路径&nbsp;只与命令&nbsp;e&nbsp;和&nbsp;x&nbsp;，搭配使用。指出解压文件添加的位置。如果文件夹不存在时，会自动创建。<br /><br /><br />　　字母命令列表：<br /><br />　　a&nbsp;添加文件到压缩文件&nbsp;c&nbsp;添加压缩文件注释&nbsp;<br />　　d&nbsp;从压缩文件删除文件&nbsp;e&nbsp;从压缩文件解压压缩，忽略路径&nbsp;<br />　　f&nbsp;刷新压缩文件中的文件&nbsp;i&nbsp;在压缩文件中查找字符串&nbsp;<br />　　k&nbsp;锁定压缩文件&nbsp;m&nbsp;移动文件和文件夹到压缩文件&nbsp;<br />　　r&nbsp;修复受损的压缩文件&nbsp;rc&nbsp;重建丢失的卷&nbsp;<br />　　rn&nbsp;重命名压缩文件&nbsp;rr[N]&nbsp;添加数据恢复记录&nbsp;<br />　　rv[N]&nbsp;创建恢复卷&nbsp;s[name]&nbsp;转换压缩文件成为自解压文件类型&nbsp;<br />　　s-&nbsp;删除自解压模块&nbsp;t&nbsp;测试压缩文件&nbsp;<br />　　u&nbsp;从压缩文件中更新文件&nbsp;x&nbsp;以完整路径名称从压缩文件解压压缩&nbsp;<br /><br />　　其实程序代码中的关键之处就是用Server.CreateObject("Wscript.Shell")来执行CMD.EXE，CMD.EXE运行RAR.EXE通过WINRAR的命令来执行解压缩文件与压缩文件的。<br /><br /><br />三、程序清单<br /><br />ZIP.ASP程序清单：<br /><br /><br />&lt;%<br />'main文件夹中包含cmd.exe&nbsp;rar.exe&nbsp;例如：要压缩的文件（*.mdb)<br />'压缩后的存放目录为main\data.rar<br />on&nbsp;error&nbsp;resume&nbsp;next<br />unzip_path=Server.mappath("main")&"\"<br />Set&nbsp;WshShell&nbsp;=&nbsp;server.CreateObject("Wscript.Shell")<br />IsSuccess&nbsp;=&nbsp;WshShell.Run&nbsp;("winrar&nbsp;a&nbsp;"&unzip_path&"data&nbsp;<br />"&unzip_path&"*.mdb",1,&nbsp;False)<br />'WinRAR&nbsp;&lt;命令&gt;&nbsp;-&lt;开关1&gt;&nbsp;-&lt;开关N&gt;&nbsp;&lt;压缩文件&gt;&nbsp;&lt;文件...&gt;&nbsp;&lt;@列表文件...&gt;&nbsp;<br />&lt;解压路径\&gt;<br />'命令:&nbsp;A&nbsp;-&nbsp;添加到压缩文件中<br />if&nbsp;IsSuccess&nbsp;=&nbsp;0&nbsp;Then<br />Response.write&nbsp;"&nbsp;命令成功执行！"<br />else<br />Response.write&nbsp;"&nbsp;命令执行失败！权限不够或者该程序无法运行"<br />end&nbsp;if<br />if&nbsp;err.number&nbsp;&lt;&gt;&nbsp;0&nbsp;then<br />Response.Write&nbsp;"&lt;p&gt;错误号码："&nbsp;&&nbsp;Err.number<br />Response.Write&nbsp;"&lt;p&gt;原因："&nbsp;&&nbsp;Err.description<br />Response.Write&nbsp;"&lt;p&gt;错误来源："&nbsp;&&nbsp;Err.Source<br />Response.Write&nbsp;<br />end&nbsp;if<br />%&gt;<br /><br /><br />UNZIP.ASP程序清单：<br />&lt;%<br />'main文件夹中包含cmd.exe&nbsp;rar.exe&nbsp;要解压缩的文件（*.rar)&nbsp;<br />'解压缩后的存放目录为main<br />on&nbsp;error&nbsp;resume&nbsp;next<br />unzip_path=Server.mappath("main")&"\"<br />Set&nbsp;WshShell&nbsp;=&nbsp;server.CreateObject("Wscript.Shell")<br />IsSuccess&nbsp;=&nbsp;WshShell.Run&nbsp;("winrar&nbsp;x&nbsp;-r&nbsp;-o+&nbsp;"&unzip_path&"*.rar&nbsp;<br />"&unzip_path&"",1,&nbsp;False)<br />'WinRAR&nbsp;&lt;命令&gt;&nbsp;-&lt;开关1&gt;&nbsp;-&lt;开关N&gt;&nbsp;&lt;压缩文件&gt;&nbsp;&lt;文件...&gt;&nbsp;&lt;@列表文件...&gt;&nbsp;<br />&lt;解压路径\&gt;<br />'命令:&nbsp;X&nbsp;-&nbsp;从压缩文件中全路径解压文件<br />'开关:&nbsp;-R&nbsp;-&nbsp;连同子文件夹<br />'开关:&nbsp;-O+&nbsp;-&nbsp;覆盖已经存在的文件<br />'开关:&nbsp;-O-&nbsp;-&nbsp;不覆盖已经存在的文件<br />if&nbsp;IsSuccess&nbsp;=&nbsp;0&nbsp;Then<br />Response.write&nbsp;"&nbsp;命令成功执行！"<br />else<br />Response.write&nbsp;"&nbsp;命令执行失败！权限不够或者该程序无法运行"<br />end&nbsp;if<br />if&nbsp;err.number&nbsp;&lt;&gt;&nbsp;0&nbsp;then<br />Response.Write&nbsp;"&lt;p&gt;错误号码："&nbsp;&&nbsp;Err.number<br />Response.Write&nbsp;"&lt;p&gt;原因："&nbsp;&&nbsp;Err.description<br />Response.Write&nbsp;"&lt;p&gt;错误来源："&nbsp;&&nbsp;Err.Source<br />Response.Write&nbsp;<br />end&nbsp;if<br />%&gt;<br /><br /><br />四、&nbsp;结论<br /><br />　　本文通过使用RAR.EXE和&nbsp;CMD.EXE这两个文件，在ASP编程中实现在线压缩与解压缩网站中的文件的功能。实现方法简单，程序代码少，可供实用编程时借鉴使用。尤其是在拥有自己的服务器的情况下极其实用和方便。以上程序在Windows2000Sever及IIS5.0下运行通过。&nbsp;<br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">Asp图片验证码</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_135.html" />
      <updated>2008-10-2 1:55:24</updated>
      <published>2008-10-2 1:55:24</published>
      <id>http://dev.mo.cn/article_135.html</id>
      <summary type="html">
      <![CDATA[保存下面代码到code.asp,在需要显示验证码的地方使用<br />&lt;img&nbsp;src="code.asp"&nbsp;alt="验证码"&nbsp;/&gt;来显示,使用session("GetCode")<br />来提取验证码<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;%<br />Option&nbsp;Explicit<br />Response.buffer=true<br />Call&nbsp;Com_CreatValidCode("GetCode")<br />Sub&nbsp;Com_CreatValidCode(pSN)<br />Response.Expires&nbsp;=&nbsp;-1<br />Response.AddHeader&nbsp;"Pragma","no-cache"<br />Response.AddHeader&nbsp;"cache-ctrol","no-cache"<br />Response.ContentType&nbsp;=&nbsp;"Image/bmp"<br />Randomize<br />Dim&nbsp;i,&nbsp;ii,&nbsp;iii<br />Const&nbsp;cOdds&nbsp;=&nbsp;6&nbsp;'&nbsp;杂点出现的机率<br />Const&nbsp;cAmount&nbsp;=&nbsp;10&nbsp;'&nbsp;文字数量<br />Const&nbsp;cCode&nbsp;=&nbsp;"0123456789abcd"<br />'&nbsp;颜色的数据(字符，背景)<br />Dim&nbsp;vColorData(1)<br />vColorData(0)&nbsp;=&nbsp;ChrB(0)&nbsp;&&nbsp;ChrB(0)&nbsp;&&nbsp;ChrB(255)&nbsp;'&nbsp;蓝0，绿0，红0（黑色）<br />vColorData(1)&nbsp;=&nbsp;ChrB(255)&nbsp;&&nbsp;ChrB(255)&nbsp;&&nbsp;ChrB(255)&nbsp;'&nbsp;蓝250，绿236，红211（浅蓝色）<br />'&nbsp;随机产生字符<br />Dim&nbsp;vCode(4),&nbsp;vCodes<br />For&nbsp;i&nbsp;=&nbsp;0&nbsp;To&nbsp;3<br />vCode(i)&nbsp;=&nbsp;Int(Rnd&nbsp;*&nbsp;cAmount)<br />vCodes&nbsp;=&nbsp;vCodes&nbsp;&&nbsp;Mid(cCode,&nbsp;vCode(i)&nbsp;+&nbsp;1,&nbsp;1)<br />Next<br />Session(pSN)&nbsp;=&nbsp;vCodes&nbsp;'记录入Session<br />'&nbsp;字符的数据<br />Dim&nbsp;vNumberData(9)<br />vNumberData(0)&nbsp;=&nbsp;"1110000111110111101111011110111101001011110100101111010010111101001011110111101111011110111110000111"<br />vNumberData(1)&nbsp;=&nbsp;"1111011111110001111111110111111111011111111101111111110111111111011111111101111111110111111100000111"<br />vNumberData(2)&nbsp;=&nbsp;"1110000111110111101111011110111111111011111111011111111011111111011111111011111111011110111100000011"<br />vNumberData(3)&nbsp;=&nbsp;"1110000111110111101111011110111111110111111100111111111101111111111011110111101111011110111110000111"<br />vNumberData(4)&nbsp;=&nbsp;"1111101111111110111111110011111110101111110110111111011011111100000011111110111111111011111111000011"<br />vNumberData(5)&nbsp;=&nbsp;"1100000011110111111111011111111101000111110011101111111110111111111011110111101111011110111110000111"<br />vNumberData(6)&nbsp;=&nbsp;"1111000111111011101111011111111101111111110100011111001110111101111011110111101111011110111110000111"<br />vNumberData(7)&nbsp;=&nbsp;"1100000011110111011111011101111111101111111110111111110111111111011111111101111111110111111111011111"<br />vNumberData(8)&nbsp;=&nbsp;"1110000111110111101111011110111101111011111000011111101101111101111011110111101111011110111110000111"<br />vNumberData(9)&nbsp;=&nbsp;"1110001111110111011111011110111101111011110111001111100010111111111011111111101111011101111110001111"<br />'&nbsp;输出图像文件头<br />Response.BinaryWrite&nbsp;ChrB(66)&nbsp;&&nbsp;ChrB(77)&nbsp;&&nbsp;ChrB(230)&nbsp;&&nbsp;ChrB(4)&nbsp;&&nbsp;ChrB(0)&nbsp;&&nbsp;ChrB(0)&nbsp;&&nbsp;ChrB(0)&nbsp;&&nbsp;ChrB(0)&nbsp;&_<br />ChrB(0)&nbsp;&&nbsp;ChrB(0)&nbsp;&&nbsp;ChrB(54)&nbsp;&&nbsp;ChrB(0)&nbsp;&&nbsp;ChrB(0)&nbsp;&&nbsp;ChrB(0)&nbsp;&&nbsp;ChrB(40)&nbsp;&&nbsp;ChrB(0)&nbsp;&_<br />ChrB(0)&nbsp;&&nbsp;ChrB(0)&nbsp;&&nbsp;ChrB(40)&nbsp;&&nbsp;ChrB(0)&nbsp;&&nbsp;ChrB(0)&nbsp;&&nbsp;ChrB(0)&nbsp;&&nbsp;ChrB(10)&nbsp;&&nbsp;ChrB(0)&nbsp;&_<br />ChrB(0)&nbsp;&&nbsp;ChrB(0)&nbsp;&&nbsp;ChrB(1)&nbsp;&&nbsp;ChrB(0)<br />'&nbsp;输出图像信息头<br />Response.BinaryWrite&nbsp;ChrB(24)&nbsp;&&nbsp;ChrB(0)&nbsp;&&nbsp;ChrB(0)&nbsp;&&nbsp;ChrB(0)&nbsp;&&nbsp;ChrB(0)&nbsp;&&nbsp;ChrB(0)&nbsp;&&nbsp;ChrB(176)&nbsp;&&nbsp;ChrB(4)&nbsp;&_<br />ChrB(0)&nbsp;&&nbsp;ChrB(0)&nbsp;&&nbsp;ChrB(18)&nbsp;&&nbsp;ChrB(11)&nbsp;&&nbsp;ChrB(0)&nbsp;&&nbsp;ChrB(0)&nbsp;&&nbsp;ChrB(18)&nbsp;&&nbsp;ChrB(11)&nbsp;&_<br />ChrB(0)&nbsp;&&nbsp;ChrB(0)&nbsp;&&nbsp;ChrB(0)&nbsp;&&nbsp;ChrB(0)&nbsp;&&nbsp;ChrB(0)&nbsp;&&nbsp;ChrB(0)&nbsp;&&nbsp;ChrB(0)&nbsp;&&nbsp;ChrB(0)&nbsp;&_<br />ChrB(0)&nbsp;&&nbsp;ChrB(0)<br />For&nbsp;i&nbsp;=&nbsp;9&nbsp;To&nbsp;0&nbsp;Step&nbsp;-1&nbsp;'&nbsp;历经所有行<br />For&nbsp;ii&nbsp;=&nbsp;0&nbsp;To&nbsp;3&nbsp;'&nbsp;历经所有字<br />For&nbsp;iii&nbsp;=&nbsp;1&nbsp;To&nbsp;10&nbsp;'&nbsp;历经所有像素<br />'&nbsp;逐行、逐字、逐像素地输出图像数据<br />If&nbsp;Rnd&nbsp;*&nbsp;99&nbsp;+&nbsp;1&nbsp;&lt;&nbsp;cOdds&nbsp;Then&nbsp;'&nbsp;随机生成杂点<br />Response.BinaryWrite&nbsp;vColorData(0)<br />Else<br />Response.BinaryWrite&nbsp;vColorData(Mid(vNumberData(vCode(ii)),&nbsp;i&nbsp;*&nbsp;10&nbsp;+&nbsp;iii,&nbsp;1))<br />End&nbsp;If<br />Next<br />Next<br />Next<br />End&nbsp;Sub<br />%&gt;&nbsp;</div></div>]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">sql查询语句总结</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_134.html" />
      <updated>2008-10-2 1:51:04</updated>
      <published>2008-10-2 1:51:04</published>
      <id>http://dev.mo.cn/article_134.html</id>
      <summary type="html">
      <![CDATA[数据查询<br />查询查询格式：<br />SELECT&nbsp;*/列名,.../表达式<br />from&nbsp;表名/视图<br />where&nbsp;条件<br />order&nbsp;by&nbsp;列名1&nbsp;asc,列名2&nbsp;desc<br />group&nbsp;by&nbsp;列名1，列名2&nbsp;HAVING&nbsp;过滤条件<br />查询指定列<br />SELECT&nbsp;Sno,Sname&nbsp;FROM&nbsp;Student<br />查询全部列<br />SELECT&nbsp;*&nbsp;FROM&nbsp;Student<br />更改查询结果中的列标题<br />old_name&nbsp;as&nbsp;new_name&nbsp;或&nbsp;new_name=&nbsp;old_name&nbsp;<br />查询学生表中的姓名和出生年份,并将系别小写显示<br />SELECT&nbsp;Sname,’Year&nbsp;of&nbsp;Birth:’,2004-Sage,&nbsp;LOWER(Sdept)&nbsp;FROM&nbsp;Student<br />消除取值重复的行&nbsp;<br />SELECT&nbsp;DISTINCT&nbsp;Sno&nbsp;FROM&nbsp;SC<br />限制结果集中返回的行数<br />select&nbsp;top&nbsp;5&nbsp;*&nbsp;from&nbsp;xs<br />select&nbsp;top&nbsp;10&nbsp;percent&nbsp;from&nbsp;xs<br />查询满足条件的元组&nbsp;<br />常用的查询条件<br /><br />SELECT&nbsp;Sname&nbsp;FROM&nbsp;Student&nbsp;WHERE&nbsp;Sdept=‘CS’<br />SELECT&nbsp;Sname,Sage&nbsp;FROM&nbsp;Student&nbsp;WHERE&nbsp;Sage&lt;20<br />SELECT&nbsp;Sname,Sage&nbsp;FROM&nbsp;Student&nbsp;WHERE&nbsp;NOT&nbsp;Sage&gt;=20<br />SELECT&nbsp;DISTINCT&nbsp;Sno&nbsp;FROM&nbsp;SC&nbsp;WHERE&nbsp;Grade&lt;60<br />SELECT&nbsp;Sname,Sdept,Sage&nbsp;FROM&nbsp;Student&nbsp;WHERE&nbsp;Sage&nbsp;BETWEEN&nbsp;20&nbsp;AND&nbsp;23<br />SELECT&nbsp;Sname,Sdept,Sage&nbsp;FROM&nbsp;Student&nbsp;WHERE&nbsp;Sage&nbsp;NOT&nbsp;BETWEEN&nbsp;20&nbsp;AND&nbsp;23<br />判断表达式的值是否在子查询的结果中&nbsp;:IN&nbsp;,NOT&nbsp;IN<br />SELECT&nbsp;Sname,sgender&nbsp;FROM&nbsp;Student&nbsp;WHERE&nbsp;Sdept&nbsp;IN&nbsp;(‘IS’,’MA’,’CS’)<br />SELECT&nbsp;Sname,sgender&nbsp;FROM&nbsp;Student&nbsp;WHERE&nbsp;Sdept&nbsp;NOT&nbsp;IN&nbsp;(‘IS’,’MA’,’CS’)<br />谓词LIKE的一般语法格式为<br />[NOT]&nbsp;LIKE&nbsp;‘&lt;匹配串&gt;’&nbsp;[‘ESCAPE’&nbsp;&lt;换码字符&gt;]<br />查找姓刘的学生的姓名,年龄,性别<br />SELECT&nbsp;Sname,Sno,sgender&nbsp;FROM&nbsp;Student&nbsp;WHERE&nbsp;Sname&nbsp;LIKE&nbsp;‘刘%’<br />匹配规则<br />“%”&nbsp;&nbsp;匹配零个或多个字符<br />“_”&nbsp;&nbsp;&nbsp;匹配任意单个字符<br />Escape&nbsp;定义转义字符，以去掉特殊字符的特定含义，使其被作为普通字符看待<br />如escape&nbsp;“\”，定义&nbsp;\&nbsp;作为转义字符，则可用\%去匹配%，用\＿去匹配＿<br />查询课程名称以”db_”开头的所有课程情况<br />Select&nbsp;*&nbsp;from&nbsp;course&nbsp;where&nbsp;cname&nbsp;like&nbsp;‘db\_%’&nbsp;escape&nbsp;‘\’<br />查询课程名称以”db_”开头，且倒数第3&nbsp;个字符为I的课程和详细情况<br />Select&nbsp;*&nbsp;From&nbsp;course&nbsp;Where&nbsp;cname&nbsp;like&nbsp;‘db\_%I__’escape&nbsp;‘\’<br />查询&nbsp;学号是98001的学生信息(注意：这里的学号是字符型)<br />SELECT&nbsp;*&nbsp;FROM&nbsp;Student&nbsp;WHERE&nbsp;Sno&nbsp;LIKE&nbsp;‘98001’<br />SELECT&nbsp;*&nbsp;FROM&nbsp;Student&nbsp;WHERE&nbsp;Sno=‘98001’<br />查询“欧阳”姓的学生信息<br />SELECT&nbsp;Sname&nbsp;FROM&nbsp;Student&nbsp;WHERE&nbsp;Sname&nbsp;like&nbsp;‘欧阳__’<br />查缺少成绩的学生的学号和相应的课程号&nbsp;<br />SELECT&nbsp;Sno,Cno&nbsp;FROM&nbsp;SC&nbsp;WHERE&nbsp;Grade&nbsp;IS&nbsp;NULL<br />查所有有成绩的记录的学生学号和课程号&nbsp;<br />SELECT&nbsp;Sno,Cno&nbsp;FROM&nbsp;SC&nbsp;WHERE&nbsp;Grade&nbsp;IS&nbsp;NOT&nbsp;NULL<br />查CS系年龄在20岁以下的学生姓名&nbsp;<br />SELECT&nbsp;Sname&nbsp;FROM&nbsp;Student&nbsp;WHERE&nbsp;Sdept=‘CS’&nbsp;AND&nbsp;Sage&lt;20<br />注意运算符优先级<br />SELECT&nbsp;sname,&nbsp;sage,&nbsp;sdept&nbsp;FROM&nbsp;student&nbsp;WHERE&nbsp;sage=18&nbsp;OR&nbsp;sage=19&nbsp;AND&nbsp;sdept=‘cs’<br />排序，分组，多表查询，嵌套查询，集合查询<br />对查询结果排序<br />查询学生的学号和成绩，并按成绩的降序排列<br />SELECT&nbsp;Sno,Grade&nbsp;FROM&nbsp;SC&nbsp;WHERE&nbsp;Cno=‘3’&nbsp;ORDER&nbsp;BY&nbsp;Grade&nbsp;DESC<br />查询全体学生情况，查询结果按所在系升序排列，对同一系中的学生按年龄降序排列&nbsp;<br />SELECT&nbsp;*&nbsp;FROM&nbsp;Student&nbsp;ORDER&nbsp;BY&nbsp;Sdept,Sage&nbsp;DESC<br />使用集函数<br />主要集函数<br />COUNT&nbsp;（[DISTINCT|ALL]&nbsp;*）&nbsp;统计元组个数<br />COUNT&nbsp;（[DISTINCT|ALL]&nbsp;&lt;列名&gt;）&nbsp;统计一列中值的个数<br />SUM&nbsp;（[DISTINCT|ALL]&nbsp;&lt;列名&gt;）计算一列值的总和<br />AVG（[DISTINCT|ALL]&nbsp;&lt;列名&gt;）计算一列值的平均值<br />MAX（[DISTINCT|ALL]&nbsp;&lt;列名&gt;）求一列值中的最大值<br />MIN（[DISTINCT|ALL]&nbsp;&lt;列名&gt;）求一列值中的最小值<br />例1：查询学生总人数&nbsp;&nbsp;SELECT&nbsp;COUNT(*)&nbsp;&nbsp;FROM&nbsp;&nbsp;Student;<br />例2：查询选修了课程的学生人数&nbsp;&nbsp;SELECT&nbsp;COUNT(DISTINCT&nbsp;Sno)&nbsp;FROM&nbsp;SC;<br />例3：计算1号课程的学生平均成绩&nbsp;&nbsp;SELECT&nbsp;AVG(Grade)&nbsp;FROM&nbsp;SC&nbsp;WHERE&nbsp;Cno=‘1’;<br />例4：查询学习1号课程的学生最高分数&nbsp;SELECT&nbsp;MAX(Grade)&nbsp;FROM&nbsp;SC&nbsp;WHERE&nbsp;Cno=‘1’;<br />对查询结果分组<br />group&nbsp;by&nbsp;&nbsp;&nbsp;列名&nbsp;&nbsp;[having&nbsp;&nbsp;&nbsp;条件表达式]<br />group&nbsp;by将表中的元组按指定列上值相等的原则分组，然后在每一分组上使用聚集函数，得到单一值<br />having则对分组进行选择，只将聚集函数作用到满足条件的分组上<br /><br />例：查询各个课程号与相应的选课人数&nbsp;<br />SELECT&nbsp;Cno,COUNT(Sno)&nbsp;FROM&nbsp;SC&nbsp;GROUP&nbsp;BY&nbsp;Cno;<br />查询选修了3门以上课程的学生的学号&nbsp;<br />SELECT&nbsp;Sno&nbsp;FROM&nbsp;SC&nbsp;GROUP&nbsp;BY&nbsp;Sno&nbsp;HAVING&nbsp;COUNT(*)&nbsp;&gt;3<br />比较连接查询<br />连接查询中用来连接两个表的条件称为连接条件或连接谓词，其一般格式为：<br />[&lt;表名1&gt;.]&nbsp;&lt;列名1&gt;&nbsp;&nbsp;&lt;比较运算符&gt;&nbsp;[&lt;表名2&gt;.]&nbsp;&lt;列名2&gt;&nbsp;<br />其中比较运算符主要有：=、&gt;、&lt;&nbsp;、&nbsp;&gt;=&nbsp;、&nbsp;&lt;=&nbsp;、&nbsp;!=。<br />&nbsp;当连接运算为&nbsp;=&nbsp;时，称为等值连接。使用其他运算符称为非等值连接。<br />&nbsp;连接谓词中的列名称为连接字段。连接条件中的各连接字段类型必须是可比的，但不必是相同的。<br />将Student与SC中同一学生&nbsp;的元组连接起来<br />SELECT&nbsp;Student.*,Sc.*&nbsp;FROM&nbsp;Student,SC&nbsp;WHERE&nbsp;Student.Sno=SC.Sno<br />复合条件连接<br />SELECT&nbsp;Student.Sno,Sname&nbsp;FROM&nbsp;Student,&nbsp;SC&nbsp;WHERE&nbsp;Student.Sno=SC.Sno&nbsp;AND&nbsp;SC.Cno=‘2’&nbsp;AND&nbsp;SC.Grade&gt;90<br />SELECT&nbsp;Student.Sno,&nbsp;Sname,&nbsp;Cname,&nbsp;Grade&nbsp;FROM&nbsp;Student,&nbsp;SC,&nbsp;Course&nbsp;WHERE&nbsp;Student.Sno=SC.Sno&nbsp;AND&nbsp;SC.Cno=Course.Cno<br />嵌套查询<br />在SQL语言中，一个SELECT-FROM-WHERE语句称为一个查询块。<br />将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询。<br />SELECT&nbsp;Sname&nbsp;FROM&nbsp;Student&nbsp;WHERE&nbsp;Sno&nbsp;IN(SELECT&nbsp;Sno&nbsp;FROM&nbsp;SC&nbsp;WHERE&nbsp;Cno=‘2’);<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />带有比较运算符的子查询<br />SELECT&nbsp;Sno,&nbsp;Sname,&nbsp;Sdept&nbsp;FROM&nbsp;Student&nbsp;WHERE&nbsp;Sdept&nbsp;=&nbsp;(SELECT&nbsp;Sdept&nbsp;FROM&nbsp;Student&nbsp;WHERE&nbsp;Sname=‘刘晨’)<br />into&nbsp;子句<br />可将查询出的数据村入另一个表中<br />举例：<br />由学生表创建“计算机系学生”表，包含学号和姓名列<br />select&nbsp;学号，姓名into&nbsp;计算机学生from&nbsp;xs&nbsp;where&nbsp;专业名＝‘计算机’<br />集合查询<br />并操作UNION的使用<br />SELECT&nbsp;*&nbsp;FROM&nbsp;Student&nbsp;WHERE&nbsp;Sdept=‘CS’&nbsp;UNION&nbsp;SELECT&nbsp;*&nbsp;FROM&nbsp;Student&nbsp;WHERE&nbsp;Sage&lt;=19<br />查询既选修了课程1又选修了课程2的学生<br />SELECT&nbsp;Sno&nbsp;FROM&nbsp;SC&nbsp;WHERE&nbsp;Sno&nbsp;IN&nbsp;(SELECT&nbsp;Sno&nbsp;FROM&nbsp;SC&nbsp;WHERE&nbsp;Cno=‘1’)&nbsp;AND&nbsp;Sno&nbsp;IN&nbsp;(SELECT&nbsp;Sno&nbsp;FROM&nbsp;SC&nbsp;WHERE&nbsp;Cno=‘2’);]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">asp版图形验证码，可自定义点阵信息，支持字符扭曲、倾斜、倾斜</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_133.html" />
      <updated>2008-9-30 11:49:48</updated>
      <published>2008-9-30 11:49:48</published>
      <id>http://dev.mo.cn/article_133.html</id>
      <summary type="html">
      <![CDATA[代码并非完全原创，<br /><br />主要代码是另一位不知名的朋友写的，来源早已记不清楚了。<br /><br />我加了一个&nbsp;ChangeShape&nbsp;和&nbsp;Fill&nbsp;函数，<br /><br />ChangeShape&nbsp;用于使字符扭曲、倾斜（左右随机），<br /><br />需要的朋友拿去试试，个人觉得效果还可以，<br /><br />当然，我数学白痴，呵呵，不懂得变通，死脑筋，大家不要见笑。<br /><br />反正眼下也没有asp版图形验证码支持扭曲，如果真需要就拿我这个顶一下吧。<br /><br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;%<br />Class&nbsp;CAMXAM_COM_RndCodeBmp<br />Private&nbsp;TextDataLib,TextData,BmpData,BmpHead,BmpWidth,BmpHeight,BmpSize,TextDataLength,SessionString<br />Public&nbsp;SessionName,TextLength,BackColor,TextColor,YawpColor,YawpCount<br /><br />Private&nbsp;Sub&nbsp;Class_Initialize()<br />End&nbsp;Sub<br /><br />Private&nbsp;Sub&nbsp;Class_Terminate()<br />End&nbsp;Sub<br /><br />Public&nbsp;Function&nbsp;SetTextInfo(TextString)<br />&nbsp;&nbsp;&nbsp;&nbsp;ReDim&nbsp;TextDataLib(0)<br />&nbsp;&nbsp;&nbsp;&nbsp;TextDataLib(0)&nbsp;=&nbsp;TextString<br />End&nbsp;Function<br /><br />Public&nbsp;Function&nbsp;AddTextData(TextDataString)<br />&nbsp;&nbsp;&nbsp;&nbsp;TextDataLength&nbsp;=&nbsp;UBound(TextDataLib)&nbsp;+&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;ReDim&nbsp;Preserve&nbsp;TextDataLib(TextDataLength)<br />&nbsp;&nbsp;&nbsp;&nbsp;TextDataLib(TextDataLength)&nbsp;=&nbsp;TextDataString<br />End&nbsp;Function<br /><br />Private&nbsp;Function&nbsp;Getbinary(IntNumber)<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;IntBin0,IntBin1,IntBin2,IntBin0_,IntBin1_,IntBin2_<br />&nbsp;&nbsp;&nbsp;&nbsp;IntBin0&nbsp;=&nbsp;Int(IntNumber&nbsp;/&nbsp;16777216)<br />&nbsp;&nbsp;&nbsp;&nbsp;IntBin0_=&nbsp;IntNumber&nbsp;Mod&nbsp;16777216<br />&nbsp;&nbsp;&nbsp;&nbsp;IntBin1&nbsp;=&nbsp;Int(IntBin0_&nbsp;/&nbsp;65536)<br />&nbsp;&nbsp;&nbsp;&nbsp;IntBin1_=&nbsp;IntBin0_&nbsp;Mod&nbsp;65536<br />&nbsp;&nbsp;&nbsp;&nbsp;IntBin2&nbsp;=&nbsp;Int(IntBin1_&nbsp;/&nbsp;256)<br />&nbsp;&nbsp;&nbsp;&nbsp;IntBin2_=&nbsp;IntBin1_&nbsp;Mod&nbsp;256<br />&nbsp;&nbsp;&nbsp;&nbsp;Getbinary&nbsp;=&nbsp;ChrB(IntBin2_)&nbsp;&&nbsp;ChrB(IntBin2)&nbsp;&&nbsp;ChrB(IntBin1)&nbsp;&&nbsp;ChrB(IntBin0)<br />End&nbsp;Function<br /><br />Private&nbsp;Function&nbsp;GetColadRstring(ColadRstring)<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;ColorArray,CALength<br />&nbsp;&nbsp;&nbsp;&nbsp;ColorArray&nbsp;=&nbsp;Split(ColadRstring,",")<br />&nbsp;&nbsp;&nbsp;&nbsp;CALength&nbsp;=&nbsp;UBound(ColorArray)<br />&nbsp;&nbsp;&nbsp;&nbsp;GetColadRstring&nbsp;=&nbsp;ColorArray(GetRnd(0,CALength))<br />End&nbsp;Function<br /><br />Private&nbsp;Function&nbsp;GetRnd(LowNumber,UpNumber)<br />&nbsp;&nbsp;&nbsp;&nbsp;Randomize&nbsp;Timer<br />&nbsp;&nbsp;&nbsp;&nbsp;GetRnd&nbsp;=&nbsp;Int((UpNumber&nbsp;-&nbsp;LowNumber&nbsp;+&nbsp;1)&nbsp;*&nbsp;Rnd&nbsp;+&nbsp;LowNumber)<br />End&nbsp;Function<br /><br />Private&nbsp;Function&nbsp;FileHeader()<br />&nbsp;&nbsp;&nbsp;&nbsp;Response.Expires&nbsp;=&nbsp;-1<br />&nbsp;&nbsp;&nbsp;&nbsp;Response.AddHeader&nbsp;"Pragma","no-cache"<br />&nbsp;&nbsp;&nbsp;&nbsp;Response.AddHeader&nbsp;"cache-ctrol","no-cache"<br />&nbsp;&nbsp;&nbsp;&nbsp;Response.ContentType&nbsp;=&nbsp;"Image/BMP"<br />End&nbsp;Function<br /><br />Private&nbsp;Function&nbsp;SetBmpHead(BmpSize,Width,Height)<br />&nbsp;&nbsp;&nbsp;&nbsp;BmpHead&nbsp;=&nbsp;ChrB(66)&nbsp;&&nbsp;ChrB(77)<br />&nbsp;&nbsp;&nbsp;&nbsp;BmpHead&nbsp;=&nbsp;BmpHead&nbsp;&&nbsp;Getbinary(BmpSize+54)<br />&nbsp;&nbsp;&nbsp;&nbsp;BmpHead&nbsp;=&nbsp;BmpHead&nbsp;&&nbsp;Getbinary(0)<br />&nbsp;&nbsp;&nbsp;&nbsp;BmpHead&nbsp;=&nbsp;BmpHead&nbsp;&&nbsp;Getbinary(54)<br />&nbsp;&nbsp;&nbsp;&nbsp;BmpHead&nbsp;=&nbsp;BmpHead&nbsp;&&nbsp;Getbinary(40)<br />&nbsp;&nbsp;&nbsp;&nbsp;BmpHead&nbsp;=&nbsp;BmpHead&nbsp;&&nbsp;Getbinary(Width)<br />&nbsp;&nbsp;&nbsp;&nbsp;BmpHead&nbsp;=&nbsp;BmpHead&nbsp;&&nbsp;Getbinary(Height)<br />&nbsp;&nbsp;&nbsp;&nbsp;BmpHead&nbsp;=&nbsp;BmpHead&nbsp;&&nbsp;ChrB(1)&nbsp;&&nbsp;ChrB(0)<br />&nbsp;&nbsp;&nbsp;&nbsp;BmpHead&nbsp;=&nbsp;BmpHead&nbsp;&&nbsp;ChrB(24)&nbsp;&&nbsp;ChrB(0)<br />&nbsp;&nbsp;&nbsp;&nbsp;BmpHead&nbsp;=&nbsp;BmpHead&nbsp;&&nbsp;Getbinary(0)<br />&nbsp;&nbsp;&nbsp;&nbsp;BmpHead&nbsp;=&nbsp;BmpHead&nbsp;&&nbsp;Getbinary(BmpSize)<br />&nbsp;&nbsp;&nbsp;&nbsp;BmpHead&nbsp;=&nbsp;BmpHead&nbsp;&&nbsp;Getbinary(65536)<br />&nbsp;&nbsp;&nbsp;&nbsp;BmpHead&nbsp;=&nbsp;BmpHead&nbsp;&&nbsp;Getbinary(65536)<br />&nbsp;&nbsp;&nbsp;&nbsp;BmpHead&nbsp;=&nbsp;BmpHead&nbsp;&&nbsp;Getbinary(16777216)<br />&nbsp;&nbsp;&nbsp;&nbsp;BmpHead&nbsp;=&nbsp;BmpHead&nbsp;&&nbsp;Getbinary(16777216)<br />End&nbsp;Function<br /><br />Private&nbsp;Function&nbsp;GetRndTextData()<br />&nbsp;&nbsp;&nbsp;&nbsp;ReDim&nbsp;TextData(TextLength-1)<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;IText<br />&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;IText&nbsp;=&nbsp;0&nbsp;To&nbsp;TextLength-1&nbsp;Step&nbsp;+1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TextData(IText)&nbsp;=&nbsp;GetColadRstring(BackColor)&nbsp;&&nbsp;"&nbsp;"&nbsp;&&nbsp;GetColadRstring(TextColor)&nbsp;&&nbsp;"&nbsp;"&nbsp;&&nbsp;ChangeShape(TextDataLib(GetRnd(1,TextDataLength)))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionString&nbsp;=&nbsp;SessionString&nbsp;&&nbsp;GetTextData(IText)(4)<br />&nbsp;&nbsp;&nbsp;&nbsp;Next<br />End&nbsp;Function<br /><br />Private&nbsp;Function&nbsp;GetTextData(IText)<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;TextArray,ArrayLength,ITextData<br />&nbsp;&nbsp;&nbsp;&nbsp;TextArray&nbsp;=&nbsp;Split(TextData(IText),"&nbsp;")<br />&nbsp;&nbsp;&nbsp;&nbsp;ArrayLength&nbsp;=&nbsp;UBound(TextArray)<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;TextDataArray(5)<br />&nbsp;&nbsp;&nbsp;&nbsp;TextDataArray(0)&nbsp;=&nbsp;TextArray(0)<br />&nbsp;&nbsp;&nbsp;&nbsp;TextDataArray(1)&nbsp;=&nbsp;TextArray(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;TextDataArray(2)&nbsp;=&nbsp;Len(TextArray(3))<br />&nbsp;&nbsp;&nbsp;&nbsp;TextDataArray(3)&nbsp;=&nbsp;ArrayLength&nbsp;-&nbsp;2<br />&nbsp;&nbsp;&nbsp;&nbsp;TextDataArray(4)&nbsp;=&nbsp;TextArray(2)<br />&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;ITextData&nbsp;=&nbsp;3&nbsp;To&nbsp;ArrayLength&nbsp;Step&nbsp;+1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TextDataArray(5)&nbsp;=&nbsp;TextDataArray(5)&nbsp;&&nbsp;"&nbsp;"&nbsp;&&nbsp;TextArray(ITextData)<br />&nbsp;&nbsp;&nbsp;&nbsp;Next<br />&nbsp;&nbsp;&nbsp;&nbsp;GetTextData&nbsp;=&nbsp;TextDataArray<br />End&nbsp;Function<br /><br />Private&nbsp;Function&nbsp;GetColor(ColadRstring)<br />&nbsp;&nbsp;&nbsp;&nbsp;GetColor&nbsp;=&nbsp;ChrB("&H"&nbsp;&&nbsp;Mid(ColadRstring,6,2))&nbsp;&&nbsp;ChrB("&H"&nbsp;&&nbsp;Mid(ColadRstring,4,2))&nbsp;&&nbsp;ChrB("&H"&nbsp;&&nbsp;Mid(ColadRstring,2,2))<br />End&nbsp;Function<br /><br />Private&nbsp;Function&nbsp;BmpColor(ColorA,ColorB)<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;BmpColor_(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;BmpColor_(0)&nbsp;=&nbsp;GetColor(ColorA)<br />&nbsp;&nbsp;&nbsp;&nbsp;BmpColor_(1)&nbsp;=&nbsp;GetColor(ColorB)<br />&nbsp;&nbsp;&nbsp;&nbsp;BmpColor&nbsp;=&nbsp;BmpColor_<br />End&nbsp;Function<br /><br />Private&nbsp;Function&nbsp;SetBmpData()<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;TextInfo,FontData,I,J,K<br />&nbsp;&nbsp;&nbsp;&nbsp;GetRndTextData()<br />&nbsp;&nbsp;&nbsp;&nbsp;TextInfo&nbsp;=&nbsp;GetTextData(0)<br />&nbsp;&nbsp;&nbsp;&nbsp;BmpHeight&nbsp;=&nbsp;TextInfo(3)<br />&nbsp;&nbsp;&nbsp;&nbsp;BmpWidth&nbsp;=&nbsp;TextInfo(2)&nbsp;*&nbsp;TextLength<br />&nbsp;&nbsp;&nbsp;&nbsp;BmpSize&nbsp;=&nbsp;BmpHeight&nbsp;*&nbsp;BmpWidth&nbsp;*&nbsp;3<br />&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;I&nbsp;=&nbsp;BmpHeight&nbsp;To&nbsp;1&nbsp;Step&nbsp;-1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;J&nbsp;=&nbsp;0&nbsp;To&nbsp;TextLength&nbsp;-1&nbsp;Step&nbsp;+1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TextInfo&nbsp;=&nbsp;GetTextData(J)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FontData&nbsp;=&nbsp;Split(TextInfo(5),"&nbsp;")(I)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;K&nbsp;=&nbsp;1&nbsp;To&nbsp;TextInfo(2)&nbsp;Step&nbsp;+1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;GetRnd(1,99)&nbsp;&lt;&nbsp;YawpCount&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BmpData&nbsp;=&nbsp;BmpData&nbsp;&&nbsp;GetColor(GetColadRstring(YawpColor))<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;&nbsp;&nbsp;&nbsp;&nbsp;BmpData&nbsp;=&nbsp;BmpData&nbsp;&&nbsp;BmpColor(TextInfo(0),TextInfo(1))(Mid(FontData,K,1))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next<br />&nbsp;&nbsp;&nbsp;&nbsp;Next<br />End&nbsp;Function<br /><br />Public&nbsp;Function&nbsp;Write()<br />&nbsp;&nbsp;&nbsp;&nbsp;FileHeader()<br />&nbsp;&nbsp;&nbsp;&nbsp;SetBmpData()<br />&nbsp;&nbsp;&nbsp;&nbsp;SetBmpHead&nbsp;BmpSize,BmpWidth,BmpHeight<br />&nbsp;&nbsp;&nbsp;&nbsp;Response.BinaryWrite&nbsp;BmpHead<br />&nbsp;&nbsp;&nbsp;&nbsp;Response.BinaryWrite&nbsp;BmpData<br />&nbsp;&nbsp;&nbsp;&nbsp;Session(SessionName)&nbsp;=&nbsp;SessionString<br />End&nbsp;Function<br /><br />Public&nbsp;Function&nbsp;ChangeShape(psString)<br />&nbsp;&nbsp;&nbsp;&nbsp;Randomize&nbsp;Timer<br />&nbsp;&nbsp;&nbsp;&nbsp;sTemp&nbsp;=Split(psString,&nbsp;"&nbsp;")<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;nMaxWidth,&nbsp;nMaxHeight&nbsp;:&nbsp;nMaxWidth&nbsp;=16&nbsp;:&nbsp;nMaxHeight&nbsp;=20<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;nWidth,&nbsp;nHeight&nbsp;:&nbsp;nWidth&nbsp;=Len(sTemp(1))&nbsp;:&nbsp;nHeight&nbsp;=ubound(sTemp)<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;nTemp,&nbsp;nTemp1,&nbsp;sTemp,&nbsp;sReturn,&nbsp;nTopStart,&nbsp;nCurLeft,&nbsp;nAspect<br />&nbsp;&nbsp;&nbsp;&nbsp;nTopStart&nbsp;=Int((nHeight&nbsp;-&nbsp;1&nbsp;+&nbsp;1)&nbsp;*&nbsp;Rnd&nbsp;+&nbsp;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;nAspect&nbsp;=Int((2&nbsp;-&nbsp;1&nbsp;+&nbsp;1)&nbsp;*&nbsp;Rnd&nbsp;+&nbsp;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;nCurLeft&nbsp;=1<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;sFilter<br />&nbsp;&nbsp;&nbsp;&nbsp;sFilter&nbsp;="aJLkKfFbdDhTBpP6eQ7"<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;Instr(sFilter,&nbsp;sTemp(0))&nbsp;=0&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;nTemp&nbsp;=nTopStart&nbsp;To&nbsp;ubound(sTemp)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;nCurLeft&nbsp;&gt;7&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nCurLeft&nbsp;=5<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;nTemp1&nbsp;=nTemp&nbsp;to&nbsp;ubound(sTemp)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;nCurLeft&nbsp;&lt;1&nbsp;Then&nbsp;Exit&nbsp;For<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sTemp(nTemp1)&nbsp;=Fill("0",&nbsp;int(nCurLeft&nbsp;/2)&nbsp;)&nbsp;&&nbsp;sTemp(nTemp1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nCurLeft&nbsp;=nCurLeft&nbsp;-1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit&nbsp;For<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sTemp(nTemp)&nbsp;=Fill("0",&nbsp;int(nCurLeft&nbsp;/2)&nbsp;)&nbsp;&&nbsp;sTemp(nTemp)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nCurLeft&nbsp;=nCurLeft&nbsp;+1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next<br />&nbsp;&nbsp;&nbsp;&nbsp;Else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;nTemp&nbsp;=1&nbsp;to&nbsp;ubound(sTemp)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;nAspect&nbsp;=1&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sTemp(nTemp)&nbsp;=Fill("0",&nbsp;int(nCurLeft&nbsp;/2)&nbsp;)&nbsp;&&nbsp;sTemp(nTemp)<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;sTemp(nTemp)&nbsp;=sTemp(nTemp)&nbsp;&&nbsp;Fill("0",&nbsp;int(nCurLeft&nbsp;/2)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;Len(sTemp(nTemp))&nbsp;&lt;nMaxWidth&nbsp;Then&nbsp;sTemp(nTemp)&nbsp;=Fill("0",&nbsp;nMaxWidth&nbsp;-&nbsp;Len(sTemp(nTemp)))&nbsp;&&nbsp;sTemp(nTemp)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nCurLeft&nbsp;=nCurLeft&nbsp;+1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;nTemp&nbsp;=1&nbsp;to&nbsp;ubound(sTemp)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;Len(sTemp(nTemp))&nbsp;&lt;nMaxWidth&nbsp;Then&nbsp;sTemp(nTemp)&nbsp;=sTemp(nTemp)&nbsp;&&nbsp;Fill("0",&nbsp;nMaxWidth&nbsp;-&nbsp;Len(sTemp(nTemp)))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;sReturn&nbsp;&lt;&gt;""&nbsp;Then&nbsp;sReturn&nbsp;=sReturn&nbsp;&"&nbsp;"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sReturn&nbsp;=sReturn&nbsp;&&nbsp;sTemp(nTemp)<br />&nbsp;&nbsp;&nbsp;&nbsp;Next<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;nTopStart&nbsp;=Int(((nMaxHeight&nbsp;-nHeight)&nbsp;-&nbsp;1&nbsp;+&nbsp;1)&nbsp;*&nbsp;Rnd&nbsp;+&nbsp;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;nTemp&nbsp;=1&nbsp;to&nbsp;nTopStart<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sReturn&nbsp;=Fill("0",&nbsp;nMaxWidth)&nbsp;&"&nbsp;"&&nbsp;sReturn<br />&nbsp;&nbsp;&nbsp;&nbsp;Next<br />&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;nTemp&nbsp;=0&nbsp;to&nbsp;(nMaxHeight&nbsp;-nHeight&nbsp;-nTopStart)&nbsp;-1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sReturn&nbsp;=sReturn&nbsp;&"&nbsp;"&&nbsp;Fill("0",&nbsp;nMaxWidth)<br />&nbsp;&nbsp;&nbsp;&nbsp;Next<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ChangeShape&nbsp;=sTemp(0)&nbsp;&"&nbsp;"&&nbsp;sReturn<br /><br />End&nbsp;Function<br /><br />Public&nbsp;Function&nbsp;Fill(psChar,&nbsp;pnWidth)<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;nTemp,&nbsp;sTemp<br />&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;nTemp&nbsp;=1&nbsp;To&nbsp;pnWidth<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sTemp&nbsp;=sTemp&nbsp;&&nbsp;psChar<br />&nbsp;&nbsp;&nbsp;&nbsp;Next<br />&nbsp;&nbsp;&nbsp;&nbsp;Fill&nbsp;=sTemp<br />End&nbsp;Function<br /><br /><br />End&nbsp;Class<br /><br /><br />Dim&nbsp;Bmp<br />Set&nbsp;Bmp&nbsp;=&nbsp;New&nbsp;CAMXAM_COM_RndCodeBmp<br />Bmp.SetTextInfo&nbsp;"点阵来源黑睿工作室"<br />Bmp.AddTextData&nbsp;"2&nbsp;00111100&nbsp;01111110&nbsp;11100111&nbsp;11000011&nbsp;00000011&nbsp;00000011&nbsp;00000110&nbsp;00001100&nbsp;00011000&nbsp;00110000&nbsp;01100000&nbsp;11111111&nbsp;11111111"<br />Bmp.AddTextData&nbsp;"3&nbsp;00111000&nbsp;01111110&nbsp;11000110&nbsp;00000110&nbsp;00000110&nbsp;00011100&nbsp;00011110&nbsp;00000011&nbsp;00000011&nbsp;11000011&nbsp;11000011&nbsp;01111110&nbsp;00111100"<br />Bmp.AddTextData&nbsp;"4&nbsp;000001100&nbsp;000011100&nbsp;000011100&nbsp;000111100&nbsp;001101100&nbsp;001101100&nbsp;011001100&nbsp;110001100&nbsp;111111111&nbsp;111111111&nbsp;000001100&nbsp;000001100&nbsp;000001100"<br />Bmp.AddTextData&nbsp;"5&nbsp;01111110&nbsp;01111110&nbsp;01100000&nbsp;11000000&nbsp;11011100&nbsp;11111110&nbsp;11000011&nbsp;00000011&nbsp;00000011&nbsp;11000011&nbsp;11000011&nbsp;01111110&nbsp;00111100"<br />Bmp.AddTextData&nbsp;"6&nbsp;00111100&nbsp;01111110&nbsp;01100011&nbsp;11000000&nbsp;11000000&nbsp;11011100&nbsp;11111110&nbsp;11100011&nbsp;11000011&nbsp;11000011&nbsp;01100011&nbsp;01111110&nbsp;00111100"<br />Bmp.AddTextData&nbsp;"7&nbsp;11111111&nbsp;11111111&nbsp;00000010&nbsp;00000110&nbsp;00001100&nbsp;00001100&nbsp;00011000&nbsp;00011000&nbsp;00011000&nbsp;00011000&nbsp;00110000&nbsp;00110000&nbsp;00110000"<br />Bmp.AddTextData&nbsp;"8&nbsp;00111100&nbsp;01111110&nbsp;11000011&nbsp;11000011&nbsp;11000011&nbsp;01111110&nbsp;01111110&nbsp;11000011&nbsp;11000011&nbsp;11000011&nbsp;11000011&nbsp;01111110&nbsp;00111100"<br />Bmp.AddTextData&nbsp;"A&nbsp;0011110000&nbsp;0000110000&nbsp;0001111000&nbsp;0001111000&nbsp;0011001100&nbsp;0011001100&nbsp;0011111100&nbsp;0110000110&nbsp;0110000110&nbsp;1111001111"<br />Bmp.AddTextData&nbsp;"b&nbsp;11000000&nbsp;11000000&nbsp;11000000&nbsp;11011100&nbsp;11111110&nbsp;11100111&nbsp;11000011&nbsp;11000011&nbsp;11000011&nbsp;11000011&nbsp;11100111&nbsp;11111110&nbsp;11011100"<br />Bmp.AddTextData&nbsp;"B&nbsp;11111110&nbsp;01100011&nbsp;01100011&nbsp;01100011&nbsp;01111110&nbsp;01100011&nbsp;01100011&nbsp;01100011&nbsp;01100011&nbsp;11111110"<br />Bmp.AddTextData&nbsp;"c&nbsp;0011110&nbsp;0111111&nbsp;1110011&nbsp;1100000&nbsp;1100000&nbsp;1100000&nbsp;1100000&nbsp;1110011&nbsp;0111111&nbsp;0011110"<br />Bmp.AddTextData&nbsp;"C&nbsp;00111111&nbsp;01100111&nbsp;11000011&nbsp;11000011&nbsp;11000000&nbsp;11000000&nbsp;11000000&nbsp;11000000&nbsp;01100011&nbsp;00111110"<br />Bmp.AddTextData&nbsp;"d&nbsp;00000011&nbsp;00000011&nbsp;00000011&nbsp;00111011&nbsp;01111111&nbsp;11100111&nbsp;11000011&nbsp;11000011&nbsp;11000011&nbsp;11000011&nbsp;11100111&nbsp;01111111&nbsp;00111011"<br />Bmp.AddTextData&nbsp;"e&nbsp;00111100&nbsp;01111110&nbsp;11100110&nbsp;11000011&nbsp;11111111&nbsp;11111111&nbsp;11000000&nbsp;11100011&nbsp;01111110&nbsp;00111100"<br />Bmp.AddTextData&nbsp;"E&nbsp;11111111&nbsp;01100011&nbsp;01100000&nbsp;01101100&nbsp;01111100&nbsp;01101100&nbsp;01100000&nbsp;01100000&nbsp;01100011&nbsp;11111111"<br />Bmp.AddTextData&nbsp;"f&nbsp;0001111&nbsp;0011111&nbsp;0011000&nbsp;0011000&nbsp;0011000&nbsp;1111110&nbsp;1111110&nbsp;0011000&nbsp;0011000&nbsp;0011000&nbsp;0011000&nbsp;0011000&nbsp;0011000&nbsp;0011000&nbsp;0111000"<br />Bmp.AddTextData&nbsp;"F&nbsp;11111111&nbsp;01100011&nbsp;01100000&nbsp;01101100&nbsp;01111100&nbsp;01101100&nbsp;01100000&nbsp;01100000&nbsp;01100000&nbsp;01100000"<br />Bmp.AddTextData&nbsp;"G&nbsp;001111110&nbsp;011001110&nbsp;110000110&nbsp;110000110&nbsp;110000000&nbsp;110011111&nbsp;110000110&nbsp;110000110&nbsp;011000110&nbsp;001111100"<br />Bmp.AddTextData&nbsp;"h&nbsp;11000000&nbsp;11000000&nbsp;11000000&nbsp;11011110&nbsp;11111111&nbsp;11100011&nbsp;11000011&nbsp;11000011&nbsp;11000011&nbsp;11000011&nbsp;11000011&nbsp;11000011&nbsp;11000011"<br />Bmp.AddTextData&nbsp;"H&nbsp;1111001111&nbsp;0110000110&nbsp;0110000110&nbsp;0110000110&nbsp;0111111110&nbsp;0110000110&nbsp;0110000110&nbsp;0110000110&nbsp;0110000110&nbsp;1111001111"<br />Bmp.AddTextData&nbsp;"J&nbsp;000111111&nbsp;000001100&nbsp;000001100&nbsp;000001100&nbsp;000001100&nbsp;000001100&nbsp;000001100&nbsp;110001100&nbsp;110001100&nbsp;011111000"<br />Bmp.AddTextData&nbsp;"k&nbsp;11000000&nbsp;11000000&nbsp;11000000&nbsp;11000111&nbsp;11001110&nbsp;11011100&nbsp;11110000&nbsp;11111000&nbsp;11011000&nbsp;11001100&nbsp;11001100&nbsp;11000110&nbsp;11000111"<br />Bmp.AddTextData&nbsp;"K&nbsp;111111110&nbsp;011001100&nbsp;011011000&nbsp;011011000&nbsp;011110000&nbsp;011110000&nbsp;011011000&nbsp;011001100&nbsp;011000110&nbsp;111100111"<br />Bmp.AddTextData&nbsp;"L&nbsp;11111000&nbsp;01100000&nbsp;01100000&nbsp;01100000&nbsp;01100000&nbsp;01100000&nbsp;01100000&nbsp;01100000&nbsp;01100011&nbsp;11111111"<br />Bmp.AddTextData&nbsp;"m&nbsp;110111001110&nbsp;111111011111&nbsp;111001110011&nbsp;110001100011&nbsp;110001100011&nbsp;110001100011&nbsp;110001100011&nbsp;110001100011&nbsp;110001100011&nbsp;110001100011"<br />Bmp.AddTextData&nbsp;"M&nbsp;1110000111&nbsp;0110000110&nbsp;0111001110&nbsp;0111001110&nbsp;0111111110&nbsp;0111111110&nbsp;0110110110&nbsp;0110110110&nbsp;0110000110&nbsp;1111001111"<br />Bmp.AddTextData&nbsp;"n&nbsp;11011110&nbsp;11111111&nbsp;11100011&nbsp;11000011&nbsp;11000011&nbsp;11000011&nbsp;11000011&nbsp;11000011&nbsp;11000011&nbsp;11000011"<br />Bmp.AddTextData&nbsp;"N&nbsp;1110011111&nbsp;0110000110&nbsp;0111000110&nbsp;0111100110&nbsp;0111100110&nbsp;0110110110&nbsp;0110011110&nbsp;0110011110&nbsp;0110001110&nbsp;1111100110"<br />Bmp.AddTextData&nbsp;"p&nbsp;11011100&nbsp;11111110&nbsp;11100111&nbsp;11000011&nbsp;11000011&nbsp;11000011&nbsp;11000011&nbsp;11100111&nbsp;11111110&nbsp;11011100&nbsp;11000000&nbsp;11000000&nbsp;11000000&nbsp;11000000"<br />Bmp.AddTextData&nbsp;"P&nbsp;11111110&nbsp;01100011&nbsp;01100011&nbsp;01100011&nbsp;01100011&nbsp;01111110&nbsp;01100000&nbsp;01100000&nbsp;01100000&nbsp;01100000"<br />Bmp.AddTextData&nbsp;"R&nbsp;111111100&nbsp;011000110&nbsp;011000110&nbsp;011000110&nbsp;011000110&nbsp;011111100&nbsp;011011000&nbsp;011001100&nbsp;011000110&nbsp;111100111"<br />Bmp.AddTextData&nbsp;"s&nbsp;01111110&nbsp;11111110&nbsp;11000000&nbsp;11100000&nbsp;01111100&nbsp;00011110&nbsp;00000011&nbsp;10000011&nbsp;11111111&nbsp;01111100"<br />Bmp.AddTextData&nbsp;"S&nbsp;01111111&nbsp;11000111&nbsp;11000011&nbsp;11000000&nbsp;01111000&nbsp;00001110&nbsp;00000011&nbsp;11000011&nbsp;11100011&nbsp;11111110"<br />Bmp.AddTextData&nbsp;"t&nbsp;00110000&nbsp;00110000&nbsp;11111111&nbsp;11111111&nbsp;00110000&nbsp;00110000&nbsp;00110000&nbsp;00110000&nbsp;00110000&nbsp;00110000&nbsp;00111111&nbsp;00011111"<br />Bmp.AddTextData&nbsp;"T&nbsp;11111111&nbsp;10011001&nbsp;00011000&nbsp;00011000&nbsp;00011000&nbsp;00011000&nbsp;00011000&nbsp;00011000&nbsp;00011000&nbsp;00011000"<br />Bmp.AddTextData&nbsp;"u&nbsp;11000011&nbsp;11000011&nbsp;11000011&nbsp;11000011&nbsp;11000011&nbsp;11000011&nbsp;11000011&nbsp;11000111&nbsp;11111111&nbsp;01111011"<br />Bmp.AddTextData&nbsp;"U&nbsp;1111001111&nbsp;0110000110&nbsp;0110000110&nbsp;0110000110&nbsp;0110000110&nbsp;0110000110&nbsp;0110000110&nbsp;0110000110&nbsp;0111001110&nbsp;0001111000"<br />Bmp.AddTextData&nbsp;"v&nbsp;110000011&nbsp;011000011&nbsp;011000110&nbsp;011000110&nbsp;001100110&nbsp;001100100&nbsp;000110100&nbsp;000111100&nbsp;000111000&nbsp;000011000"<br />Bmp.AddTextData&nbsp;"V&nbsp;1111001111&nbsp;0110000110&nbsp;0110000110&nbsp;0011001100&nbsp;0011001100&nbsp;0011001100&nbsp;0001111000&nbsp;0001111000&nbsp;0000110000&nbsp;0000110000"<br />Bmp.AddTextData&nbsp;"w&nbsp;11000000001&nbsp;11000110011&nbsp;11001110011&nbsp;01001010010&nbsp;01001010010&nbsp;01101011010&nbsp;01110011110&nbsp;01110001110&nbsp;00110001100&nbsp;00110001100"<br />Bmp.AddTextData&nbsp;"W&nbsp;1110000111&nbsp;1100000011&nbsp;1100110011&nbsp;1100110011&nbsp;0111111110&nbsp;0111111110&nbsp;0111111110&nbsp;0011001100&nbsp;0011001100&nbsp;0011001100"<br />Bmp.AddTextData&nbsp;"x&nbsp;111000011&nbsp;011000110&nbsp;001101100&nbsp;001111100&nbsp;000111000&nbsp;000111000&nbsp;001111100&nbsp;001001100&nbsp;011000110&nbsp;110000111"<br />Bmp.AddTextData&nbsp;"X&nbsp;1111001111&nbsp;0110000110&nbsp;0011001100&nbsp;0001111000&nbsp;0000110000&nbsp;0000110000&nbsp;0001111000&nbsp;0011001100&nbsp;0110000110&nbsp;1111001111"<br />Bmp.AddTextData&nbsp;"y&nbsp;1100000011&nbsp;0110000010&nbsp;0110000110&nbsp;0011000100&nbsp;0011001100&nbsp;0001101000&nbsp;0001111000&nbsp;0001111000&nbsp;0000110000&nbsp;0000110000&nbsp;0001100000&nbsp;0111100000&nbsp;0111000000"<br />Bmp.AddTextData&nbsp;"Y&nbsp;1111001111&nbsp;0110000110&nbsp;0011001100&nbsp;0011001100&nbsp;0001111000&nbsp;0000110000&nbsp;0000110000&nbsp;0000110000&nbsp;0000110000&nbsp;0000110000"<br />Bmp.AddTextData&nbsp;"z&nbsp;11111111&nbsp;11111111&nbsp;00000011&nbsp;00000110&nbsp;00001100&nbsp;00011000&nbsp;00110000&nbsp;01100000&nbsp;11111111&nbsp;11111111"<br />Bmp.AddTextData&nbsp;"Z&nbsp;11111111&nbsp;11000011&nbsp;00000110&nbsp;00001100&nbsp;00011000&nbsp;00011000&nbsp;00110000&nbsp;01100000&nbsp;11000011&nbsp;11111111"<br /><br />Bmp.SessionName&nbsp;=&nbsp;"verifycode"&nbsp;'验证码用Session名称<br />Bmp.TextLength&nbsp;=&nbsp;4'验证码长度<br />Bmp.BackColor&nbsp;=&nbsp;"#FFFFFF"'背景颜色,多个颜色用","&nbsp;分隔<br />Bmp.TextColor&nbsp;=&nbsp;"#FF0000,#FF9900,#33CCFF,#99CC00,#FF99FF,#9933FF,#0099FF"&nbsp;'文字颜色,多个颜色用","&nbsp;分<br />Bmp.YawpColor&nbsp;=&nbsp;Bmp.TextColor&nbsp;'噪波点颜色,多个颜色使用","&nbsp;分隔<br />Bmp.YawpCount&nbsp;=&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;'噪波点比例&nbsp;0-100<br />Bmp.Write()<br />%&gt;</div></div>]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">XHTMLCSS常见问题和解决方案</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_132.html" />
      <updated>2008-9-28 12:04:37</updated>
      <published>2008-9-28 12:04:37</published>
      <id>http://dev.mo.cn/article_132.html</id>
      <summary type="html">
      <![CDATA[<br />1、如何定义高度很小的容器？&nbsp;<br /><br />在IE6下无法定义小高度的容器，是因为有一个默认的行高。&nbsp;<br />列举2种解决方案：overflow:hidden&nbsp;|&nbsp;line-height:0&nbsp;<br /><br />2、图片下方出现几像素的空白间隙？&nbsp;<br /><br />这个也有多种解决方案，如将img定义为display:block,或定义父容器为font-size:0，个人更推荐使用vertical-align的方式，它的值可以是text-top&nbsp;|&nbsp;text-bottom&nbsp;|&nbsp;middle等&nbsp;<br /><br />3、IE6双倍margin的BUG?&nbsp;<br /><br />display:inline&nbsp;<br /><br />4、文本垂直方向对齐文本输入框？&nbsp;<br /><br />设置input为vertical-align:middle，textarea也是如此&nbsp;<br /><br />5、为什么在web标准下ie无法设置滚动条的颜色？&nbsp;<br /><br />将设置滚动条颜色的样式定义到html标签选择符上即可&nbsp;<br /><br />6、如何让层在falsh上显示？&nbsp;<br /><br />不可以，除了少数几个级别很高的家伙除外。&nbsp;<br />但可以将flash设置为透明，这时层就会透过falsh显示，近似于覆盖在flash之上了，如：&nbsp;<br />&lt;param&nbsp;name="mode"&nbsp;value="transparent"&nbsp;/&gt;&nbsp;<br /><br />7、如何使得文字不换行？&nbsp;<br /><br />定义包含文字的容器为：width:xxx;white-space:nowrap;&nbsp;<br /><br />8、ie中如何让超出宽度的文字显示为省略号？&nbsp;<br /><br />定义容器为：overflow:hidden;width:xxx;white-space:nowrap;text-overflow:ellipsis;&nbsp;<br /><br />9、如何在点文字时也选中checkbox?&nbsp;<br /><br />&lt;input&nbsp;id="test"&nbsp;type="checkbox"&nbsp;value="on"&nbsp;/&gt;&nbsp;&lt;label&nbsp;for="test"&gt;测试&nbsp;&lt;/label&gt;&nbsp;<br /><br />10、一个div为margin-bottom:10px，一个div为margin-top:5px，为什么2个div之间的间距是10px而不是15px?&nbsp;<br /><br />这种情况浏览器会自动进行margin重叠，只显示较大的margin值&nbsp;<br />解决方案：只设置其中一个div的margin为15px&nbsp;<br /><br />11、如何解决ie下当li中出现2个或以上的浮动时，li之间产生的空白间隙？&nbsp;<br /><br />设置li的vertical-align，值可以为top&nbsp;|&nbsp;text-top&nbsp;|&nbsp;middle&nbsp;|&nbsp;bottom&nbsp;|&nbsp;text-bottom&nbsp;<br /><br />12、如何使得英文单词不发生词内断行？&nbsp;<br /><br />word-wrap:break-word;&nbsp;<br /><br />13、为什么被访问过的链接颜色没有变化？&nbsp;<br /><br />定义链接的样式时，需要按照:link,:visited,:hover,:active这样的顺序，可以使用LoVe&nbsp;HAte（喜欢讨厌）来记忆&nbsp;<br /><br />14、单行文本如何垂直居中？&nbsp;<br /><br />height:xxx;line-height:xxx;&nbsp;高和行高相同即可&nbsp;<br /><br />15、已知高度的容器如何在页面中水平垂直居中？&nbsp;<br /><br />参阅：http://blog.doyoe.com/article.asp?id=74&nbsp;<br /><br />16、未知尺寸的图片图如何水平垂直居中？&nbsp;<br /><br />参阅：http://blog.doyoe.com/article.asp?id=159&nbsp;<br /><br />17、标准模式和怪异模式下的盒模型区别？&nbsp;<br /><br />标准模式下：实际宽度&nbsp;=&nbsp;width&nbsp;+&nbsp;padding&nbsp;+&nbsp;border&nbsp;<br />怪异模式下：实际宽度&nbsp;=&nbsp;width&nbsp;-&nbsp;padding&nbsp;-&nbsp;border&nbsp;<br /><br />18、如何解决IE下的3像素BUG?&nbsp;<br /><br />参阅：http://blog.doyoe.com/article.asp?id=68&nbsp;<br /><br />19、如何做1像素细边框的table?&nbsp;<br /><br />方法1：设置table的border-collapse:collapse;&nbsp;<br />&lt;style&nbsp;type="text/css"&gt;&nbsp;<br />table{border-collapse:collapse;border-color:#000;}&nbsp;<br />td{border-color:#000;}&nbsp;<br />&lt;/style&gt;&nbsp;<br />&lt;table&nbsp;cellspacing="0"&nbsp;cellpadding="0"&nbsp;border="1"&gt;&nbsp;<br />&lt;tr&gt;&nbsp;<br />&lt;td&gt;测试&nbsp;&lt;/td&gt;&nbsp;<br />&lt;td&gt;测试&nbsp;&lt;/td&gt;&nbsp;<br />&lt;/tr&gt;&nbsp;<br />&lt;/table&gt;&nbsp;<br /><br />方法2：关键在于设置cellspacine="1"，用间隙来作为边框&nbsp;<br />&lt;style&nbsp;type="text/css"&gt;&nbsp;<br />table{background:#000;}&nbsp;<br />tr{background:#fff;}&nbsp;<br />&lt;/style&gt;&nbsp;<br />&lt;table&nbsp;cellspacing="1"&nbsp;cellpadding="0"&nbsp;border="0"&gt;&nbsp;<br />&lt;tr&gt;&nbsp;<br />&lt;td&gt;测试&nbsp;&lt;/td&gt;&nbsp;<br />&lt;td&gt;测试&nbsp;&lt;/td&gt;&nbsp;<br />&lt;/tr&gt;&nbsp;<br />&lt;/table&gt;&nbsp;<br /><br />20、以图换字的几种方法及优劣分析&nbsp;<br /><br />以图换字，其实是为了保证页面的可读性，这样既有利于搜索引擎，又有利于结构查看。由于这种方式被大多数人所认同，所以方法也越来越多：&nbsp;<br /><br />方法1：使用text-indent的负值，将内容移出容器；&nbsp;<br />方法2：使用display:none，将内容隐藏；&nbsp;<br />方法3：使用padding将文字挤出容器之外，并将超出的部分hidden;&nbsp;<br />方法4：使用font设置超小字体，达到隐藏内容的目的。&nbsp;<br /><br />方法1（非常不推荐）看起来蛮简单，但其实有几个不理想的地方，1是比较吃资源；2是在ie5下面会出现滞后背景无法显示；3是内容为超链接时，长长的黑色虚框，让你抓狂。&nbsp;<br />方法2（不推荐）其实倒也不复杂，只是需要多添加一个标签，比较浪费；且display:none出现的几率太多，对seo也是会有些许影响的。&nbsp;<br />方法3（推荐）Standard&nbsp;Model下要2层标签才能搞定，不过相对方法1和2还是有优势的，推荐一下。&nbsp;<br />方法4（强烈推荐）只需要将字体设置为0，然后overflow:hidden;如font:0/0&nbsp;arial;overflow:hidden;就同样可以达到隐藏内容的目的，暂时还没发现有什么副作用，强烈推荐。&nbsp;<br /><br />21、如何容器透明，内容不透明？&nbsp;<br /><br />假设在标准模式下有如下结构：&nbsp;<br />&lt;div&nbsp;class="outer"&gt;&nbsp;<br />&nbsp;&nbsp;&lt;p&nbsp;class="inner"&gt;我不要透明&nbsp;&lt;/p&gt;&nbsp;<br />&lt;/div&gt;&nbsp;<br /><br />IE&nbsp;only的方法：在父容器outer被设置为透明后，只需要将子容器inner设置为position:relative;&nbsp;如果需要兼容其它浏览器，则以上的方法不适用，且结构也需改为：&nbsp;<br /><br />&lt;div&nbsp;class="outer"&gt;&nbsp;&lt;/div&gt;&nbsp;<br />&lt;div&nbsp;class="inner"&gt;我不要透明&nbsp;&lt;/div&gt;&nbsp;<br /><br />然后使用position&nbsp;+&nbsp;z-index搞定位置&nbsp;<br /><br />22、如何去掉链接的虚线框？&nbsp;<br /><br />IE下：&nbsp;&lt;a&nbsp;href="#"&nbsp;onfocus="this.blur();"...&gt;&nbsp;<br />FF下:a{outline:none;}&nbsp;<br /><br />23、如何使得页面字体行距始终保持n倍字体大小为基调？&nbsp;<br /><br />在body内设置line-height:n即可，注，不可以为它加上单位&nbsp;<br />原因可参阅：http://blog.doyoe.com/article.asp?id=195&nbsp;<br /><br />24、如何使用标准的方法插入flash?&nbsp;<br /><br />&lt;div&nbsp;class="fla-show"&gt;&nbsp;<br />&nbsp;&nbsp;&lt;object&nbsp;type="application/x-shockwave-flash"&nbsp;data="*.swf"&nbsp;width="*"&nbsp;height="*"&gt;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;param&nbsp;name="movie"&nbsp;value="*.swf"&nbsp;/&gt;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;img&nbsp;src="*.jpg"&nbsp;alt="用于不支持flash或屏蔽flash时显示"&nbsp;/&gt;&nbsp;<br />&nbsp;&nbsp;&lt;/object&gt;&nbsp;<br />&lt;/div&gt;&nbsp;<br /><br />25、Standard&nbsp;Model如何让容器可以height:100%？&nbsp;<br /><br />设置html,body{height:100%;margin:0;}&nbsp;<br /><br />26、如何使得表格的宽度固定?&nbsp;<br /><br />设置table为table-layout:fixed;这时表格将使用固定布局算法，多出的内容将不影响表格的宽度&nbsp;<br /><br />27、如何让min-height兼容ie6?&nbsp;<br /><br />.min-height{min-height:100px;_height:100px;}&nbsp;<br />&lt;div&nbsp;class="min-height"&gt;我是兼容的min-height&nbsp;&lt;/div&gt;&nbsp;<br /><br />28、如何让鼠标变成手型且兼容所有现代浏览器？&nbsp;<br /><br />cursor:pointer&nbsp;<br /><br />29、如何实现ie6下的position:fixed?&nbsp;<br /><br />参阅：http://blog.doyoe.com/article.asp?id=188&nbsp;<br /><br />30、IE下如何对Standard&nbsp;Mode与Quirks&nbsp;Mode进行切换？&nbsp;<br /><br />IE6以下的浏览器不用触发，直接以Quirks&nbsp;Mode呈现页面。&nbsp;<br /><br />IE6和IE7都可以触发的（在XHTML&nbsp;的DTD申明前加上HTML注释）：&nbsp;<br />&lt;!--Let&nbsp;ie6&nbsp;and&nbsp;ie7&nbsp;into&nbsp;quirks&nbsp;mode--&gt;&nbsp;<br />&lt;!DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Strict//EN"&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;&nbsp;<br /><br />IE6的触发（在XHTML&nbsp;的DTD申明前加上XML申明）：&nbsp;<br />&lt;?xml&nbsp;version="1.0"&nbsp;encoding="utf-8"?&gt;&nbsp;<br />&lt;!DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Strict//EN"&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;&nbsp;<br /><br />当没有使用DTD声明或者使用HTML4以下（不包括HTML4）的DTD声明时，基本所有的浏览器都是使用Quirks&nbsp;Mode呈现。&nbsp;<br /><br />31、如何给一个元素定义多个不同的css规则？&nbsp;<br /><br />&lt;style&nbsp;type="text/css"&gt;&nbsp;<br />.a{color:#f00;}&nbsp;<br />.b{background:#eee;}&nbsp;<br />&lt;/style&gt;&nbsp;<br /><br />&lt;div&nbsp;class="a&nbsp;b"&gt;测试&nbsp;&lt;/div&gt;&nbsp;<br /><br />如上例，该元素同时拥有a和b定义的样式规则。&nbsp;<br />多个规则之间使用空格分开，并且只有class能同时使用多个规则，id不可以&nbsp;<br /><br />32、如何区别display:none与visibility:hidden?&nbsp;<br /><br />相同的是display:none与visibility:hidden都可以用来隐藏某个元素；&nbsp;<br />不同的是display:none在隐藏元素的时候，将其占位空间也去掉；而visibility:hidden只是隐藏了内容而已，其占位空间仍然保留。&nbsp;<br />]]>
      </summary>
      <category term="" label="HTML/CSS" scheme="http://dev.mo.cn/cat_diary_8.html" />
   </entry>
   <entry>
      <title type="html">随机访问数据库中某个表的一条记录</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_131.html" />
      <updated>2008-9-11 1:10:23</updated>
      <published>2008-9-11 1:10:23</published>
      <id>http://dev.mo.cn/article_131.html</id>
      <summary type="html">
      <![CDATA[一般一个表都有一个唯一的标识，这里假设这个标识字段为ID<br />&nbsp;分四步:<br />1、取得该表记录总数n。<br />2、把所有的ID号存储到一个数组中IDs()<br />3、产生一个不大于n的随机数m<br />4、从数组中取出第m个ID号，查询数据表，取得记录数据。<br />下面是代码(不包括数据库连接)：<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;%<br />dim&nbsp;stips()<br />co=0<br />set&nbsp;rs=server.createobject("adodb.recordset")<br />sql="select&nbsp;[id]&nbsp;from&nbsp;stips"<br />rs.open&nbsp;sql,conn,1,1<br />if&nbsp;rs.eof&nbsp;and&nbsp;rs.bof&nbsp;then&nbsp;<br />&nbsp;response.write&nbsp;"还没有任何小知识哦!"<br />else<br />&nbsp;do&nbsp;while&nbsp;not&nbsp;rs.eof&nbsp;&nbsp;'循环保存id到数组<br />&nbsp;&nbsp;&nbsp;&nbsp;redim&nbsp;preserve&nbsp;stips(co)<br />&nbsp;&nbsp;&nbsp;&nbsp;stips(co)=rs("id")<br />&nbsp;&nbsp;&nbsp;&nbsp;co=co+1<br />&nbsp;&nbsp;&nbsp;&nbsp;rs.movenext<br />&nbsp;loop<br />&nbsp;rs.close<br />&nbsp;set&nbsp;rs=nothing<br /><br />&nbsp;Randomize()<br />&nbsp;id=stips(int(rnd()*co))&nbsp;'生成随机数,并查询数组内随机数对应的ID<br />&nbsp;set&nbsp;rs=server.createobject("adodb.recordset")&nbsp;&nbsp;<br />&nbsp;sql="select&nbsp;*&nbsp;from&nbsp;stips&nbsp;where&nbsp;id="&id&nbsp;&nbsp;'查询数据库<br />&nbsp;rs.open&nbsp;sql,conn,1,1<br />&nbsp;response.write&nbsp;rs("content")&nbsp;&nbsp;&nbsp;'这里假设数据库有一个content字段<br />&nbsp;rs.close&nbsp;<br />&nbsp;set&nbsp;rs=nothing<br />end&nbsp;if<br />conn.close<br />set&nbsp;conn=nothing<br />%&gt;</div></div>]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">在ASP中限制同一表单被多次提交</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_130.html" />
      <updated>2008-9-11 1:00:24</updated>
      <published>2008-9-11 1:00:24</published>
      <id>http://dev.mo.cn/article_130.html</id>
      <summary type="html">
      <![CDATA[本文介绍在ASP应用中防止用户在当前会话期间多次提交同一表单的一个简单方法。它主要由四个子程序组成，在较为简单的应用场合，你只要将这些代码放在包含文件中直接引用即可；对于那些较为复杂的环境，我们在文章的最后给出一些改进建议。&nbsp;<br /><br />　　&nbsp;一、基本工作过程&nbsp;<br /><br />　　&nbsp;下面我们依次讨论这四个子程序。&nbsp;<br /><br />　　&nbsp;（一）初始化&nbsp;<br /><br />　　&nbsp;这里我们要在Session对象中保存两个变量，其中：&nbsp;<br /><br />　　&nbsp;⑴&nbsp;每一个表单对应一个称为FID的唯一标识，为使该值唯一要用到一个计数器。&nbsp;<br /><br />　　&nbsp;⑵&nbsp;每当一个表单成功提交，必须在一个Dictionary对象中存储它的FID。&nbsp;<br /><br />　　&nbsp;我们用一个专用的过程来初始化上述数据。虽然以后各个子程序都要调用它，但实际上每一个会话期间它只执行一次：&nbsp;<br /><br />Sub&nbsp;InitializeFID()&nbsp;<br />If&nbsp;Not&nbsp;IsObject(Session("FIDList"))&nbsp;Then&nbsp;<br />Set&nbsp;Session("FIDList")=Server.CreateObject("Scripting.Dictionary")&nbsp;<br />Session("FID")=0&nbsp;<br />End&nbsp;If&nbsp;<br />End&nbsp;Sub&nbsp;<br /><br /><br /><br />　　&nbsp;（二）生成表单的唯一标识符&nbsp;<br /><br />　　&nbsp;下面这个函数GenerateFID()用于生成表单的唯一标志。该函数首先将FID值加1，然后返回它：&nbsp;<br /><br /><br />Function&nbsp;GenerateFID()&nbsp;<br />InitializeFID&nbsp;<br />Session("FID")&nbsp;=&nbsp;Session("FID")&nbsp;+&nbsp;1&nbsp;<br />GenerateFID&nbsp;=&nbsp;Session("FID")&nbsp;<br />End&nbsp;Function&nbsp;<br /><br /><br /><br />　　&nbsp;（三）登记已提交表单&nbsp;<br /><br />　　&nbsp;当表单成功地提交时，在Dictionary对象中登记它的唯一标识：&nbsp;<br /><br /><br />Sub&nbsp;RegisterFID()&nbsp;<br />Dim&nbsp;strFID&nbsp;<br />InitializeFID&nbsp;<br />strFID&nbsp;=&nbsp;Request("FID")&nbsp;<br />Session("FIDlist").Add&nbsp;strFID,&nbsp;now()&nbsp;<br />End&nbsp;Sub<br /><br /><br />　　&nbsp;（四）检查表单是否重复提交&nbsp;<br /><br />　　&nbsp;在正式处理用户提交的表单之前，应该在Dictionary对象中检查它的FID是否已经登记。下面的CheckFID()函数用来完成这个工作，如已经登记，它返回FALSE，否则返回TRUE:&nbsp;<br /><br />Function&nbsp;CheckFID()&nbsp;<br />Dim&nbsp;strFID&nbsp;<br />InitializeFID&nbsp;<br />strFID&nbsp;=&nbsp;Request("FID")&nbsp;<br />CheckFID&nbsp;=&nbsp;not&nbsp;Session("FIDlist").Exists(strFID)&nbsp;<br />End&nbsp;Function&nbsp;<br /><br /><br />　　&nbsp;二、如何使用&nbsp;<br /><br />　　&nbsp;有两个地方要用到上述函数，即表单生成时与结果处理时。假设上述四个子程序已经放入包含文件Forms.inc中，下面的代码根据FID值来决定生成表单还是处理表单结果，它所描述的处理过程适合于大多数ASP应用：&nbsp;<br /><br /><br />＜&nbsp;%Option&nbsp;Explicit%＞&nbsp;<br />＜&nbsp;!--#include&nbsp;file="forms.inc"--＞&nbsp;<br />＜&nbsp;HTML＞&nbsp;<br />＜&nbsp;HEAD＞&nbsp;<br />＜&nbsp;TITLE＞表单提交测试＜&nbsp;/TITLE＞&nbsp;<br />＜&nbsp;/HEAD&nbsp;<br />＜&nbsp;BODY＞&nbsp;<br />＜&nbsp;%&nbsp;<br />If&nbsp;Request("FID")&nbsp;=&nbsp;""&nbsp;Then&nbsp;<br />GenerateForm&nbsp;<br />Else&nbsp;<br />ProcessForm&nbsp;<br />End&nbsp;If&nbsp;<br />%＞&nbsp;<br />＜&nbsp;/BODY＞&nbsp;<br />＜&nbsp;/HTML＞&nbsp;<br /><br /><br />　　&nbsp;GenerateForm负责生成表单，表单中应该含有一个隐藏的FID，如：&nbsp;<br /><br />＜&nbsp;%&nbsp;<br />Sub&nbsp;GenerateForm()&nbsp;<br />%＞&nbsp;<br />＜&nbsp;form&nbsp;action="＜&nbsp;%=Request.ServerVariables("PATH_INFO")%＞"&nbsp;method=GET＞&nbsp;<br />＜&nbsp;input&nbsp;type=hidden&nbsp;name=FID&nbsp;value="＜&nbsp;%=GenerateFID()%＞"＞&nbsp;<br />＜&nbsp;input&nbsp;type=text&nbsp;name="param1"&nbsp;value=""＞&nbsp;<br />＜&nbsp;input&nbsp;type=submit&nbsp;value="OK"＞&nbsp;<br />＜&nbsp;/form＞&nbsp;<br />＜&nbsp;%&nbsp;<br />End&nbsp;Sub&nbsp;<br />%＞&nbsp;<br /><br /><br />　　&nbsp;ProcessForm负责处理通过表单提交的内容，但在处理之前应该先调用CheckFID()检查当前表单是否已经提交，代码类如：&nbsp;<br /><br /><br />＜&nbsp;%&nbsp;<br />Sub&nbsp;ProcessForm()&nbsp;<br />If&nbsp;CheckFID()&nbsp;Then&nbsp;<br />Response.Write&nbsp;"你输入的内容是"&nbsp;&&nbsp;Request.QueryString("param1")&nbsp;<br />RegisterFID&nbsp;<br />Else&nbsp;<br />Response.Write&nbsp;"此表单只能提交一次!"&nbsp;<br />End&nbsp;If&nbsp;<br />End&nbsp;Sub&nbsp;<br />%＞&nbsp;<br /><br /><br />　　&nbsp;三、限制与改进措施&nbsp;<br /><br />　　&nbsp;上面我们介绍了在当前会话期间限制同一表单被多次提交的一种方法。在实际应用中可能需要从多方面加以改进，例如：&nbsp;<br /><br />　　&nbsp;⑴&nbsp;在登记表单ID之前检查用户输入数据的合法性，使得数据不合法时用户可以按“后退”按钮返回，在修正后再次提交同一表单。&nbsp;<br /><br />　　&nbsp;⑵&nbsp;这种对表单提交的限制最多只能在当前会话期间有效。如果要求这种限制能够跨越多个会话，那么就要用到Cookeis或数据库来保存相关数据了。&nbsp;<br /><br />　　&nbsp;⑶&nbsp;这种方法是不安全的。它仅用于防范误操作，不能防止熟练用户有意地多次提交同一表单。&nbsp;<br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">浅析ASP内置组件</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_129.html" />
      <updated>2008-9-11 0:56:03</updated>
      <published>2008-9-11 0:56:03</published>
      <id>http://dev.mo.cn/article_129.html</id>
      <summary type="html">
      <![CDATA[本文的内容是使用ASP的ActiveX&nbsp;Server&nbsp;Components（组件）。<br /><br />　　一、&nbsp;Browser&nbsp;Capabilities&nbsp;Component（浏览器能力组件）：<br /><br />　　我们知道，不同的浏览器也许支持不同的功能，如有些浏览器支持框架，有些不支持。利用这个组件，可以检查浏览器的能力，使你的网页争对不同的浏览器显示不同的页面（如对不支持Frame的浏览器显示不含Frame的网页）。&nbsp;该组件的使用很简单，需注意的是，要正确使用该组件，必须保证Browscap.ini文件是最新的（其实每一个浏览器及其特性都列在这个文件中，自己打开看看就明白了）,否则结果可能相去甚远，如Win98第二版所带的IE5.0，在下例中显示为Netscape。这个文件一般位于Web服务器的“\Winnt\System32\InetSrv”下，最新的版本可去http://www.asptracker.com/或http://www.cyscape.com/browscap下载。<br /><br />　　例：wuf22.asp<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;html&gt;<br />&lt;BODY&gt;<br />‘注意：组件的使用与对象类似，但是组件在使用前必须先创建，而使用内置对象前不必创建。<br />&lt;%Set&nbsp;BrowsCap=Server.CreateObject("MSWC.BrowserType")%&gt;<br />请稍候......<br />&lt;P&gt;<br />&lt;TABLE&nbsp;BORDER=1&nbsp;CELLPADDING=10&gt;<br />&lt;TR&gt;&lt;TD&gt;浏览器类型&lt;/TD&gt;&lt;TD&gt;&lt;%=BrowsCap.Browser%&gt;&lt;/TD&gt;&lt;/TR&gt;<br />&lt;TR&gt;&lt;TD&gt;浏览器版本&lt;/TD&gt;&lt;TD&gt;&lt;%=BrowsCap.version%&gt;&lt;/TD&gt;&lt;/TR&gt;<br />&lt;TR&gt;&lt;TD&gt;是否支持表格&lt;/TD&gt;&lt;TD&gt;&lt;%=BrowsCap.tables%&gt;&lt;/TD&gt;&lt;/TR&gt;<br />&lt;TR&gt;&lt;TD&gt;是否支持ActiveX控件&lt;/TD&gt;&lt;TD&gt;&lt;%=BrowsCap.activexcontrols%&gt;&lt;/TD&gt;&lt;/TR&gt;<br />&lt;TR&gt;&lt;TD&gt;是否支持JavaApplets&lt;/TD&gt;&lt;TD&gt;&lt;%=BrowsCap.javaapplets%&gt;&lt;/TD&gt;&lt;/TR&gt;<br />&lt;TR&gt;&lt;TD&gt;是否支持JavaScript&lt;/TD&gt;&lt;TD&gt;&lt;%=BrowsCap.javascript%&gt;&lt;/TD&gt;&lt;/TR&gt;<br />&lt;TR&gt;&lt;TD&gt;是否支持Cookies&lt;/TD&gt;&lt;TD&gt;&lt;%=BrowsCap.Cookies%&gt;&lt;/TD&gt;&lt;/TR&gt;<br />&lt;TR&gt;&lt;TD&gt;是否支持Frames&lt;/TD&gt;&lt;TD&gt;&lt;%=BrowsCap.Frames%&gt;&lt;/TD&gt;&lt;/TR&gt;<br />&lt;TR&gt;&lt;TD&gt;操作系统&lt;/TD&gt;&lt;TD&gt;&lt;%=BrowsCap.Platform%&gt;&lt;/TD&gt;&lt;/TR&gt;<br />&lt;TR&gt;&lt;TD&gt;是否支持VBScript&lt;/TD&gt;&lt;TD&gt;&lt;%=BrowsCap.vbscript%&gt;&lt;/TD&gt;&lt;/TR&gt;<br />&lt;/TABLE&gt;<br />&lt;%Set&nbsp;BrowsCap&nbsp;=&nbsp;Nothing%&gt;<br />&lt;/BODY&gt;<br />&lt;/HTML&gt;&nbsp;</div></div><br />　　注意：在本例中我们也接触了Server对象的CreateObject方法，Server.CreateObject用于创建已经注册到服务器上的ActiveX组件（说明：还有其他方法可以创建组件）。不过别忘了用“Set&nbsp;对象&nbsp;=&nbsp;Nothing”来及时释放资源，这应该成为一个习惯。<br /><br />　　二、File&nbsp;Access组件<br /><br />　　File&nbsp;Access组件由FileSystemObject对象和TextStream对象组成，使用FileSystemObject对象，可以建立、检索、删除目录及文件，而TextStream对象则提供读写文件的功能。<br /><br />　　实例wuf23.asp。强调：只有通过实践才能加深理解，实践和比较程序运行结果是快速掌握编程技巧的最好方法。<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;%@&nbsp;Language=VBScript&nbsp;%&gt;<br />&lt;%&nbsp;Option&nbsp;Explicit<br />'&nbsp;注意绝对路径:&nbsp;C:\Inetpub\home\asp\wuf23.asp&nbsp;主页路径:&nbsp;C:\Inetpub\home<br />Dim&nbsp;Path,&nbsp;File,&nbsp;FSO,&nbsp;CTF,&nbsp;Str,&nbsp;StrHTML,&nbsp;StrNoHTML<br /><br />'使用&nbsp;CreateObject&nbsp;方法创建&nbsp;FileSystemObject&nbsp;对象&nbsp;FSO<br />Set&nbsp;FSO&nbsp;=&nbsp;Server.CreateObject("Scripting.FileSystemObject")&nbsp;<br /><br />Path&nbsp;=&nbsp;Server.MapPath("test")&nbsp;'返回test的物理目录(绝对路径)<br />'就本例而言,&nbsp;下面这句与上面这句返回的Path完全一样<br />'Path&nbsp;=&nbsp;Server.MapPath("\asp\test\")&nbsp;<br />Response.Write&nbsp;Path&nbsp;&&nbsp;"&lt;Br&gt;"<br /><br />If&nbsp;FSO.FolderExists(Path)&nbsp;=&nbsp;false&nbsp;then&nbsp;'判断该文件夹是否存在<br />FSO.CreateFolder(Path)&nbsp;'新建文件夹<br />End&nbsp;If&nbsp;<br /><br />File&nbsp;=&nbsp;Path&nbsp;&&nbsp;"\asptest.txt"<br />'&nbsp;写文件操作<br />If&nbsp;FSO.FileExists(File)&nbsp;=&nbsp;True&nbsp;Then&nbsp;'判断该文件是否存在<br />'建立&nbsp;TextStream&nbsp;对象&nbsp;CTF<br />Set&nbsp;CTF&nbsp;=&nbsp;FSO.OpenTextFile(File,&nbsp;8,&nbsp;False,&nbsp;0)&nbsp;'打开文件,&nbsp;详见说明<br />Else<br />Set&nbsp;CTF&nbsp;=&nbsp;FSO.CreateTextFile(File,False,&nbsp;False)&nbsp;'新建文件<br />End&nbsp;If<br />CTF.Write&nbsp;"&lt;P&gt;第一个字符串;&nbsp;"&nbsp;'写字符串<br />CTF.WriteLine&nbsp;"第二个字符串;&nbsp;"&nbsp;'写字符串,&nbsp;并加上一个换行符<br />CTF.Write&nbsp;"第三个字符串;&nbsp;"<br />CTF.Close&nbsp;'注意要关闭文件&nbsp;<br /><br />'&nbsp;读文件操作<br />Set&nbsp;CTF&nbsp;=&nbsp;FSO.OpenTextFile(File,&nbsp;1,,0)<br />Do&nbsp;While&nbsp;CTF.AtEndOfStream&nbsp;&lt;&gt;&nbsp;True&nbsp;'判别是否文件结尾（循环语句）<br />Str&nbsp;=&nbsp;CTF.ReadLine&nbsp;'（每次）读取一行<br />StrNoHTML&nbsp;=&nbsp;StrNoHTML&nbsp;&&nbsp;Str&nbsp;&&nbsp;"&lt;BR&gt;"&nbsp;&&nbsp;VbCrLf&nbsp;<br />StrHTML&nbsp;=&nbsp;StrHTML&nbsp;&&nbsp;Server.HTMLEncode(Str)&nbsp;&&nbsp;"&lt;BR&gt;"&nbsp;&&nbsp;VbCrLf<br />Loop<br />Response.Write&nbsp;StrNoHTML<br />Response.Write&nbsp;StrHTML<br /><br />CTF.Close<br />Set&nbsp;CTF&nbsp;=&nbsp;Nothing&nbsp;'释放对象<br />Set&nbsp;FSO&nbsp;=&nbsp;Nothing<br />%&gt;&nbsp;</div></div><br />　　CTF&nbsp;=&nbsp;FSO.OpenTextFile(File,&nbsp;8,&nbsp;False,&nbsp;0)，括号内第一个参数为文件名；第二个参数为8，表示在原文件后追加内容，若为1表示只读，为2则会重写原文件；第三个参数false表示，若指定文件不存在，也不新建文件，若为True，表示指定文件不存在，则新建该文件；第四个参数0表示以ASCII文件格式打开，若为-2，则表示以原来的格式打开。<br /><br />　　CTF&nbsp;=&nbsp;FSO.CreateTextFile(File,False,&nbsp;False)，第二个参数false表示不覆盖已有文件，若为True，则表示覆盖（OverWrite）已有文件；第三个参数为False表示文件格式为ASCII，为True表示文件格式为Unicode。<br /><br />　　Server对象的MapPath方法将指定的虚拟路径转换为真实的文件路径。MapPath将“/”和“\”字符视为相同。<br /><br />　　Server对象的HTMLEncode方法允许你对特定的字符串进行HTML编码，或者说使浏览器中可以正确显示特定的字符。上例中，若未编码，则“&lt;P&gt;”显示不出来，而是被浏览器作为HTML标记，你可以对比一下运行结果。<br /><br />　　实际上，File&nbsp;Access组件对文件、文件夹和驱动器的操作还是比较强大的，也提供了较多的方法，如果需要用到这方面的知识，别忘了使用它。<br /><br />　　另外，到现在为止，写一个网页计数器已经是小菜一碟了吧，难怪那么多的网页提供免费计数器。怎么样？自己写一个图形计数器试试看，想怎么作弊就怎么作弊，完全自己说了算，爽呆！（小秘密：我的主页上有实例wuf24.asp）<br /><br />　　三、&nbsp;AD&nbsp;Rotator（广告翻转组件）<br /><br />　　现在上网，恐怕最讨厌的是别人主页上的广告条，最喜欢的是自己主页上的广告条，广告条如同垃圾邮件一样，比比皆是，防不胜防。你也可以自己动手制造这样的垃圾，ASP的AD&nbsp;Rotator组件就可使每次打开或者重新加载网页时，随机的显示广告。这个例子包括三部分：<br /><br />　　例程wuf25.asp<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;%@&nbsp;Language=VBScript&nbsp;%&gt;<br />&lt;%&nbsp;Option&nbsp;Explicit<br />Dim&nbsp;adr<br />'创建&nbsp;AD&nbsp;Rotator&nbsp;对象<br />Set&nbsp;adr&nbsp;=&nbsp;Server.CreateObject("MSWC.AdRotator")<br />adr.Border&nbsp;=&nbsp;2&nbsp;'指定图形文件的边框大小<br />adr.Clickable&nbsp;=&nbsp;True&nbsp;'指示显示的图片是否是一个超链接<br />adr.TargetFrame&nbsp;=&nbsp;"_blank"&nbsp;'设置超链接是否要指定Frame名称,如:&nbsp;_TOP&nbsp;_NEW&nbsp;_PARENT<br />'获取将要显示的图片及超链接设置&nbsp;-&nbsp;在文件&nbsp;AdrSet.txt&nbsp;中设置<br />Response.Write&nbsp;adr.GetAdvertisement("AdrSet.txt")<br />%&gt;<br />AdrSet.txt内容（后面为注释，不是这个文件的内容）：<br />REDIRECT&nbsp;wuf26.asp&nbsp;点击广告后，转由wuf26.asp来处理<br />WIDTH&nbsp;468&nbsp;广告图片宽度<br />HEIGHT&nbsp;60&nbsp;广告图片高度<br />*&nbsp;分隔符<br />http://www.soyou.com/prog/ad/468x60_1.gif&nbsp;广告图片所在位置，也可为本地图形文件<br />http://www.163.com/&nbsp;指向链接，若没有超链接，写入一个“-”<br />网易&nbsp;文字说明<br />20&nbsp;显示该广告的相对权重，即显示频率<br />http://fp.cache.imgis.com/images/Ad173962St1Sz1Sq1Id2.gif<br />http://www.sina.com.cn/<br />新浪网<br />30<br />http://61.139.77.73/images/canon.gif&nbsp;也可以使用本地图片，如../images/flag.gif<br />http://www.canon.com.cn/<br />佳能<br />50&nbsp;</div></div><br /><br />　　本例中一共有三个图片（图片大小468X60）及链接，每个链接的描述占四行，实际使用时，你可如法炮制，增加更多的图片。<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;%&nbsp;‘wuf26.asp<br />URL&nbsp;=&nbsp;Request.QueryString("url")<br />Response.Redirect(URL)&nbsp;<br />%&gt;&nbsp;</div></div><br />　　wuf26.asp是一个最简单的处理程序，你可根据实际需要在这里加入更多的代码。<br />运行一下，原来这个组件的使用也很简单，你要做的就是得到自己的AdrSet.txt文件。利用这个组件，你甚至可以设计一个现在已非常时髦的广告交换主页。<br /><br />　　四、&nbsp;Content&nbsp;Linking组件<br /><br />　　显然这个组件与链接有关系，如果想马上知道这个组件的具体用途，恐怕还操之过急，不妨先引用一个经典的例子：假设在网上阅读一本书，你对以下这些链接一定不会陌生：第1章、第2章、…、上一章、下一章（或前一页、后一页）等等。我们现在要做的就是如何在这些链接之间方便快速地设置跳转。<br /><br />　　首先建一个链接列表文本文件，如urllist.txt<br /><br />wuf23.asp&nbsp;：文件操作（File&nbsp;Access组件）<br />wuf28.asp&nbsp;：Content&nbsp;Linking组件使用示例<br />wuf22.asp&nbsp;：浏览器能力组件<br /><br />　　链接url地址和描述之间用&nbsp;Tab&nbsp;键分隔。下面wuf27.asp用来列出urllist.txt中的所有链接。<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;%&nbsp;@LANGUAGE&nbsp;=&nbsp;VBScript&nbsp;%&gt;<br />&lt;%&nbsp;Option&nbsp;Explicit&nbsp;%&gt;<br />&lt;html&gt;&lt;head&gt;&lt;title&gt;Content&nbsp;Linking组件使用&lt;/title&gt;&lt;/head&gt;<br />&lt;body&gt;&nbsp;<br />&lt;h2&gt;目录列表:&nbsp;注意核心链接是第2章,&nbsp;你一定要点击它&lt;/h2&gt;<br />&lt;ul&gt;<br />&lt;%<br />Dim&nbsp;NextLink,&nbsp;Count<br />'建立&nbsp;Content&nbsp;Linking&nbsp;组件<br />Set&nbsp;NextLink&nbsp;=&nbsp;Server.CreateObject("MSWC.NextLink")&nbsp;<br /><br />'获取文件&nbsp;urllist.txt&nbsp;中链接数目<br />Count&nbsp;=&nbsp;NextLink.GetListCount("urllist.txt")<br /><br />Dim&nbsp;url,&nbsp;Dscr,&nbsp;I<br />For&nbsp;I&nbsp;=&nbsp;1&nbsp;To&nbsp;Count<br />url&nbsp;=&nbsp;NextLink.GetNthURL&nbsp;("urllist.txt",&nbsp;I)&nbsp;'取得超链接<br />Dscr&nbsp;=&nbsp;NextLink.GetNthDescription&nbsp;("urllist.txt",&nbsp;I)&nbsp;'取得文字描述<br />Response.Write&nbsp;"&lt;li&gt;&lt;a&nbsp;href&nbsp;=&nbsp;"""&nbsp;&&nbsp;url&nbsp;&&nbsp;"""&gt;"&nbsp;&&nbsp;Dscr&nbsp;&&nbsp;"&lt;/a&gt;"&nbsp;&&nbsp;vbcrlf<br />Next<br />%&gt;&nbsp;<br />&lt;/ul&gt;&lt;/body&gt;&lt;/html&gt;&nbsp;</div></div><br />　　然后，以wuf28.asp为例说明如何自动实现上一章和下一章跳转。<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;%&nbsp;@LANGUAGE&nbsp;=&nbsp;VBScript&nbsp;%&gt;<br />&lt;%&nbsp;Option&nbsp;Explicit&nbsp;%&gt;<br />&lt;html&gt;&lt;head&gt;&lt;title&gt;这个链接要注意&lt;/title&gt;&lt;/head&gt;<br />&lt;body&gt;&nbsp;<br /><br />&lt;p&gt;这里是第&nbsp;2&nbsp;章的正文............&lt;/p&gt;<br /><br />&lt;%&nbsp;'每个文件都包含下面这句,&nbsp;就实现了自动链接%&gt;<br />&lt;!--#include&nbsp;file="wuf29.asp"--&gt;<br />&lt;/body&gt;&lt;/html&gt;&nbsp;<br /><br />　　这里最后一句加上去就可以实现自动跳转，核心在wuf29.asp中。<br /><br />&lt;%<br />Dim&nbsp;NextLink,&nbsp;rank<br />Set&nbsp;NextLink&nbsp;=&nbsp;Server.CreateObject&nbsp;("MSWC.NextLink")<br />'当前的链接在&nbsp;urllist.txt&nbsp;中位于第几个<br />rank&nbsp;=&nbsp;NextLink.GetListIndex&nbsp;("urllist.txt")<br />Response.Write&nbsp;"&lt;hr&gt;"<br /><br />If&nbsp;(rank&nbsp;&gt;&nbsp;1)&nbsp;Then&nbsp;'rank&nbsp;=&nbsp;1&nbsp;不存在前一页<br />Response.Write&nbsp;"|&lt;a&nbsp;href="""&nbsp;&&nbsp;NextLink.GetPreviousURL("urllist.txt")&nbsp;&&nbsp;"""&gt;上一章&lt;/a&gt;|"<br />End&nbsp;If&nbsp;<br /><br />If&nbsp;(rank&nbsp;&lt;&nbsp;NextLink.GetListCount("urllist.txt"))&nbsp;Then&nbsp;'rank在最后,&nbsp;则没有下一页<br />Response.Write&nbsp;"|&lt;a&nbsp;href="""&nbsp;&&nbsp;NextLink.GetNextURL("urllist.txt")&nbsp;&&nbsp;"""&gt;下一章&lt;/a&gt;|"<br />End&nbsp;If<br />%&gt;&nbsp;</div></div><br />　　运行这个例子后，你马上能真正理解这个组件的作用，简而言之，就是不需要在每页都写一个“上一章”、“下一章”，完全通过wuf29.asp一下搞定，是不是很方便？！不然你要是手工修改链接的话，不是太麻烦了几点吗？<br /><br />　　现在你应该明白了，网上大量的免费计数器、免费留言板、免费聊天室、广告交换网等等……，其原理都不过如此，大可不必崇拜]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">ASP六大对象介绍</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_128.html" />
      <updated>2008-9-11 0:51:09</updated>
      <published>2008-9-11 0:51:09</published>
      <id>http://dev.mo.cn/article_128.html</id>
      <summary type="html">
      <![CDATA[<br />Application对象&nbsp;<br />　　Application对象是个应用程序级的对象，用来在所有用户间共享信息，并可以在Web应用程序运行期间持久地保持数据。<br />Application的属性：<br />　　方法如下：&nbsp;<br />　　Application对象没有内置的属性，但是我们可以自行创建其属性。<br />　　&lt;%&nbsp;Application("属性名")=值&nbsp;%&gt;&nbsp;<br />　　其实大部分Application变量都　存放在Contents集合中，当你创建一个新的Application变量时，其实就是在Contents集合中添加了一项。下面两个脚本是等效的：&nbsp;<br />　　&lt;%&nbsp;Application("greeting")="hello!"&nbsp;%&gt;&nbsp;或&nbsp;&lt;%&nbsp;Application.contents("greeting")="hello!"由于Application变量存在集合里，所以如果想要全部显示，其方法我们已经多次使用，例如For&nbsp;Each循环。　　&nbsp;<br />&lt;%<br />For&nbsp;Each&nbsp;item&nbsp;IN&nbsp;Application.Contents<br />&nbsp;&nbsp;Response.write("&lt;br&gt;"&item&Application.Contents(item))<br />next<br />%&gt;&nbsp;<br />Application的方法：&nbsp;<br />　　Application的方法只有两个方法：一个是Lock，另一个是Unlock。其中Lock方法用于保证同一时刻只能一个用户对Application操作。Unlock则用于取消Lock方法的限制。如：<br />&lt;%<br />Application.Lock<br />Application("visitor_num")=Application("visitor_num")+1<br />Application.Unlock<br />%&gt;&nbsp;<br />Application的事件：&nbsp;<br />1、Application_OnStart()&nbsp;<br />　　当事件应用程序启动时触发。&nbsp;<br />2、Application_OnEnd()<br />　　此事件应用程序结束时触发。&nbsp;<br />　　这两个事件过程都是必须定义在Global.asp文件中，一般把连接数据的函数定义在这两个事件，然后放在Global.asp中。例如：<br />Sub&nbsp;Application_OnStart<br />&nbsp;&nbsp;&nbsp;&nbsp;Application("tt18_ConnectionString")&nbsp;=&nbsp;"driver={SQL&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;Server};server=jeff;uid=sa;pwd=;database=test"&nbsp;<br />End&nbsp;Sub&nbsp;<br />　　一个数组能够被定义成Application对象，不过这个数组只能作为一个对象保存，而不能用Application(0)取出其值。可以定义一个临时数组实现这种功能。如：<br />&lt;%<br />dim&nbsp;Array()<br />Array=Application("array")<br />for&nbsp;i&nbsp;=&nbsp;0&nbsp;to&nbsp;ubound(array)<br />&nbsp;&nbsp;Response.write&nbsp;Array(i)<br />next&nbsp;i<br />%&gt;&nbsp;<br />　　同样要修改这个Application对象也可以定义一个临时数组，把Application对象赋给数组，然后修改这个数组的元素，最后把数组赋回Application对象。如：<br />&lt;%<br />dim&nbsp;Array()<br />Array=Application("array")<br />Array(0)="jeff"<br />Array(1)="zhu"<br />Application.lock<br />Application("array")=Array<br />Application.unlock<br />%&gt;<br />ObjectContext对象&nbsp;<br /><br />该对象用于控制Active&nbsp;Server&nbsp;Pages的事务处理。事务处理由Microsoft&nbsp;Transaction&nbsp;Server&nbsp;(MTS)管理。&nbsp;<br /><br />事件&nbsp;<br /><br />ObjectContext.OnTransactionAbort&nbsp;<br /><br />由放弃的事务处理事件激发，在脚本完成处理后发生。&nbsp;<br /><br />ObjectContext.OnTransactionCommit&nbsp;<br /><br />由成功的事务处理事件激发，在脚本完成处理后发生。&nbsp;<br /><br />方法&nbsp;<br /><br />ObjectContext.SetAbort&nbsp;<br /><br />显式的放弃一次事务处理。&nbsp;<br /><br />ObjectContext.SetComplete&nbsp;<br /><br />覆盖前面任何调用ObjectContext.SetAbort方法的调用。&nbsp;&nbsp;<br />Request对象<br />&nbsp;&nbsp;<br />Request对象用于接受所有从浏览器发往你的服务器的请求内的所有信息。<br /><br />集合<br /><br />Request.ClientCertificate(key[SubField])<br /><br />所有客户证书的信息的集合。对于Key，该集合具有如下的关键字：<br /><br />Subject<br />证书的主题。包含所有关于证书收据的信息。能和所有的子域后缀一起使用。<br /><br />Issuer<br />证书的发行人。包含所有关于证书验证的信息。除了CN外，能和所有的子域后缀一起使用。<br /><br />VadidFrom<br />证书发行的日期。使用VBScript格式。<br /><br />ValidUntil<br />该证书不在有效的时间。<br /><br />SerialNumber<br />包含该证书的序列号。<br /><br />Certificate<br />包含整个证书内容的二进制流，使用ASN.1格式。<br /><br /><br />对于SubField，Subject和Issuer关键字可以具有如下的子域后缀：（比如：SubjectOU或IssuerL）<br /><br />C<br />起源国家。<br /><br />O<br />公司或组织名称。<br /><br />OU<br />组织单元。<br /><br />CN<br />用户的常规名称。<br /><br />L<br />局部。<br /><br />S<br />州（或省）。<br /><br />T<br />个人或公司的标题。<br /><br />GN<br />给定名称。<br /><br />I<br />初始。<br /><br /><br />当文件cervbs.inc(VBScript使用)或cerjavas.inc(Jscript使用)通过使用#INCLUDE导向包含在你的Active&nbsp;Server&nbsp;Page里时，下面两个标志可以使用：<br /><br />ceCertPresent<br />指明客户证书是否存在，其值为TRUE或FALSE。<br /><br />ceUnrecongnizedIssure<br />指明在该链表中的最后的证书的发行者是否未知，其值为TRUE或FALSE。<br /><br /><br />Request.Cookies(Cookie[(key).Attribute])<br /><br />Cookie的集合。允许获得浏览器的Cookie。Cookie指明返回那一个Cookie。Key用于从Cookie字典中返回具有某一关键字的Cookie值。对于Attribute，你能使用属性HasKeys来确定某一Cookie是否具有子关键字。HasKeys的值为TRUE或FALSE。<br /><br />Request.Form(Parameter)[(Index).Count]<br /><br />填写在HTML的表单中所有的数据的集合。Parameter是在HTML表单中某一元素的名称。当某一参数具有不止一个值（比如，当在&lt;SELECT&gt;中使用MULTIPLE属性时）时，使用Index。当某一参数具有多值时，Count指明多值个数。<br /><br />Request.QueryString(Varible)[(Index).Count]<br /><br />查询字符串的所有值的集合。Varible是在查询字符串某一变量的名称。当某一变量具有多于一个值时，使用Index。当某一参数具有多值时，Count指明值的个数。<br /><br />Request.ServerVaribles(Server&nbsp;Environment&nbsp;Variable)<br /><br />环境变量的集合。允许读取HTTP头。你可以通过使用HTTP_前缀来读取任何头信息。比如，HTTP_USER_AGENT接受客户代理HTTP头（浏览器类型）。除此外，你可以使用下表所示的变量获得任何环境信息。<br /><br />ALL_HTTP<br />客户端发送的所有HTTP标头，他的结果都有前缀HTTP_。<br /><br />ALL_RAW<br />客户端发送的所有HTTP标头,其结果和客户端发送时一样，没有前缀HTTP_&nbsp;<br /><br />APPL_MD_PATH<br />应用程序的元数据库路径。<br /><br />APPL_PHYSICAL_PATH<br />与应用程序元数据库路径相应的物理路径。<br /><br />AUTH_PASSWORD<br />当使用基本验证模式时，客户在密码对话框中输入的密码。<br /><br />AUTH_TYPE<br />这是用户访问受保护的脚本时，服务器用于检验用户的验证方法。<br /><br />AUTH_USER<br />代验证的用户名。<br /><br />CERT_COOKIE<br />唯一的客户证书ID号。<br /><br />CERT_FLAG<br />客户证书标志，如有客户端证书，则bit0为0。如果客户端证书验证无效，bit1被设置为1。<br /><br />CERT_ISSUER<br />用户证书中的发行者字段。<br /><br />CERT_KEYSIZE<br />安全套接字层连接关键字的位数，如128。<br /><br />CERT_SECRETKEYSIZE<br />服务器验证私人关键字的位数。如1024。<br /><br />CERT_SERIALNUMBER<br />客户证书的序列号字段。<br /><br />CERT_SERVER_ISSUER<br />服务器证书的发行者字段<br /><br />CERT_SERVER_SUBJECT<br />服务器证书的主题字段。<br /><br />CERT_SUBJECT<br />客户端证书的主题字段。<br /><br />CONTENT_LENGTH<br />客户端发出内容的长度。<br /><br />CONTENT_TYPE<br />客户发送的form内容或HTTP&nbsp;PUT的数据类型。<br /><br />GATEWAY_INTERFACE<br />服务器使用的网关界面。<br /><br />HTTPS<br />如果请求穿过安全通道（SSL），则返回ON。如果请求来自非安全通道，则返回OFF。<br /><br />HTTPS_KEYSIZE<br />安全套接字层连接关键字的位数，如128。<br /><br />HTTPS_SECRETKEYSIZE<br />服务器验证私人关键字的位数。如1024。<br /><br />HTTPS_SERVER_ISSUER<br />服务器证书的发行者字段。<br /><br />HTTPS_SERVER_SUBJECT<br />服务器证书的主题字段。<br /><br />INSTANCE_ID<br />IIS实例的ID号。<br /><br />INSTANCE_META_PATH<br />响应请求的IIS实例的元数据库路径。<br /><br />LOCAL_ADDR<br />返回接受请求的服务器地址。<br /><br />LOGON_USER<br />用户登录Windows&nbsp;NT的帐号<br /><br />PATH_INFO<br />客户端提供的路径信息。<br /><br />PATH_TRANSLATED<br />通过由虚拟至物理的映射后得到的路径。<br /><br />QUERY_STRING<br />查询字符串内容。<br /><br />REMOTE_ADDR<br />发出请求的远程主机的IP地址。<br /><br />REMOTE_HOST<br />发出请求的远程主机名称。<br /><br />REQUEST_METHOD<br />提出请求的方法。比如GET、HEAD、POST等等。<br /><br />SCRIPT_NAME<br />执行脚本的名称。<br /><br />SERVER_NAME<br />服务器的主机名、DNS地址或IP地址。<br /><br />SERVER_PORT<br />接受请求的服务器端口号。<br /><br />SERVER_PORT_SECURE<br />如果接受请求的服务器端口为安全端口时，则为1，否则为0。<br /><br />SERVER_PROTOCOL<br />服务器使用的协议的名称和版本。<br /><br />SERVER_SOFTWARE<br />应答请求并运行网关的服务器软件的名称和版本。<br /><br />URL<br />提供URL的基本部分。<br /><br /><br />　<br /><br />方法<br /><br />Request.BinaryRead(Count)<br /><br />接收一个HTML表单的未经过处理的内容。当调用此方法时，Count指明要接收多少字节。在调用此方法后，Count指明实际上接收到多少个字节。<br /><br />属性<br /><br />Request.TotalBytes<br /><br />查询体的长度，以字节为单位<br />Response对象<br /><br />　　Response对象用于向客户端浏览器发送数据，用户可以使用该对象将服务器的数据以HTML的格式发送到用户端的浏览器，它与Request组成了一对接收、发送数据的对象，这也是实现动态的基础。下面介绍它常用的属性和方法。<br /><br />&nbsp;<br /><br />1、Buffer属性　　<br />　　该属性用于指定页面输出时是否要用到缓冲区，默认值为False。当它为True时，直到整个Active&nbsp;Server&nbsp;Page执行结束后才会将结果输出到浏览器上。如：<br />&lt;%Response.Buffer=True%&gt;<br />&lt;html&gt;<br />&lt;Head&gt;<br />&lt;title&gt;Buffer示例&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;%<br />&nbsp;&nbsp;for&nbsp;i=1&nbsp;to&nbsp;500<br />&nbsp;&nbsp;&nbsp;&nbsp;response.write(i&nbsp;&&nbsp;"&lt;br&gt;")<br />&nbsp;&nbsp;next<br />%&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;&nbsp;<br />　　这页执行时，整个主页的所有内容会同时显示在浏览器上，这个主页会存在缓存区中直到脚本执行结束。<br /><br />&nbsp;<br /><br />2、Expires属性<br />　　该属性用于设置浏览器缓存页面的时间长度（单位为分），必须在服务器端刷新。通过如下设置：<br />&lt;%Response.Expires=0%&gt;&nbsp;<br />　　通过在ASP文件中加入这一行代码，要求每次请求是刷新页面，因为Response一收到页面就会过期。<br /><br />&nbsp;<br /><br />3、Write方法<br />　　该方法把数据发送到客户端浏览器，如：　　<br />&lt;%Response.write&nbsp;"Hello,world!"%&gt;&nbsp;<br /><br />&nbsp;<br /><br />4、Redirect方法<br />　　该方法使浏览器可以重新定位到另一个URL上，这样，当客户发出Web请求时，客户端的浏览器类型已经确定，客户被重新定位到相应的页面。如：<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;Redirect示例&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;form&nbsp;aciton="formjump.asp"&nbsp;method="post"&gt;<br />&nbsp;&nbsp;&lt;select&nbsp;name="wheretogo"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;option&nbsp;selected&nbsp;value="fun"&gt;Fun&lt;/option&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;option&nbsp;value="news"&gt;News&lt;/option&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;option&nbsp;value="sample"&gt;Sample&lt;/option&gt;<br />&nbsp;&nbsp;&lt;/select&gt;<br />&lt;input&nbsp;type=submit&nbsp;name="jump"&nbsp;value="Jump"&gt;<br />&lt;/form&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;&nbsp;<br />　　以上是提交的表单，下面是处理表单的文件formjump.asp：<br />&lt;%response.buff=true%&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;Redirect示例&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;%<br />thisurl="http://www.tinyu.com/";<br />where=Request.form("wheretogo")<br />Select&nbsp;Case&nbsp;where<br />&nbsp;&nbsp;case&nbsp;"fun"<br />&nbsp;&nbsp;&nbsp;&nbsp;response.redirect&nbsp;thisurl&nbsp;&&nbsp;"/fun/default.asp"<br />&nbsp;&nbsp;case&nbsp;"news"<br />&nbsp;&nbsp;&nbsp;&nbsp;response.redirect&nbsp;thisurl&nbsp;&&nbsp;"/news/default.asp"<br />&nbsp;&nbsp;case&nbsp;"sample"<br />&nbsp;&nbsp;&nbsp;&nbsp;response.redirect&nbsp;thisurl&nbsp;&&nbsp;"/sample/default.asp"<br />End&nbsp;Select<br />%&gt;<br />&lt;/body&gt;<br />&lt;html&gt;&nbsp;<br />　　这个例子当用户选择了以后，按"Jump"按钮提交表单，服务器接到申请后调用formjump.asp判断后定位到相应的URL。不过这里有一点要注意，HTTP标题已经写入到客户浏览器，任何HTTP标题的修改必须在写入页内容之前，遇到这种问题时，可以如下做：<br />在文件的开始&lt;@&nbsp;Language=..&gt;后写：&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;Response.Buffer=True<br />在结尾定：<br />&nbsp;&nbsp;Response.Flush<br />　　这里Flush是Response的一个方法，它必须是Buffer属性设置为True时才能使用，否则会产生一个运行模式错误。另外一个Clear方法也是用于清除被缓存的页面，同样要Buffer属性设置为True时才能使用。<br /><br />&nbsp;<br /><br />5、End方法<br />　　该方法用于告知Active&nbsp;Server当遇到该方法时停止处理ASP文件。如果Response对象的Buffer属性设置为True，这时End方法即把缓存中的内容发送到客户并清除冲区。所以要取消所有向客户的输出民，可以先清除缓冲区，然后利用End方法。如：<br />&lt;%<br />Response.buffer=true<br />On&nbsp;error&nbsp;resume&nbsp;next<br />Err.clear<br />if&nbsp;Err.number&lt;&gt;0&nbsp;then<br />&nbsp;&nbsp;Response.Clear<br />&nbsp;&nbsp;Response.End<br />end&nbsp;if<br />%&gt;&nbsp;<br />Server&nbsp;对象:<br /><br />Server&nbsp;对象提供对服务器上的方法和属性的访问。其中大多数方法和属性是作为实用程序的功能服务的。<br /><br />语法&nbsp;<br /><br />Server.property|method<br /><br />属性<br /><br />ScriptTimeout:<br />ScriptTimeout&nbsp;属性指定脚本在结束前最大可运行多长时间。&nbsp;当处理服务器组件时，超时限制将不再生效。&nbsp;<br /><br />语法&nbsp;&nbsp;Server.ScriptTimeout&nbsp;=&nbsp;NumSeconds<br /><br />参数&nbsp;&nbsp;NumSeconds&nbsp;<br />指定脚本在被服务器结束前最大可运行的秒数。默认值为&nbsp;90&nbsp;秒。&nbsp;<br /><br />注释<br />通过使用元数据库中的AspScriptTimeout属性可以为&nbsp;Web&nbsp;服务或&nbsp;Web&nbsp;服务器设置缺省的ScriptTimeout值。ScriptTimeout属性不能设置为小于在元数据库中指定的值。例如，如果NumSeconds设置为10，而元数据库设置包含了默认值90秒，则脚本在90秒后超时。但如果NumSeconds设置为100，则脚本在100秒后超时。<br /><br />关于使用元数据库的详细信息，参阅&nbsp;关于元数据库。<br /><br />示例&nbsp;&nbsp;&nbsp;&nbsp;以下示例中，如果服务器处理脚本超过&nbsp;100&nbsp;秒，将使之超时。<br />&lt;%&nbsp;Server.ScriptTimeout&nbsp;=&nbsp;100&nbsp;%&gt;<br />以下示例获取&nbsp;ScriptTimeout&nbsp;属性当前值，并将其存储在变量&nbsp;TimeOut&nbsp;中。<br />&lt;%&nbsp;TimeOut&nbsp;=&nbsp;Server.ScriptTimeout&nbsp;%&gt;<br /><br />方法<br /><br />CreateObject&nbsp;<br />CreateObject&nbsp;方法创建服务器组件的实例。如果该组件执行了&nbsp;OnStartPage&nbsp;和&nbsp;OnEndPage&nbsp;方法，则此时就会调用&nbsp;OnStartPage&nbsp;方法。有关服务器组件的详细信息，请参阅&nbsp;可安装的&nbsp;ASP&nbsp;组件&nbsp;。<br /><br />语法&nbsp;&nbsp;Server.CreateObject(&nbsp;progID&nbsp;)<br /><br />参数&nbsp;progID&nbsp;指定要创建的对象的类型。progID&nbsp;的格式为&nbsp;[Vendor.]&nbsp;component[.Version]。<br /><br />注释&nbsp;默认情况下，由&nbsp;Server.CreateObject&nbsp;方法创建的对象具有页作用域。这就是说，再当前&nbsp;ASP&nbsp;页处理完成之后，服务器将自动破坏这些对象。要创建有会话或应用程序作用域的对象，可以使用&nbsp;&lt;OBJECT&gt;&nbsp;标记并设置&nbsp;SESSION&nbsp;或&nbsp;APPLICATION&nbsp;的&nbsp;SCOPE&nbsp;属性，也可以在对话及应用程序变量中存储该对象。<br />例如，在如下所示的脚本中，当&nbsp;Session&nbsp;对象被破坏，即当对话超时时或&nbsp;Abandon&nbsp;方法被调用时，存储在会话变量中的对象也将被破坏。<br />&lt;%&nbsp;Set&nbsp;Session("ad")&nbsp;=&nbsp;Server.CreateObject("MSWC.AdRotator")%&gt;<br />可以通过将变量设置为&nbsp;Nothing&nbsp;或新的值来破坏对象，如下所示。第一个例子释放&nbsp;ad&nbsp;对象，第二个例子用字串代替&nbsp;ad&nbsp;。<br />&lt;%&nbsp;Session&nbsp;("ad")&nbsp;=&nbsp;Nothing&nbsp;%&gt;<br />&lt;%&nbsp;Session&nbsp;("ad")&nbsp;=&nbsp;"&nbsp;Other&nbsp;Valum&nbsp;"&nbsp;%&gt;<br />不能创建与内建对象同名的对象实例。&nbsp;例如，下列脚本将返回错误。<br />&lt;%&nbsp;Set&nbsp;Response&nbsp;=&nbsp;Server.CreateObject("Response")&nbsp;%&gt;&nbsp;<br /><br />示例&nbsp;&nbsp;&lt;%&nbsp;Set&nbsp;MyAd&nbsp;=&nbsp;Server.CreateObject("MSWC.AdRotator")&nbsp;%&gt;&nbsp;<br />上面的例子创建一个名为&nbsp;MyAd&nbsp;的&nbsp;MSWC.AdRotator&nbsp;服务器组件，MSWC.AdRotator&nbsp;组件可用于在&nbsp;Web&nbsp;页上的自动轮换广告。<br />关于服务器组件的详细信息,&nbsp;请参阅&nbsp;Creating&nbsp;Components&nbsp;for&nbsp;ASP.<br /><br />HTMLEncode&nbsp;&nbsp;HTMLEncode方法对指定的字符串应用&nbsp;HTML&nbsp;编码。&nbsp;<br /><br />语法&nbsp;&nbsp;&nbsp;&nbsp;Server.HTMLEncode(&nbsp;string&nbsp;)<br /><br />参数&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;指定要编码的字符串。&nbsp;<br /><br />示例脚本&nbsp;&nbsp;&nbsp;&nbsp;&lt;%=&nbsp;Server.HTMLEncode("The&nbsp;paragraph&nbsp;tag:&nbsp;&lt;P&gt;")&nbsp;%&gt;&nbsp;<br /><br />输出&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;paragraph&nbsp;tag:&nbsp;&lt;P&gt;&nbsp;<br /><br />注意&nbsp;以上输出将被&nbsp;Web&nbsp;浏览器显示为The&nbsp;paragraph&nbsp;tag:&nbsp;&lt;P&gt;如果查看一下源文件或以文本方式打开一个&nbsp;Web&nbsp;页，您就可以看到已编码的&nbsp;HTML。<br /><br /><br />MapPath<br />MapPath&nbsp;方法将指定的相对或虚拟路径映射到服务器上相应的物理目录上。<br /><br />语法<br />Server.MapPath(&nbsp;Path&nbsp;)<br /><br />参数<br />Path&nbsp;<br />指定要映射物理目录的相对或虚拟路径。若&nbsp;Path&nbsp;以一个正斜杠&nbsp;(/)&nbsp;或反斜杠&nbsp;(\)&nbsp;开始，则&nbsp;MapPath&nbsp;方法返回路径时将&nbsp;Path&nbsp;视为完整的虚拟路径。若&nbsp;Path&nbsp;不是以斜杠开始，则&nbsp;MapPath&nbsp;方法返回同&nbsp;.asp&nbsp;文件中已有的路径相对的路径。&nbsp;<br />注释<br />MapPath&nbsp;方法不支持相对路径语法&nbsp;(.)&nbsp;或&nbsp;(..)。例如，下列相对路径&nbsp;../MyDir/MyFile.txt&nbsp;返回一个错误。<br /><br />MapPath&nbsp;方法不检查返回的路径是否正确或在服务器上是否存在。<br /><br />因为&nbsp;MapPath&nbsp;方法只映射路径而不管指定的目录是否存在，所以，您可以先用&nbsp;MapPath&nbsp;方法映射物理目录结构的路径，然后将其传递给在服务器上创建指定目录或文件的组件。<br /><br />示例<br />对于下列示例，文件data.txt和包含下列脚本的test.asp文件都位于目录C:\Inetpub\Wwwroot\Script下。C:\Inetpub\Wwwroot目录被设置为服务器的宿主目录。<br /><br />下列示例使用服务器变量&nbsp;PATH_INFO&nbsp;映射当前文件的物理路径。脚本<br />&lt;%=&nbsp;server.mappath(Request.ServerVariables("PATH_INFO"))%&gt;&lt;BR&gt;<br /><br />输出<br />c:\inetpub\wwwroot\script\test.asp&lt;BR&gt;<br /><br />由于下列示例中的路径参数不是以斜杠字符开始的，所以它们被相对映射到当前目录，此处是&nbsp;C:\Inetpub\Wwwroot\Script。脚本<br />&lt;%=&nbsp;server.mappath("data.txt")%&gt;&lt;BR&gt;<br />&lt;%=&nbsp;server.mappath("script/data.txt")%&gt;&lt;BR&gt;<br /><br />输出<br />c:\inetpub\wwwroot\script\data.txt&lt;BR&gt;<br />c:\inetpub\wwwroot\script\script\data.txt&lt;BR&gt;<br /><br />接下来的两个示例使用斜杠字符指定返回的路径应被视为在服务器的完整虚拟路径。脚本<br />&lt;%=&nbsp;server.mappath("/script/data.txt")%&gt;&lt;BR&gt;<br />&lt;%=&nbsp;server.mappath("\script")%&gt;&lt;BR&gt;<br /><br />输出<br />c:\inetpub\script\data.txt&lt;BR&gt;<br />c:\inetpub\script&lt;BR&gt;<br /><br />下列示例演示如何使用正斜杠&nbsp;(/)&nbsp;或反斜杠&nbsp;(\)&nbsp;返回宿主目录的物理路径。脚本<br />&lt;%=&nbsp;server.mappath("/")%&gt;&lt;BR&gt;<br />&lt;%=&nbsp;server.mappath("\")%&gt;&lt;BR&gt;<br /><br />输出<br />c:\inetpub\wwwroot&lt;BR&gt;<br />c:\inetpub\wwwroot&lt;BR&gt;<br />　<br /><br />URLEncode<br />URLEncode&nbsp;方法将&nbsp;URL&nbsp;编码规则，包括转义字符，应用到指定的字符串。<br /><br />语法<br />Server.URLEncode(&nbsp;string&nbsp;)&nbsp;<br />参数&nbsp;<br />String&nbsp;指定要编码的字符串。&nbsp;<br />示例<br />脚本&nbsp;&lt;%Response.Write(Server.URLEncode("http://www.tinyu.com";))&nbsp;%&gt;&nbsp;<br /><br />输出&nbsp;http%3A%2F%2Fwww%2Etinyu%2Ecom<br />Session对象<br /><br />　　Session其实指的就是访问者从到达某个特定主页到离开为止的那段时间。每一访问者都会单独获得一个Session。在Web应用程序中，当一个用户访问该应用时，Session类型的变量可以供这个用户在该Web应用的所有页面中共享数据；如果另一个用户也同时访问该Web应用，他也拥有自己的Session变量，但两个用户之间无法通过Session变量共享信息，而Application类型的变更则可以实现站点多个用户之间在所有页面中共享信息。<br /><br />&nbsp;<br /><br />1、SessionID属性<br />　　该属性返回当前会话的唯一标志，为每一个Session分配不同的编号。<br />　　我曾在开发过程中就遇到对用户的控制问题。它要实现的功能就是，针对某个网站的一个模块，当一个会员登录后正在看此模块时，另一个人用同样的会员名登录，就不能浏览这个模块。也就是说一个会员名同时只能一个人浏览此模块。我通过用会员名（假设为UserID，唯一）和SessionID来实现了控制。当会员登录时，给这个会员一个Session记录登录状态如：Session("Status")="Logged"，同时把这个会员的Session.SessionID写入数据库。当他要浏览此模块时，先判断其是否登录，若已经登录再判断它的SessionID是否与数据库记录的相同，如果不同则不能访问。这样，当另一个用户用相同的会员名登录时，那么数据库中记录的就是新的SessionID，前者访问此模块时就不能通过检查。这就实现了一个会员名同时只能一个人浏览某个模块。这个功能在一些收费网站有很有特别作用，它防止了一个会员名给多个人浏览的问题，为公司保障了利益。<br /><br />&nbsp;<br /><br />2、TimeOut属性<br />　　该属性用来定义用户Session对象的时限。如果用户在规定的时间内没有刷新网页，则Session对象就会终止。一般默认为20分钟。　　<br /><br />&nbsp;<br /><br />3、Abandon方法<br />　　该方法是Session对象的唯一方法，可以清除Session对象，用来消除用户的Session对象并释放其所占的资源。如：&nbsp;&lt;%&nbsp;Session.Abandon&nbsp;%&gt;&nbsp;<br />4、Session_OnStart和Session_OnEnd事件<br />　　和Application一样，当对象的例程每一次启动时触发Session_OnStart事件，然后运行Session_Onstart事件的处理过程。也就是说，当服务器接收到应用程序中的URL的HTTP请求时，触发此事件，并建立一个Session对象。同理，这个事件也必须定在Global.asa文件中。<br />　　当调用Session.Abandon方法时或者在TimeOut的时间内没有刷新，这会触发Session_OnEnd事件，然后执行里面的脚本。Session变量与特定的用户相联系，针对某一个用户赋值的Session变量是和其他用户的Session变量完全独立的，不会存在相互影响。<br />Session应用一列：<br />　　与Application一样，一个被定义为Session类型的数组只能将整个数组作为一个对象，用户不能直接改变Session数组中某个元素的值。为了创建一个Session数组，需先定义一个普通的数组，并对它的每一个元素赋初值，最后把它定义为一个Session数组。如：<br />&lt;%<br />dim&nbsp;array()<br />array=array("李","明","男")<br />Session("info")=array<br />Response.write&nbsp;Session("info")(0)&nbsp;&"-"<br />Response.write&nbsp;Session("info")(1)&nbsp;&"-"<br />Response.write&nbsp;Session("info")(2)&nbsp;&"&lt;br&gt;"<br />%&gt;<br />&lt;hr&gt;<br />&lt;%<br />array(0)="天"<br />array(1)="宇"<br />array(2)="男"<br />Session("info")=array<br />Response.write&nbsp;Session("info")(0)&nbsp;&&nbsp;"-"<br />Response.write&nbsp;Session("info")(1)&nbsp;&&nbsp;"-"<br />Response.write&nbsp;Session("info")(2)&nbsp;&&nbsp;"&lt;br&gt;"<br />%&gt;&nbsp;]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">Javascript拖动层</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_127.html" />
      <updated>2008-9-10 9:13:45</updated>
      <published>2008-9-10 9:13:45</published>
      <id>http://dev.mo.cn/article_127.html</id>
      <summary type="html">
      <![CDATA[<div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;html&gt;&nbsp;<br />&lt;head&gt;&nbsp;<br />&lt;style&nbsp;type='text/css'&gt;&nbsp;<br />&lt;!--&nbsp;<br />body{font-size:12px;}&nbsp;<br />a:visited{text-decoration:none;color:slategray;}&nbsp;<br />a:hover{text-decoration:underline;color:slategray;}&nbsp;<br />a:link{text-decoration:none;color:slategray;}&nbsp;<br />--&gt;&nbsp;<br />&lt;/style&gt;&nbsp;<br />&lt;script&nbsp;language=JScript&gt;&nbsp;<br />&lt;!--&nbsp;<br />//可以打包为js文件;&nbsp;<br />var&nbsp;x0=0,y0=0,x1=0,y1=0;&nbsp;<br />var&nbsp;offx=6,offy=6;&nbsp;<br />var&nbsp;moveable=false;&nbsp;<br />var&nbsp;hover='orange',normal='#336699';//color;&nbsp;<br />var&nbsp;index=10000;//z-index;&nbsp;<br />//开始拖动;&nbsp;<br />function&nbsp;startDrag(obj)&nbsp;<br />{&nbsp;<br />if(event.button==1)&nbsp;<br />{&nbsp;<br />//锁定标题栏;&nbsp;<br />obj.setCapture();&nbsp;<br />//定义对象;&nbsp;<br />var&nbsp;win&nbsp;=&nbsp;obj.parentNode;&nbsp;<br />var&nbsp;sha&nbsp;=&nbsp;win.nextSibling;&nbsp;<br />//记录鼠标和层位置;&nbsp;<br />x0&nbsp;=&nbsp;event.clientX;&nbsp;<br />y0&nbsp;=&nbsp;event.clientY;&nbsp;<br />x1&nbsp;=&nbsp;parseInt(win.style.left);&nbsp;<br />y1&nbsp;=&nbsp;parseInt(win.style.top);&nbsp;<br />//记录颜色;&nbsp;<br />normal&nbsp;=&nbsp;obj.style.backgroundColor;&nbsp;<br />//改变风格;&nbsp;<br />obj.style.backgroundColor&nbsp;=&nbsp;hover;&nbsp;<br />win.style.borderColor&nbsp;=&nbsp;hover;&nbsp;<br />obj.nextSibling.style.color&nbsp;=&nbsp;hover;&nbsp;<br />sha.style.left&nbsp;=&nbsp;x1&nbsp;+&nbsp;offx;&nbsp;<br />sha.style.top&nbsp;&nbsp;=&nbsp;y1&nbsp;+&nbsp;offy;&nbsp;<br />moveable&nbsp;=&nbsp;true;&nbsp;<br />}&nbsp;<br />}&nbsp;<br />//拖动;&nbsp;<br />function&nbsp;drag(obj)&nbsp;<br />{&nbsp;<br />if(moveable)&nbsp;<br />{&nbsp;<br />var&nbsp;win&nbsp;=&nbsp;obj.parentNode;&nbsp;<br />var&nbsp;sha&nbsp;=&nbsp;win.nextSibling;&nbsp;<br />win.style.left&nbsp;=&nbsp;x1&nbsp;+&nbsp;event.clientX&nbsp;-&nbsp;x0;&nbsp;<br />win.style.top&nbsp;&nbsp;=&nbsp;y1&nbsp;+&nbsp;event.clientY&nbsp;-&nbsp;y0;&nbsp;<br />sha.style.left&nbsp;=&nbsp;parseInt(win.style.left)&nbsp;+&nbsp;offx;&nbsp;<br />sha.style.top&nbsp;&nbsp;=&nbsp;parseInt(win.style.top)&nbsp;+&nbsp;offy;&nbsp;<br />}&nbsp;<br />}&nbsp;<br />//停止拖动;&nbsp;<br />function&nbsp;stopDrag(obj)&nbsp;<br />{&nbsp;<br />if(moveable)&nbsp;<br />{&nbsp;<br />var&nbsp;win&nbsp;=&nbsp;obj.parentNode;&nbsp;<br />var&nbsp;sha&nbsp;=&nbsp;win.nextSibling;&nbsp;<br />var&nbsp;msg&nbsp;=&nbsp;obj.nextSibling;&nbsp;<br />win.style.borderColor&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;normal;&nbsp;<br />obj.style.backgroundColor&nbsp;=&nbsp;normal;&nbsp;<br />msg.style.color&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;normal;&nbsp;<br />sha.style.left&nbsp;=&nbsp;obj.parentNode.style.left;&nbsp;<br />sha.style.top&nbsp;&nbsp;=&nbsp;obj.parentNode.style.top;&nbsp;<br />obj.releaseCapture();&nbsp;<br />moveable&nbsp;=&nbsp;false;&nbsp;<br />alert('我的顶部位置：'+obj.parentNode.style.top+'&nbsp;我的左边位置：'+obj.parentNode.style.left);&nbsp;<br />}&nbsp;<br />}&nbsp;<br />//获得焦点;&nbsp;<br />function&nbsp;getFocus(obj)&nbsp;<br />{&nbsp;<br />if(obj.style.zIndex!=index)&nbsp;<br />{&nbsp;<br />index&nbsp;=&nbsp;index&nbsp;+&nbsp;2;&nbsp;<br />var&nbsp;idx&nbsp;=&nbsp;index;&nbsp;<br />obj.style.zIndex=idx;&nbsp;<br />obj.nextSibling.style.zIndex=idx-1;&nbsp;<br />}&nbsp;<br />}&nbsp;<br />//最小化;&nbsp;<br />function&nbsp;min(obj)&nbsp;<br />{&nbsp;<br />var&nbsp;win&nbsp;=&nbsp;obj.parentNode.parentNode;&nbsp;<br />var&nbsp;sha&nbsp;=&nbsp;win.nextSibling;&nbsp;<br />var&nbsp;tit&nbsp;=&nbsp;obj.parentNode;&nbsp;<br />var&nbsp;msg&nbsp;=&nbsp;tit.nextSibling;&nbsp;<br />var&nbsp;flg&nbsp;=&nbsp;msg.style.display=="none";&nbsp;<br />if(flg)&nbsp;<br />{&nbsp;<br />win.style.height&nbsp;&nbsp;=&nbsp;parseInt(msg.style.height)&nbsp;+&nbsp;parseInt(tit.style.height)&nbsp;+&nbsp;2*2;&nbsp;<br />sha.style.height&nbsp;&nbsp;=&nbsp;win.style.height;&nbsp;<br />msg.style.display&nbsp;=&nbsp;"block";&nbsp;<br />obj.innerHTML&nbsp;=&nbsp;"0";&nbsp;<br />}&nbsp;<br />else&nbsp;<br />{&nbsp;<br />win.style.height&nbsp;&nbsp;=&nbsp;parseInt(tit.style.height)&nbsp;+&nbsp;2*2;&nbsp;<br />sha.style.height&nbsp;&nbsp;=&nbsp;win.style.height;&nbsp;<br />obj.innerHTML&nbsp;=&nbsp;"2";&nbsp;<br />msg.style.display&nbsp;=&nbsp;"none";&nbsp;<br />}&nbsp;<br />}&nbsp;<br />//创建一个对象;&nbsp;<br />function&nbsp;xWin(id,w,h,l,t,tit,msg)&nbsp;<br />{&nbsp;<br />index&nbsp;=&nbsp;index+2;&nbsp;<br />this.id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;id;&nbsp;<br />this.width&nbsp;&nbsp;=&nbsp;w;&nbsp;<br />this.height&nbsp;&nbsp;=&nbsp;h;&nbsp;<br />this.left&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;l;&nbsp;<br />this.top&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;t;&nbsp;<br />this.zIndex&nbsp;&nbsp;=&nbsp;index;&nbsp;<br />this.title&nbsp;&nbsp;=&nbsp;tit;&nbsp;<br />this.message&nbsp;=&nbsp;msg;&nbsp;<br />this.obj&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;null;&nbsp;<br />this.bulid&nbsp;&nbsp;=&nbsp;bulid;&nbsp;<br />this.bulid();&nbsp;<br />}&nbsp;<br />//初始化;&nbsp;<br />function&nbsp;bulid()&nbsp;<br />{&nbsp;<br />var&nbsp;str&nbsp;=&nbsp;""&nbsp;<br />+&nbsp;"&nbsp;&lt;div&nbsp;id=xMsg"&nbsp;+&nbsp;this.id&nbsp;+&nbsp;"&nbsp;"&nbsp;<br />+&nbsp;"style='"&nbsp;<br />+&nbsp;"z-index:"&nbsp;+&nbsp;this.zIndex&nbsp;+&nbsp;";"&nbsp;<br />+&nbsp;"width:"&nbsp;+&nbsp;this.width&nbsp;+&nbsp;";"&nbsp;<br />+&nbsp;"height:"&nbsp;+&nbsp;this.height&nbsp;+&nbsp;";"&nbsp;<br />+&nbsp;"left:"&nbsp;+&nbsp;this.left&nbsp;+&nbsp;";"&nbsp;<br />+&nbsp;"top:"&nbsp;+&nbsp;this.top&nbsp;+&nbsp;";"&nbsp;<br />+&nbsp;"background-color:"&nbsp;+&nbsp;normal&nbsp;+&nbsp;";"&nbsp;<br />+&nbsp;"color:"&nbsp;+&nbsp;normal&nbsp;+&nbsp;";"&nbsp;<br />+&nbsp;"font-size:8pt;"&nbsp;<br />+&nbsp;"font-family:Tahoma;"&nbsp;<br />+&nbsp;"position:absolute;"&nbsp;<br />+&nbsp;"cursor:default;"&nbsp;<br />+&nbsp;"border:2px&nbsp;solid&nbsp;"&nbsp;+&nbsp;normal&nbsp;+&nbsp;";"&nbsp;<br />+&nbsp;"'&nbsp;"&nbsp;<br />+&nbsp;"onmousedown='getFocus(this)'&gt;"&nbsp;<br />+&nbsp;"&nbsp;&lt;div&nbsp;"&nbsp;<br />+&nbsp;"style='"&nbsp;<br />+&nbsp;"background-color:"&nbsp;+&nbsp;normal&nbsp;+&nbsp;";"&nbsp;<br />+&nbsp;"width:"&nbsp;+&nbsp;(this.width-2*2)&nbsp;+&nbsp;";"&nbsp;<br />+&nbsp;"height:20;"&nbsp;<br />+&nbsp;"color:white;"&nbsp;<br />+&nbsp;"'&nbsp;"&nbsp;<br />+&nbsp;"onmousedown='startDrag(this)'&nbsp;"&nbsp;<br />+&nbsp;"onmouseup='stopDrag(this)'&nbsp;"&nbsp;<br />+&nbsp;"onmousemove='drag(this)'&nbsp;"&nbsp;<br />+&nbsp;"ondblclick='min(this.childNodes[1])'"&nbsp;<br />+&nbsp;"&gt;"&nbsp;<br />+&nbsp;"&nbsp;&lt;span&nbsp;style='width:"&nbsp;+&nbsp;(this.width-2*12-4)&nbsp;+&nbsp;";padding-left:3px;'&gt;"&nbsp;+&nbsp;this.title&nbsp;+&nbsp;"&nbsp;&lt;/span&gt;"&nbsp;<br />+&nbsp;"&nbsp;&lt;span&nbsp;style='width:12;border-width:0px;color:white;font-family:webdings;'&nbsp;onclick='min(this)'&gt;0&nbsp;&lt;/span&gt;"&nbsp;<br />+&nbsp;"&nbsp;&lt;span&nbsp;style='width:12;border-width:0px;color:white;font-family:webdings;'&nbsp;onclick='ShowHide(\""+this.id+"\",null)'&gt;r&nbsp;&lt;/span&gt;"&nbsp;<br />+&nbsp;"&nbsp;&lt;/div&gt;"&nbsp;<br />+&nbsp;"&nbsp;&lt;div&nbsp;style='"&nbsp;<br />+&nbsp;"width:100%;"&nbsp;<br />+&nbsp;"height:"&nbsp;+&nbsp;(this.height-20-4)&nbsp;+&nbsp;";"&nbsp;<br />+&nbsp;"background-color:white;"&nbsp;<br />+&nbsp;"line-height:14px;"&nbsp;<br />+&nbsp;"word-break:break-all;"&nbsp;<br />+&nbsp;"padding:3px;"&nbsp;<br />+&nbsp;"'&gt;"&nbsp;+&nbsp;this.message&nbsp;+&nbsp;"&nbsp;&lt;/div&gt;"&nbsp;<br />+&nbsp;"&nbsp;&lt;/div&gt;"&nbsp;<br />+&nbsp;"&nbsp;&lt;div&nbsp;id=xMsg"&nbsp;+&nbsp;this.id&nbsp;+&nbsp;"bg&nbsp;style='"&nbsp;<br />+&nbsp;"width:"&nbsp;+&nbsp;this.width&nbsp;+&nbsp;";"&nbsp;<br />+&nbsp;"height:"&nbsp;+&nbsp;this.height&nbsp;+&nbsp;";"&nbsp;<br />+&nbsp;"top:"&nbsp;+&nbsp;this.top&nbsp;+&nbsp;";"&nbsp;<br />+&nbsp;"left:"&nbsp;+&nbsp;this.left&nbsp;+&nbsp;";"&nbsp;<br />+&nbsp;"z-index:"&nbsp;+&nbsp;(this.zIndex-1)&nbsp;+&nbsp;";"&nbsp;<br />+&nbsp;"position:absolute;"&nbsp;<br />+&nbsp;"background-color:black;"&nbsp;<br />+&nbsp;"filter:alpha(opacity=40);"&nbsp;<br />+&nbsp;"'&gt;&nbsp;&lt;/div&gt;";&nbsp;<br />document.body.insertAdjacentHTML("beforeEnd",str);&nbsp;<br />}&nbsp;<br />//显示隐藏窗口&nbsp;<br />function&nbsp;ShowHide(id,dis){&nbsp;<br />var&nbsp;bdisplay&nbsp;=&nbsp;(dis==null)?((document.getElementById("xMsg"+id).style.display=="")?"none":""):dis&nbsp;<br />document.getElementById("xMsg"+id).style.display&nbsp;=&nbsp;bdisplay;&nbsp;<br />document.getElementById("xMsg"+id+"bg").style.display&nbsp;=&nbsp;bdisplay;&nbsp;<br />}&nbsp;<br />//--&gt;&nbsp;<br />&lt;/script&gt;&nbsp;<br /><br />&lt;script&nbsp;language='JScript'&gt;&nbsp;<br />&lt;!--&nbsp;<br />function&nbsp;initialize()&nbsp;<br />{&nbsp;<br />var&nbsp;a&nbsp;=&nbsp;new&nbsp;xWin("1",160,200,200,200,"窗口1","xWin&nbsp;&lt;br&gt;&nbsp;A&nbsp;Cool&nbsp;Pop&nbsp;Div&nbsp;Window&nbsp;&lt;br&gt;Version:1.0&nbsp;&lt;br&gt;2002-8-13");&nbsp;<br />var&nbsp;b&nbsp;=&nbsp;new&nbsp;xWin("2",240,200,100,100,"窗口2","Welcome&nbsp;to&nbsp;visited&nbsp;my&nbsp;personal&nbsp;website:&nbsp;&lt;br&gt;&nbsp;&lt;a&nbsp;href=http://www14.brinkster.com/wildcity&nbsp;target=_blank&gt;http://wildcity.126.com&nbsp;&lt;/a&gt;&nbsp;&lt;br&gt;and&nbsp;u&nbsp;can&nbsp;also&nbsp;sign&nbsp;my&nbsp;guestbook&nbsp;at:&nbsp;&lt;br&gt;&nbsp;&lt;a&nbsp;href=http://www14.brinkster.com/wildcity/gbook&nbsp;target=_blank&gt;http://wildcity.126.com/gbook&nbsp;&lt;/a&gt;&nbsp;&lt;br&gt;&nbsp;&lt;br&gt;thx!!!&nbsp;=)...");&nbsp;<br />var&nbsp;c&nbsp;=&nbsp;new&nbsp;xWin("3",200,160,250,50,"窗口3","Copyright&nbsp;by&nbsp;&lt;a&nbsp;href='mailto:wildwind_zz@21cn.com'&gt;Wildwind&nbsp;&lt;/a&gt;!");&nbsp;<br />ShowHide("1","none");//隐藏窗口1&nbsp;<br />}&nbsp;<br />window.onload&nbsp;=&nbsp;initialize;&nbsp;<br />//--&gt;&nbsp;<br />&lt;/script&gt;&nbsp;<br />&lt;/head&gt;&nbsp;<br />&lt;base&nbsp;target="_blank"&gt;&nbsp;<br />&lt;body&nbsp;onselectstart='return&nbsp;false'&nbsp;oncontextmenu='return&nbsp;false'&nbsp;&gt;&nbsp;<br />&lt;a&nbsp;onclick="ShowHide('1',null);return&nbsp;false;"&nbsp;href=""&gt;窗口1&nbsp;&lt;/a&gt;&nbsp;<br />&lt;a&nbsp;onclick="ShowHide('2',null);return&nbsp;false;"&nbsp;href=""&gt;窗口2&nbsp;&lt;/a&gt;&nbsp;<br />&lt;a&nbsp;onclick="ShowHide('3',null);return&nbsp;false;"&nbsp;href=""&gt;窗口3&nbsp;&lt;/a&gt;&nbsp;<br />&lt;/body&gt;&nbsp;<br />&lt;/html&gt;&nbsp;</div></div>]]>
      </summary>
      <category term="" label="JavaScript/DOM" scheme="http://dev.mo.cn/cat_diary_9.html" />
   </entry>
   <entry>
      <title type="html">CSS设计网页时的一些常用规范</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_126.html" />
      <updated>2008-9-8 23:58:59</updated>
      <published>2008-9-8 23:58:59</published>
      <id>http://dev.mo.cn/article_126.html</id>
      <summary type="html">
      <![CDATA[CSS命名规范&nbsp;<br />一．文件命名规范&nbsp;<br /><br />　　全局样式：global.css；&nbsp;<br />　　框架布局：layout.css；&nbsp;<br />　　字体样式：font.css；&nbsp;<br />　　链接样式：link.css；&nbsp;<br />　　打印样式：print.css；&nbsp;<br /><br />二．常用类/ID命名规范&nbsp;<br /><br />　　页　眉：header&nbsp;<br />　　内　容：content&nbsp;<br />　　容　器：container&nbsp;<br />　　页　脚：footer&nbsp;<br />　　版　权：copyright　&nbsp;<br />　　导　航：menu&nbsp;<br />　　主导航：mainMenu&nbsp;<br />　　子导航：subMenu&nbsp;<br />　　标　志：logo&nbsp;<br />　　标　语：banner&nbsp;<br />　　标　题：title&nbsp;<br />　　侧边栏：sidebar&nbsp;<br />　　图　标：Icon&nbsp;<br />　　注　释：note&nbsp;<br />　　搜　索：search&nbsp;<br />　　按　钮：btn&nbsp;<br />　　登　录：login&nbsp;<br />　　链　接：link&nbsp;<br />　　信息框：manage&nbsp;<br />　　……&nbsp;<br /><br />　　常用类的命名应尽量以常见英文单词为准，做到通俗易懂，并在适当的地方加以注释。对于二级类/ID<br /><br />命名，则采用组合书写的模式，后一个单词的首字母应大写：诸如“搜索框”则应命名为“searchInput”<br /><br />、“搜索图标”命名这“searchIcon”、“搜索按钮”命名为“searchBtn”……&nbsp;<br />　　CSS书写规范及方法&nbsp;<br /><br />一.&nbsp;常规书写规范及方法&nbsp;<br /><br />　　1.&nbsp;选择DOCTYPE：&nbsp;<br /><br />　　XHTML&nbsp;1.0&nbsp;提供了三种DTD声明可供选择：&nbsp;<br /><br />　　过渡的(Transitional):要求非常宽松的DTD，它允许你继续使用HTML4.01的标识(但是要符合xhtml的<br /><br />写法)。完整代码如下：&nbsp;<br /><br />　　&nbsp;&lt;!DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;“-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN”&nbsp;<br /><br />“http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“&gt;<br /><br />　　严格的(Strict):要求严格的DTD，你不能使用任何表现层的标识和属性，例如<br />。完整代码如下：&nbsp;<br /><br />　　&nbsp;&lt;!DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;“-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Strict//EN”&nbsp;<br /><br />“http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd“&gt;<br /><br />　　框架的(Frameset):专门针对框架页面设计使用的DTD，如果你的页面中包含有框架，需要采用这种DTD<br /><br />。完整代码如下：&nbsp;<br /><br />　　&nbsp;&lt;!DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;“-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Frameset//EN”&nbsp;<br /><br />“http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd“&gt;<br /><br />　　理想情况当然是严格的DTD，但对于我们大多数刚接触web标准的设计师来说，过渡的DTD(XHTML&nbsp;1.0&nbsp;<br /><br />Transitional)是目前理想选择(包括本站，使用的也是过渡型DTD)。因为这种DTD还允许我们使用表现层的<br /><br />标识、元素和属性，也比较容易通过W3C的代码校验。&nbsp;<br /><br />　　2.&nbsp;指定语言及字符集：&nbsp;<br /><br />　　为文档指定语言：&nbsp;<br /><br />　　&nbsp;&lt;html&nbsp;xmlns=”http://www.w3.org/1999/xhtml”&nbsp;lang=”en”&gt;<br /><br />　　为了被浏览器正确解释和通过W3C代码校验，所有的XHTML文档都必须声明它们所使用的编码语言；如<br /><br />：&nbsp;<br />　　常用的语言定义：&nbsp;<br /><br />　　&nbsp;&lt;meta&nbsp;http-equiv=”Content-Type”&nbsp;content=”text/html;&nbsp;charset=utf-8″&nbsp;/&gt;<br />标准的XML文档语言定义：<br />&lt;?xml&nbsp;version=”1.0″&nbsp;encoding=”&nbsp;utf-8″?&gt;<br />针对老版本的浏览器的语言定义：<br />&lt;meta&nbsp;http-equiv=”Content-Language”&nbsp;content=”&nbsp;utf-8″&nbsp;/&gt;<br />为提高字符集，建议采用“utf-8”。<br /><br />　　标准的XML文档语言定义：&nbsp;<br />　　&nbsp;<br />　　针对老版本的浏览器的语言定义：&nbsp;<br />　　&nbsp;<br />　　为提高字符集，建议采用“utf-8”。&nbsp;<br /><br />　　3.&nbsp;调用样式表：&nbsp;<br /><br />　　外部样式表调用：&nbsp;<br /><br />　　页面内嵌法：就是将样式表直接写在页面代码的head区。&nbsp;如：&nbsp;<br /><br />&lt;style&nbsp;type=”text/css”&gt;&lt;!–&nbsp;body&nbsp;{&nbsp;background&nbsp;:&nbsp;white&nbsp;;&nbsp;color&nbsp;:&nbsp;black&nbsp;;&nbsp;}&nbsp;–&gt;&nbsp;&lt;/style&gt;<br />外部调用法：将样式表写在一个独立的.css文件中，然后在页面head区用类似以下代码调用。<br /><br />&lt;link&nbsp;rel=”stylesheet”&nbsp;rev=”stylesheet”&nbsp;href=”css/style.css”&nbsp;type=”text/css”&nbsp;media=”<br /><br />all”&nbsp;/&gt;<br />　　&nbsp;<br />　　外部调用法：将样式表写在一个独立的.css文件中，然后在页面head区用类似以下代码调用。&nbsp;<br /><br />　　&nbsp;&lt;link&nbsp;rel=”stylesheet”&nbsp;rev=”stylesheet”&nbsp;href=”css/style.css”&nbsp;type=”text/css”&nbsp;<br /><br />media=”all”&nbsp;/&gt;<br /><br />　　在符合web标准的设计中，推荐使用外部调用法，可以不修改页面只修改.css文件而改变页面的样式。<br /><br />如果所有页面都调用同一个样式表文件，那么改一个样式表文件，可以改变所有文件的样式。&nbsp;<br /><br />　　4、选用恰当的元素：&nbsp;<br /><br />　　根据文档的结构来选择HTML元素，而不是根据HTML元素的样式来选择。例如，使用P元素来包含文字段<br /><br />落，而不是为了换行。如果在创建文档时找不到适当的元素，则可以考虑使用通用的div&nbsp;或者是span；&nbsp;<br /><br />　　避免过渡使用div和span。少量、适当的使用div和span元素可以使文档的结构更加清晰合理并且易于<br /><br />使用样式；&nbsp;<br /><br />　　尽可能少地使用标签和结构嵌套，这样不但可以使文档结构清晰，同时也可以保持文件的小巧，在提<br /><br />高用户下载速度的同时，也易于浏览器对文档的解释及呈视；&nbsp;<br /><br />　　5、派生选择器：&nbsp;<br /><br />　　可以使用派生选择器给一个元素里的子元素定义样式，在简化命名的同时也使结构更加的清晰化，如<br /><br />：&nbsp;<br /><br />　　.mainMenu&nbsp;ul&nbsp;li&nbsp;{background:url(images/bg.gif;)}&nbsp;<br /><br />　　6、辅助图片用背影图处理：&nbsp;<br /><br />　　这里的”辅助图片”是指那些不是作为页面要表达的内容的一部分，而仅仅用于修饰、间隔、提醒的<br /><br />图片。将其做背影图处理，可以在不改动页面的情况下通过CSS样式来进行改动，如：&nbsp;<br /><br />　　#logo&nbsp;{background:url(images/logo.jpg)&nbsp;#FEFEFE&nbsp;no-repeat&nbsp;right&nbsp;bottom;}&nbsp;<br /><br />　　7、结构与样式分离：&nbsp;<br /><br />　　在页面里只写入文档的结构，而将样式写于css文件中，通过外部调用CSS样式表来实现结构与样式的<br /><br />分离。&nbsp;<br /><br />8、文档的结构化书写：&nbsp;<br /><br />　　页面CSS文档都应采用结构化的书写方式，逻辑清晰易于阅读。如：&nbsp;<br /><br />＜div&nbsp;id=”mainMenu”&gt;<br />&lt;ul&gt;<br />&lt;li&gt;&lt;a&nbsp;href=”#”&nbsp;&gt;首页&lt;/a&gt;&lt;/li&gt;<br />&lt;li&gt;&lt;a&nbsp;href=”#”&nbsp;&gt;介绍&lt;/a&gt;&lt;/li&gt;<br />&lt;li&gt;&lt;a&nbsp;href=”#”&nbsp;&gt;服务&lt;/a&gt;&lt;/li&gt;<br />&lt;/ul&gt;<br />&lt;/div＜<br />　　<br /><br />　　/*=====主导航=====*/&nbsp;<br />　　#mainMenu&nbsp;{&nbsp;<br />　　width:100%;&nbsp;<br />　　height:30px;&nbsp;<br />　　background:url(images/mainMenu_bg.jpg)&nbsp;repeat-x;&nbsp;<br />　　}&nbsp;<br />　　#mainMenu&nbsp;ul&nbsp;li&nbsp;{&nbsp;<br />　　float:left;&nbsp;<br />　　line-height:30px;&nbsp;<br />　　margin-right:1px;&nbsp;<br />　　cursor:pointer;&nbsp;<br />　　}&nbsp;<br />　　/*=====主导航结束=====*/&nbsp;<br /><br />　　9、鼠标手势：&nbsp;<br /><br />　　在XHTML标准中，hand只被IE识别，当需要将鼠标手势转换为“手形”时，则将“hand”换为<br /><br />“pointer”，即“cursor:pointer;”<br /><br />二．注释书写规范&nbsp;<br /><br />　　1、行间注释：&nbsp;<br /><br />　　直接写于属性值后面，如：&nbsp;<br /><br />　　.search{&nbsp;<br />　　border:1px&nbsp;solid&nbsp;#fff;/*定义搜索输入框边框*/&nbsp;<br />　　background:url(../images/icon.gif)&nbsp;no-report&nbsp;#333;/*定义搜索框的背景*/&nbsp;<br />　　}&nbsp;<br /><br />　　2、整段注释：&nbsp;<br /><br />　　分别在开始及结束地方加入注释，如：&nbsp;<br /><br />　　/*=====搜索条=====*/&nbsp;<br />　　.search&nbsp;{&nbsp;<br />　　border:1px&nbsp;solid&nbsp;#fff;&nbsp;<br />　　background:url(../images/icon.gif)&nbsp;no-repeat&nbsp;#333;&nbsp;<br />　　}&nbsp;<br />　　/*=====搜索条结束=====*/&nbsp;<br /><br />三．样式属性代码缩写&nbsp;<br /><br />　　1、不同类有相同属性及属性值的缩写：&nbsp;<br /><br />　　对于两个不同的类，但是其中有部分相同甚至是全部相同的属性及属性值时，应对其加以合并缩写，<br /><br />特别是当有多个不同的类而有相同的属性及属性值时，合并缩写可以减少代码量并易于控制。如：&nbsp;<br /><br />　　#mainMenu&nbsp;{&nbsp;<br />　　background:url(../images/bg.gif);&nbsp;<br />　　border:1px&nbsp;solid&nbsp;#333;&nbsp;<br />　　width:100%;&nbsp;<br />　　height:30px;&nbsp;<br />　　overflow:hidden;&nbsp;<br />　　}&nbsp;<br />　　#subMenu&nbsp;{&nbsp;<br />　　background:url(../images/bg.gif);&nbsp;<br />　　border:1px&nbsp;solid&nbsp;#333;&nbsp;<br />　　width:100%;&nbsp;<br />　　height:20px;&nbsp;<br />　　overflow:hidden;&nbsp;<br />　　}&nbsp;<br /><br />　　两个不同类的属性值有重复之处，刚可以缩写为：&nbsp;<br /><br />　　#mainMenu,#subMenu&nbsp;{&nbsp;<br />　　background:url(../images/bg.gif);&nbsp;<br />　　border:1px&nbsp;solid&nbsp;#333;&nbsp;<br />　　width:100%;&nbsp;<br />　　overflow:hidden;&nbsp;<br />　　}&nbsp;<br />　　#mainMenu&nbsp;{height:30px;}&nbsp;<br />　　#subMenu&nbsp;{height:20px;}&nbsp;<br /><br />　　2、同一属性的缩写：&nbsp;<br /><br />　　同一属性根据它的属性值也可以进行简写，如：&nbsp;<br /><br />　　.search&nbsp;{&nbsp;<br />　　background-color:#333;&nbsp;<br />　　background-image:url(../images/icon.gif);&nbsp;<br />　　background-repeat:&nbsp;no-repeat;&nbsp;<br />　　background-position:50%&nbsp;50%;&nbsp;<br />　　}&nbsp;<br />　　.search&nbsp;{&nbsp;<br />　　background:#333&nbsp;url(../images/icon.gif)&nbsp;no-repeat&nbsp;50%&nbsp;50%;&nbsp;<br />　　}&nbsp;<br /><br />　　3、内外侧边框的缩写：&nbsp;<br /><br />　　在CSS中关于内外侧边框的距离是按照上、右、下、左的顺序来排列的，当这四个属性值不同时也可直<br /><br />接缩写，如：&nbsp;<br /><br />　　.btn&nbsp;{&nbsp;<br />　　margin-top:10px;&nbsp;<br />　　margin-right:8px;&nbsp;<br />　　margin-bottom:12px;&nbsp;<br />　　margin-left:5px;&nbsp;<br />　　padding-top:10px;&nbsp;<br />　　padding-right:8px;&nbsp;<br />　　padding-bottom:12px;&nbsp;<br />　　padding-left:8px;&nbsp;<br />　　}&nbsp;<br /><br />　　则可缩写为：&nbsp;<br /><br />　　.btn&nbsp;{&nbsp;<br />　　Margin:10px&nbsp;8px&nbsp;12px&nbsp;5px;&nbsp;<br />　　Padding:10px&nbsp;8px&nbsp;12px&nbsp;5px;&nbsp;<br />　　}&nbsp;<br /><br />　　而如果当上边与下边、左边与右边的边框属性值相同时，则属性值可以直接缩写为两个，如：&nbsp;<br /><br />　　.btn&nbsp;{&nbsp;<br />　　margin-top:10px;&nbsp;<br />　　margin-right:5px;&nbsp;<br />　　margin-bottom:10px;&nbsp;<br />　　margin-left:5px;&nbsp;<br />　　}&nbsp;<br /><br />　　缩写为：&nbsp;<br /><br />　　.btn&nbsp;{margin:10px&nbsp;5px;}&nbsp;<br /><br />　　而当上下左右四个边框的属性值都相同时，则可以直接缩写成一个，如：&nbsp;<br /><br />　　.btn&nbsp;{&nbsp;<br />　　margin-top:10px;&nbsp;<br />　　margin-right:10px;&nbsp;<br />　　margin-bottom:10px;&nbsp;<br />　　margin-left:10px;&nbsp;<br />　　}&nbsp;<br /><br />　　缩写为：&nbsp;<br /><br />　　.btn{margin:10px;}&nbsp;<br /><br />　　4、颜色值的缩写：&nbsp;<br /><br />　　当RGB三个颜色值数值相同时，可缩写颜色值代码。如：&nbsp;<br /><br />　　.menu&nbsp;{&nbsp;color:#ff3333;}&nbsp;<br /><br />　　可缩写为:&nbsp;<br /><br />　　.menu&nbsp;{color:#f33;}&nbsp;<br /><br />四．hack书写规范&nbsp;<br /><br />　　因为不同浏览器对W3C标准的支持不一样，各个浏览器对于页面的解释呈视也不尽相同，比如IE在很多<br /><br />情况下就与FF存在3px的差距，对于这些差异性，就需要利用css&nbsp;的hack来进行调整，当然在没有必要的情<br /><br />况下，最好不要写hack来进行调整，避免因为hack而导致页面出现问题。&nbsp;<br /><br />　　1、&nbsp;IE6、IE7、Firefox之间的兼容写法：&nbsp;<br /><br />　　写法一：&nbsp;<br /><br />　　IE都能识别*;标准浏览器(如FF)不能识别*；&nbsp;<br />　　IE6能识别*，但不能识别&nbsp;!important,&nbsp;<br />　　IE7能识别*，也能识别!important;&nbsp;<br />　　FF不能识别*，但能识别!important;&nbsp;<br />　　根据上述表达，同一类/ID下的CSS&nbsp;　hack可写为：&nbsp;<br />　　.searchInput&nbsp;{&nbsp;<br />　　background-color:#333;/*三者皆可*/&nbsp;<br />　　*background-color:#666　!important;&nbsp;/*仅IE7*/&nbsp;<br />　　*background-color:#999;&nbsp;/*仅IE6及IE6以下*/&nbsp;<br />　　}&nbsp;<br />　　一般三者的书写顺序为：FF、IE7、IE6.&nbsp;<br /><br />　　写法二：&nbsp;<br /><br />　　IE6可识别“_”，而IE7及FF皆不能识别，所以当只针对IE6与IE7及FF之间的区别时，可这样书写：&nbsp;<br />　　.searchInput&nbsp;{&nbsp;<br />　　background-color:#333;/*通用*/&nbsp;<br />　　_background-color:#666;/*仅IE6可识别*/&nbsp;<br />　　}&nbsp;<br /><br />　　写法三：&nbsp;<br /><br />　　*+html&nbsp;与&nbsp;*html&nbsp;是IE特有的标签,&nbsp;Firefox&nbsp;暂不支持。&nbsp;<br />　　.searchInput&nbsp;{background-color:#333;}&nbsp;<br />　　*html&nbsp;.searchInput&nbsp;{background-color:#666;}/*仅IE6*/&nbsp;<br />　　*+html&nbsp;.searchInput&nbsp;{background-color:#555;}/*仅IE7*/&nbsp;<br /><br />　　屏蔽IE浏览器：&nbsp;<br /><br />　　select是选择符，根据情况更换。第二句是MAC上safari浏览器独有的。&nbsp;<br /><br />　　*:lang(zh)&nbsp;select&nbsp;{font:12px&nbsp;!important;}&nbsp;/*FF的专用*/&nbsp;<br />　　select:empty&nbsp;{font:12px&nbsp;!important;}&nbsp;/*safari可见*/&nbsp;<br /><br />　　IE6可识别：&nbsp;<br /><br />　　这里主要是通过CSS注释分开一个属性与值，注释在冒号前。&nbsp;<br /><br />　　select&nbsp;{&nbsp;display&nbsp;/*IE6不识别*/:none;}&nbsp;<br /><br />　　IE的if条件hack写法：&nbsp;<br /><br />　　所有的IE可识别：&nbsp;<br /><br />　　&nbsp;Only&nbsp;IE&nbsp;<br />　　只有IE5.0可以识别:&nbsp;<br />　　&nbsp;Only&nbsp;IE&nbsp;5.0&nbsp;<br />　　IE5.0包换IE5.5都可以识别:&nbsp;<br />　　&nbsp;Only&nbsp;IE&nbsp;5.0+&nbsp;<br />　　仅IE6可识别:&nbsp;<br />　　&nbsp;Only&nbsp;IE&nbsp;6-&nbsp;<br />　　IE6以及IE6以下的IE5.x都可识别:&nbsp;<br />　　&nbsp;Only&nbsp;IE&nbsp;6/+&nbsp;<br />　　仅IE7可识别:&nbsp;<br />　　&nbsp;Only&nbsp;IE&nbsp;7/-&nbsp;<br /><br />　　2、清除浮动：&nbsp;<br /><br />　　在Firefox中，当子级都为浮动时，那么父级的高度就无法完全的包住整个子级，那么这时用这个清除<br /><br />浮动的HACK来对父级做一次定义，那么就可以解决这个问题。&nbsp;<br /><br />　　select:after&nbsp;{&nbsp;<br />　　content:”.”;&nbsp;<br />　　display:block;&nbsp;<br />　　height:0;&nbsp;<br />　　clear:both;&nbsp;<br />　　visibility:hidden;&nbsp;<br />　　}&nbsp;<br /><br />中国数据8003(4181628)小徐为您整理;<br />]]>
      </summary>
      <category term="" label="HTML/CSS" scheme="http://dev.mo.cn/cat_diary_8.html" />
   </entry>
   <entry>
      <title type="html">java初学者到精通需要掌握的知识</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_125.html" />
      <updated>2008-9-7 23:20:43</updated>
      <published>2008-9-7 23:20:43</published>
      <id>http://dev.mo.cn/article_125.html</id>
      <summary type="html">
      <![CDATA[一、学习DreamWaveMX中文版的网页设计技术。<br /><br />HTML网页设计，这是最基本的。学习XML的一些基本知识。初步掌握一些JSCRIPT的应用。<br /><br /><br /><br />二、学习JAVA语言。<br /><br />学习Java语言的第一步是安装好JDK，JDK的环境变量的配置，至于如何配置JDK的环境变量，网上关于这样的文章很多，你可以搜索一下，这里就不多说。配置好环境变量以后，写一个Hello&nbsp;World的小程序测试一下JDK是否已安装成功。<br /><br /><br /><br />环境变量配置成功以后就可以着手学习Java的语法了，先找一本系统的java程序设计的书，开始最好不要用eclipse等之类的高度集成的IDE环境，用文本编辑器配合JDK就行了，这样助你理解下列几个基础概念：path，class_path，package&nbsp;,并熟悉基本命令：<br /><br /><br /><br />JDK的最重要命令行工具：&nbsp;<br /><br />java：&nbsp;启动JVM执行class&nbsp;<br /><br />javac：&nbsp;Java编译器&nbsp;<br /><br />jar：&nbsp;Java打包工具&nbsp;<br /><br />javadoc：&nbsp;Java文档生成器&nbsp;<br /><br />这些命令行必须要非常熟悉。对于这些命令的学习，JDK&nbsp;Documentation上有详细的文档。下载和你的JDK版本一致的API帮助。<br /><br /><br /><br />三、是学习Java的面向对象的编程语言的特性的地方，比如继承，构造器，抽象类，接口，方法的多态，重载，覆盖，Java的异常处理机制。可以参照《Thinking&nbsp;in&nbsp;java》这本书，对面向对象的讲解很透彻。<br /><br /><br /><br />四、就是开始熟悉Java的类库，Java的基础类库非常多，但是真正对于我们来说最核心的只有4个，分别是&nbsp;&nbsp;<br /><br />java.lang.*;&nbsp;&nbsp;<br /><br />java.io.*;&nbsp;&nbsp;<br /><br />java.util.*;&nbsp;&nbsp;<br /><br />java.sql.*;&nbsp;&nbsp;<br /><br />要知道包有哪些方面的类构成的，这些类的用途是什么，最核心的几个类分别是完成什么功能的。<br /><br /><br /><br />五、JDK&nbsp;Documentation。通过上面的学习，如果学的比较扎实的话，就打好了Java的基础了，接着要学习Documentation里面除了上面4个包之外的其他一些比较有用处的类。相信进展到这一步，Java的自学能力已经被培养出来了，可以到了直接学习Documentation的水平了。除了要做GUI编程之外，JDK里面其他会有用处的包是这些：&nbsp;&nbsp;<br /><br />java.text.*;&nbsp;&nbsp;<br /><br />java.net.*;&nbsp;&nbsp;<br /><br />javax.naming.*;&nbsp;&nbsp;<br /><br />这些包里面真正用的比较多的类其实很少，只有几个，所以不需要花很多时间。<br /><br /><br /><br />六、Java&nbsp;Web&nbsp;编程<br /><br />学习java&nbsp;web&nbsp;编程之前要先下载安装应用服务器(App&nbsp;Server)，比较常用的应用服务器(App&nbsp;Server)有Tomcat&nbsp;、BEA&nbsp;Weblogic、IBM&nbsp;Webshpere、Jboss&nbsp;。<br /><br /><br /><br />以Tomcat为例，下载安装Tomcat以后设置两个环境变量：&nbsp;<br /><br />JAVA_HOME=C:\j2sdk1.4.2&nbsp;<br /><br />CATALINA_HOME=D:\tomcat4&nbsp;(你的Tomcat安装目录)<br /><br /><br /><br />Java的Web应用至少需要安装JDK和一个web容器（例如Tomcat），以及一个多用户数据库，Web应用至少分为三层：&nbsp;<br /><br />Browser层：浏览器显示用户页面&nbsp;<br /><br />Web层：运行Servlet/JSP&nbsp;<br /><br />DB层：后端数据库，向Java程序提供数据访问服务&nbsp;<br /><br /><br /><br />七、学习J2EE的基本程序设计。<br /><br /><br /><br />（1）首先学习JSP动态网页设计。掌握JSP、JAVABEANS、JDBC、JSTL等技术，最好以TOMCAT作为实验环境。因为它影响力大，虽然性能不怎么的，很多JSP技术讨论都是以它为背景。<br /><br />（2）学习EJB的程序设计思想。在学习EJB之前要学习对象序列化和RMI，RMI是EJB的基础。接着学习JMS和EJB，对于EJB来说，最关键是要理解EJB是如何通过RMI来实现对远端对象的调用的，以及在什么情况下要用到EJB。<br /><br /><br /><br />八、学习“设计模式”。<br /><br /><br /><br />可以参照《java设计模式》，这本书学习。<br /><br /><br /><br />九、学习一些经典框架的应用：<br /><br />（1）struts1.1、webwork2<br /><br />（2）Hibernate<br /><br />（3）Ibatis/DAO框架<br /><br />（4）Spring<br /><br /><br /><br />十、分析一些经典的应用系统：<br /><br />Jive、XPetstore、JPetstore等。<br /><br /><br /><br />另外在java私塾的网站上有一套图书进销存项目的视频包括源码，从思路上引导学生如何去做项目，供各位自学的同学参考！大家可以到java私塾的网站上免费下载：www.javass.com<br /><br />&nbsp;<br /><br />]]>
      </summary>
      <category term="" label="其他" scheme="http://dev.mo.cn/cat_diary_18.html" />
   </entry>
   <entry>
      <title type="html">CSS常用技巧十则</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_124.html" />
      <updated>2008-9-7 23:16:38</updated>
      <published>2008-9-7 23:16:38</published>
      <id>http://dev.mo.cn/article_124.html</id>
      <summary type="html">
      <![CDATA[1.&nbsp;Block和inline元素对比&nbsp;<br /><br />所有的HTML元素都属于block和inline之一。&nbsp;<br />block元素的特点是：&nbsp;<br />总是在新行上开始；&nbsp;<br />高度，行高以及顶和底边距都可控制；&nbsp;<br />宽度缺省是它的容器的100%，除非设定一个宽度&nbsp;<br />&lt;div&gt;,&nbsp;&lt;p&gt;,&nbsp;&lt;h1&gt;,&nbsp;&lt;form&gt;,&nbsp;&lt;ul&gt;&nbsp;和&nbsp;&lt;li&gt;是块元素的例子。&nbsp;<br /><br />相反地，inline元素的特点是：&nbsp;<br />和其他元素都在一行上；&nbsp;<br />高，行高及顶和底边距不可改变；&nbsp;<br />宽度就是它的文字或图片的宽度，不可改变。&nbsp;<br />&lt;span&gt;,&nbsp;&lt;a&gt;,&nbsp;&lt;label&gt;,&nbsp;&lt;input&gt;,&nbsp;&lt;img&gt;,&nbsp;&lt;strong&gt;&nbsp;和&lt;em&gt;是inline元素的例子。&nbsp;<br /><br />用display:&nbsp;inline&nbsp;或display:&nbsp;block命令就可以改变一个元素的这一特性。什么时候需要改变这一属性<br /><br />呢？&nbsp;<br />让一个inline元素从新行开始；&nbsp;<br />让块元素和其他元素保持在一行上；&nbsp;<br />控制inline元素的宽度（对导航条特别有用）；&nbsp;<br />控制inline元素的高度；&nbsp;<br />无须设定宽度即可为一个块元素设定与文字同宽的背景色。&nbsp;<br /><br />2.&nbsp;再来一个box黑客方法&nbsp;<br /><br />之所以有这么多box黑客方法，是因为IE在6之前对box的理解跟别人都不一样，它的宽度要包含边线宽和空<br /><br />白。要想让IE5等同其他浏览器保持一致，可以用CSS的方法：&nbsp;<br /><br /><br />padding:&nbsp;2em;&nbsp;<br />border:&nbsp;1em&nbsp;solid&nbsp;green;&nbsp;<br />width:&nbsp;20em;&nbsp;<br />width/**/:/**/&nbsp;14em;&nbsp;<br /><br />第一个宽度所有浏览器都认得，但IE5.x不认得第2行的宽度设置，只因为那一行上有空白的注释符号（多<br /><br />么蠢的语法分析！），所以IE5.x就用20减掉一些空白，而其他浏览器会用14这个宽度，因为它是第2行，<br /><br />会覆盖掉第1行。&nbsp;<br /><br />3.&nbsp;页面的最小宽度&nbsp;<br /><br />min-width是个非常方便的CSS命令，它可以指定元素最小也不能小于某个宽度，这样就能保证排版一直正<br /><br />确。但IE不认得这个，而它实际上把width当做最小宽度来使。为了让这一命令在IE上也能用，可以把一个<br /><br />&lt;div&gt;&nbsp;放到&nbsp;&lt;body&gt;&nbsp;标签下，然后为div指定一个类：&nbsp;<br /><br />&lt;body&gt;&nbsp;<br />&lt;div&nbsp;class="container“&gt;&nbsp;<br /><br />然后CSS这样设计：&nbsp;<br /><br />#container&nbsp;<br />{&nbsp;<br />min-width:&nbsp;600px;&nbsp;<br />width:expression(document.body.clientWidth&nbsp;&lt;&nbsp;600?&nbsp;"600px":&nbsp;"auto"&nbsp;);&nbsp;<br />}&nbsp;<br /><br />第一个min-width是正常的；但第2行的width使用了Javascript，这只有IE才认得，这也会让你的HTML文档<br /><br />不太正规。它实际上通过Javascript的判断来实现最小宽度。&nbsp;<br /><br /><br />同样的办法也可以为IE实现最大宽度：&nbsp;<br /><br />#container&nbsp;<br />{&nbsp;<br />min-width:&nbsp;600px;&nbsp;<br />max-width:&nbsp;1200px;&nbsp;<br />width:expression(document.body.clientWidth&nbsp;&lt;&nbsp;600?&nbsp;"600px"&nbsp;:&nbsp;document.body.clientWidth&nbsp;&gt;&nbsp;1200?&nbsp;<br /><br />”1200px“&nbsp;:&nbsp;”auto";&nbsp;<br />}&nbsp;<br /><br />4.&nbsp;IE与宽度和高度的问题&nbsp;<br /><br />IE不认得min-这个定义，但实际上它把正常的width和height当作有min的情况来使。这样问题就大了，如<br /><br />果只用宽度和高度，正常的浏览器里这两个值就不会变，如果只用min-width和min-height的话，IE下面根<br /><br />本等于没有设置宽度和高度。&nbsp;<br /><br />比如要设置背景图片，这个宽度是比较重要的。要解决这个问题，可以这样：&nbsp;<br /><br />.box&nbsp;<br />{&nbsp;<br />width:&nbsp;80px;&nbsp;<br />height:&nbsp;35px;&nbsp;<br />}&nbsp;<br /><br />html&gt;body&nbsp;.box&nbsp;<br />{&nbsp;<br />width:&nbsp;auto;&nbsp;<br />height:&nbsp;auto;&nbsp;<br />min-width:&nbsp;80px;&nbsp;<br />min-height:&nbsp;35px;&nbsp;<br />}&nbsp;<br /><br />所有的浏览器都可以使用第一个box设置，但IE不认得第2段设置，因为其中用到了子选择器命令。第2个设<br /><br />置更特殊些，所以它会覆盖掉第1个设置。&nbsp;<br /><br />5.&nbsp;字体变形命令&nbsp;<br /><br />text-transform&nbsp;命令很有用，它有3个值：text-transform:&nbsp;uppercase,&nbsp;text-transform:&nbsp;lowercase&nbsp;和&nbsp;<br /><br />text-transform:&nbsp;capitalize。第1个会把文字变成全大写，第2个变成全小写，第3个变成首字母大写。这<br /><br />对拼音文字非常有用，即使输入时有大小写错误，在网页上也看不到。&nbsp;<br /><br />6.&nbsp;IE中图片文字消失的问题&nbsp;<br /><br />有时会遇到文字或背景图突然消失的问题，刷新一下又出现了，这在靠近漂浮元素时更容易发生（注：没<br /><br />见过）。此时，可以为消失的元素设定：&nbsp;position:&nbsp;relative&nbsp;，如果不行，再考虑为这些元素指定一个<br /><br />宽度试试。&nbsp;<br /><br />7.&nbsp;不可见文字&nbsp;<br /><br />不论因为何种原因希望某些网页文字不在浏览器中显示，比如为了打印或为了小屏幕而让某些文字不显示<br /><br />，都可以用&nbsp;display:&nbsp;none&nbsp;。这非常简单，但有时对某些人这有点没用，他们能去掉这个控制，这时就要<br /><br />用到：&nbsp;position:&nbsp;absolute;&nbsp;left:&nbsp;-9000px&nbsp;。&nbsp;<br /><br />这实际上是把文字指定在页面以外显示。&nbsp;<br /><br />8.&nbsp;为手持设备设计专门的CSS&nbsp;<br /><br />也就是手机／PDA等小屏幕用户，可以专门设计一个CSS来让网页显示更舒服些。为此，可以把浏览器窗口<br /><br />调整到150点宽来看效果。指定专门的手持设备的CSS的语法是：&nbsp;<br /><br />&lt;link&nbsp;type="text/css"&nbsp;rel="stylesheet"&nbsp;href="handheldstyle.css"&nbsp;media="handheld"&nbsp;/&gt;&nbsp;<br /><br />也可以阅读专门的手持设备可用性。&nbsp;<br /><br />9.&nbsp;3D效果的按钮&nbsp;<br /><br />以前要想制作带有3D效果，并且点击下去还会变化的按钮，就得用图片替换的方法，现在CSS就可以了：&nbsp;<br /><br />a&nbsp;<br />{&nbsp;<br />display:&nbsp;block;&nbsp;<br />border:&nbsp;1px&nbsp;solid;&nbsp;<br />border-color:&nbsp;#aaa&nbsp;#000&nbsp;#000&nbsp;#aaa;&nbsp;<br />width:&nbsp;8em;&nbsp;<br />background:&nbsp;#fc0;&nbsp;<br />}&nbsp;<br /><br />a:hover&nbsp;<br />{&nbsp;<br />position:&nbsp;relative;&nbsp;<br />top:&nbsp;1px;&nbsp;<br />left:&nbsp;1px;&nbsp;<br />border-color:&nbsp;#000&nbsp;#aaa&nbsp;#aaa&nbsp;#000;&nbsp;<br />}&nbsp;<br /><br />至于效果，还可以自己调整了。&nbsp;<br /><br />10.&nbsp;在不同页面上使用同样的导航代码&nbsp;<br /><br />许多网页上都有导航菜单，当进入某页时，菜单上相应这一项就应该变灰，而其他页亮起来。一般要实现<br /><br />这个效果，需要写程序或专门为每一页做设计，现在靠CSS就可以实现这个效果。&nbsp;<br /><br />首先，在导航代码中使用CSS类：&nbsp;<br /><br />&lt;ul&gt;&nbsp;<br />&lt;li&gt;&lt;a&nbsp;href="#"&nbsp;class="home"&gt;Home&lt;/a&gt;&lt;/li&gt;&nbsp;<br />&lt;li&gt;&lt;a&nbsp;href="#"&nbsp;class="about"&gt;About&nbsp;us&lt;/a&gt;&lt;/li&gt;&nbsp;<br />&lt;li&gt;&lt;a&nbsp;href="#"&nbsp;class="contact"&gt;Contact&nbsp;us&lt;/a&gt;&lt;/li&gt;&nbsp;<br />&lt;/ul&gt;&nbsp;<br /><br />然后分别为每一页的Body指定一个id，和上面类同名。如&lt;body&nbsp;id="contact"&gt;。&nbsp;<br /><br />然后设计CSS如下：&nbsp;<br /><br />#home&nbsp;.home,&nbsp;#about&nbsp;.about,&nbsp;#about&nbsp;.about&nbsp;<br />{&nbsp;<br />commands&nbsp;for&nbsp;highlighted&nbsp;navigation&nbsp;go&nbsp;here&nbsp;<br />}&nbsp;<br /><br />这里，当id设为home时，.home就会起作用，也就是class设为home的那一行导航条就会显示出特殊效果来<br /><br />。其他页也是如此。<br /><br />中国数据8003(4181628)小徐为您整理;<br /><br />]]>
      </summary>
      <category term="" label="HTML/CSS" scheme="http://dev.mo.cn/cat_diary_8.html" />
   </entry>
   <entry>
      <title type="html">Asp利用xmlhttp组件抓取页面</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_123.html" />
      <updated>2008-9-5 19:11:59</updated>
      <published>2008-9-5 19:11:59</published>
      <id>http://dev.mo.cn/article_123.html</id>
      <summary type="html">
      <![CDATA[简单的Asp抓取页面代码，取页面编码的正则可能写的不太好，呵呵~&nbsp;<br />和大家分享了~~&nbsp;<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;%<br />on&nbsp;error&nbsp;resume&nbsp;next<br />time1=timer<br />dim&nbsp;reg,vUrl,VBody,temp1,temp2,code,time1,time2,title<br />vUrl=trim(request.form("url"))<br />reg="\&lt;meta.+&nbsp;charset=&nbsp;{0,}([^\""|&nbsp;|\&gt;|\/]*).+\/{0,1}\&gt;"<br />if&nbsp;vUrl&lt;&gt;""&nbsp;then<br />&nbsp;&nbsp;VBody=GetResStr(trim(request.form("url")))<br />&nbsp;&nbsp;temp1=VBody:temp2=VBody<br />&nbsp;&nbsp;code=GetCode(temp1,reg)<br />&nbsp;&nbsp;title=GetCode(temp2,"\&lt;title\&gt;(.*)\&lt;\/title\&gt;")<br />else<br />&nbsp;&nbsp;vUrl="http://"<br />end&nbsp;if<br />time2=timer<br />%&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;meta&nbsp;http-equiv="Content-Type"&nbsp;content="text/html;&nbsp;charset=gb2312"&gt;<br />&lt;title&gt;抓取页面&lt;/title&gt;<br />&lt;%if&nbsp;err.number&lt;&gt;0&nbsp;then%&gt;<br />&lt;script&nbsp;language="javascript"&gt;alert('发生错误!\n您输入的URL为\"&lt;%=vUrl%&gt;\"\n请检查您输入的URL是否合法!');&lt;/script&gt;<br />&lt;%end&nbsp;if%&gt;<br />&lt;/head&gt;<br />&lt;body&nbsp;style="font-size:12px;margin:20px&nbsp;0&nbsp;0&nbsp;20px;"&gt;<br />&lt;form&nbsp;name="geturl"&nbsp;action="test.asp"&nbsp;method="post"&gt;<br />请输入合法URL(必须以http://开头):&lt;br&nbsp;/&gt;&lt;input&nbsp;name="url"&nbsp;type="text"&nbsp;size=60&nbsp;value="&lt;%=vUrl%&gt;"/&gt;&lt;br&nbsp;/&gt;<br />&lt;input&nbsp;type="submit"&nbsp;value="抓取"&nbsp;/&gt;&lt;br&nbsp;/&gt;<br />&lt;/form&gt;<br />所用时间:&lt;font&nbsp;color=green&gt;&lt;%=formatnumber((time2-time1)*1000,2)%&gt;MS&lt;/font&gt;&nbsp;&lt;br&nbsp;/&gt;<br />页面标题:&lt;font&nbsp;color=green&gt;&lt;%=title%&gt;&lt;/font&gt;&nbsp;页面编码:&lt;font&nbsp;color=green&gt;&lt;%=code%&gt;&lt;/font&gt;&nbsp;&lt;br&nbsp;/&gt;<br />&lt;textarea&nbsp;cols=150&nbsp;rows=30&gt;&lt;%=VBody%&gt;&lt;/textarea&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br /><br />&lt;%&nbsp;<br />function&nbsp;GetResStr(URL)<br />dim&nbsp;ResBody,ResStr,PageCode<br />Set&nbsp;Http=server.createobject("msxml2.serverxmlhttp.3.0")&nbsp;<br />Http.setTimeouts&nbsp;10000,&nbsp;10000,&nbsp;10000,&nbsp;10000&nbsp;<br />Http.open&nbsp;"GET",URL,False&nbsp;<br />Http.Send()&nbsp;<br />If&nbsp;Http.Readystate&nbsp;=4&nbsp;Then&nbsp;<br />&nbsp;&nbsp;If&nbsp;Http.status=200&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;ResStr=http.responseText<br />&nbsp;&nbsp;&nbsp;&nbsp;ResBody=http.responseBody<br />&nbsp;&nbsp;&nbsp;&nbsp;PageCode=GetCode(ResStr,reg)<br />&nbsp;&nbsp;&nbsp;&nbsp;GetResStr=BytesToBstr(http.responseBody,PageCode)<br />&nbsp;&nbsp;End&nbsp;If&nbsp;<br />End&nbsp;If&nbsp;<br />End&nbsp;Function<br /><br />'函数名:BytesToBstr<br />'作用:转换二进制数据为字符<br />'参数:Body-二进制数据,Cset-文本编码方式<br />Function&nbsp;BytesToBstr(Body,Cset)&nbsp;<br />&nbsp;&nbsp;Dim&nbsp;Objstream&nbsp;<br />&nbsp;&nbsp;Set&nbsp;Objstream&nbsp;=&nbsp;Server.CreateObject("adodb.stream")&nbsp;<br />&nbsp;&nbsp;objstream.Type&nbsp;=&nbsp;1&nbsp;<br />&nbsp;&nbsp;objstream.Mode&nbsp;=3&nbsp;<br />&nbsp;&nbsp;objstream.Open&nbsp;<br />&nbsp;&nbsp;objstream.Write&nbsp;body&nbsp;<br />&nbsp;&nbsp;objstream.Position&nbsp;=&nbsp;0&nbsp;<br />&nbsp;&nbsp;objstream.Type&nbsp;=&nbsp;2&nbsp;<br />&nbsp;&nbsp;objstream.Charset&nbsp;=&nbsp;Cset&nbsp;<br />&nbsp;&nbsp;BytesToBstr&nbsp;=&nbsp;objstream.ReadText&nbsp;<br />&nbsp;&nbsp;objstream.Close&nbsp;<br />&nbsp;&nbsp;set&nbsp;objstream&nbsp;=&nbsp;nothing&nbsp;<br />End&nbsp;Function<br />&nbsp;<br />'函数名:GetCode<br />'作用:转换二进制为字符<br />'参数:str-待查询字符串,regstr-正则表达式<br />Function&nbsp;GetCode(str,regstr)<br />Dim&nbsp;Reg<br />set&nbsp;Reg=&nbsp;new&nbsp;RegExp<br />Reg.IgnoreCase&nbsp;=&nbsp;True<br />Reg.MultiLine&nbsp;=&nbsp;True<br />Reg.Pattern&nbsp;=regstr<br />Set&nbsp;Cols&nbsp;=&nbsp;Reg.Execute(str)<br />str=Cols(0).SubMatches(0)<br />GetCode=str<br />end&nbsp;function<br />%&gt;&nbsp;</div></div>]]>
      </summary>
      <category term="" label="AJAX" scheme="http://dev.mo.cn/cat_diary_2.html" />
   </entry>
   <entry>
      <title type="html">艾恩ASP无组件上传类8.9.5简单示例</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_122.html" />
      <updated>2008-9-5 13:28:04</updated>
      <published>2008-9-5 13:28:04</published>
      <id>http://dev.mo.cn/article_122.html</id>
      <summary type="html">
      <![CDATA[保存下面代码到index.asp文件，在同一目录下建立files文件夹一保存上传的文件；<br />下载上传类upload_class.asp，也保存到同一目录(类下载地址：<a href="http://dev.mo.cn/detial.asp?id=143" target="new"><span style="color:DarkRed;">http://dev.mo.cn/detial.asp?id=143</span></a>)；<br />运行index.asp.<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;!--#include&nbsp;file="Upload_class.asp"--&gt;<br />&lt;!DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN"&nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;<br />&lt;html&nbsp;xmlns="http://www.w3.org/1999/xhtml"&nbsp;xml:lang="zh-cn"&nbsp;lang="zh-cn"&gt;<br />&lt;head&gt;<br />&lt;title&gt;艾恩ASP无组件上传类8.9.5&nbsp;示例(最简单的文件上传)&lt;/title&gt;<br />&lt;style&gt;<br />body,table,textarea,span,div,a,input,pre{<br />font-family:verdana,tahoma,arial;<br />}<br />FORM&nbsp;{margin:3px;}<br />input&nbsp;{border:1px&nbsp;#bbbbbb&nbsp;solid;background-color:#ffffff;}<br />textarea&nbsp;{border:1px&nbsp;#bbbbbb&nbsp;solid;background-color:#ffffff;}<br />.iText&nbsp;{height:16px;}<br />.iFile&nbsp;{height:20px;}<br />.iButton&nbsp;{height:20px;padding:2px;background-color:#eeeeee;}<br />.iCheck&nbsp;{border:0px;}<br />&lt;/style&gt;<br />&lt;/head&gt;<br />&lt;body&nbsp;style="font-size:12px"&gt;<br />&lt;form&nbsp;name="upload"&nbsp;method="post"&nbsp;action="index.asp?act=upload"&nbsp;enctype="multipart/form-data"&gt;<br />&lt;font&nbsp;color="red"&gt;本示例演示简单的上传一个文件&lt;/font&gt;&lt;br&nbsp;/&gt;<br />&lt;font&nbsp;color="red"&gt;请填写表单并选择一个文件:&lt;/font&gt;&lt;br&nbsp;/&gt;<br />文本:&lt;input&nbsp;type="text"&nbsp;name="input1"&nbsp;size="40"&nbsp;/&gt;&lt;br&nbsp;/&gt;<br />文件:&lt;input&nbsp;class="iFile"&nbsp;id="file1"&nbsp;type="file"&nbsp;name="file1"&nbsp;size="40"&nbsp;/&gt;<br />&lt;input&nbsp;class="iButton"&nbsp;type="submit"&nbsp;value="开始上传"&nbsp;/&gt;<br />&lt;/form&gt;<br />&lt;%<br />if&nbsp;request.querystring("act")="upload"&nbsp;then<br />&nbsp;Dim&nbsp;myupload<br />'==================================================================================<br />&nbsp;set&nbsp;myupload=new&nbsp;UpLoad&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;&nbsp;&nbsp;&nbsp;|&nbsp;<br />&nbsp;myupload.SingleSize=500*1024&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'设置单文件最大上传限制为500KB,按字节计；默认为不限制&nbsp;<br />&nbsp;myupload.MaxSize=1*1024*1024&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'设置最大上传限制为1M,按字节计；默认为不限制&nbsp;|&nbsp;&nbsp;&nbsp;<br />&nbsp;myupload.Exe="rar|jpg|gif|bmp"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'设置合法扩展名,以|分割,忽略大小写&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />&nbsp;myupload.GetData()&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />'==================================================================================<br /><br />&nbsp;if&nbsp;myupload.Err&gt;0&nbsp;then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'出现错误&nbsp;如果myupload.Err&lt;=0表示正常<br />&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;myupload.Description&nbsp;'错误描述<br />&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;"input1的值:"&myupload.forms("input1")&"&lt;br&nbsp;/&gt;"<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;myupload.files.exists("file1")&nbsp;then&nbsp;'这里判断你file1是否选择了文件<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path=server.mappath("files")<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;tempCls=myupload.files("file1")<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tempCls.SaveToFile&nbsp;path,0&nbsp;'以时间+随机数字为文件名保存<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;tempCls.FileName&"上传完毕&lt;br&nbsp;/&gt;"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;"大小为:"&myupload.getsize(tempCls.Size)&"&lt;br&nbsp;/&gt;"&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;"本地路径:"&myupload.forms("file1")&"!&lt;br&nbsp;/&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;"服务器绝对路径:"&path&"\"&tempCls.FileName&"!&lt;br&nbsp;/&gt;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;"服务器相对路径:"&"files/"&tempCls.FileName&"!&lt;br&nbsp;/&gt;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;tempCls=nothing<br />&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;if<br />&nbsp;end&nbsp;if<br />&nbsp;set&nbsp;myupload=nothing&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'销毁类实例<br />end&nbsp;if<br />%&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</div></div>]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">ACCESS转SQl时注意的几个事项</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_121.html" />
      <updated>2008-9-4 14:09:07</updated>
      <published>2008-9-4 14:09:07</published>
      <id>http://dev.mo.cn/article_121.html</id>
      <summary type="html">
      <![CDATA[1.ACCESS的数据库中的自动编号类型在转化时，sql&nbsp;server并没有将它设为自动编号型，我们需在SQL创建语句中加上identity，表示自动编号！&nbsp;<br />2.转化时，跟日期有关的字段，SQL&nbsp;SERVER默认为smalldatetime型，我们最好将它变为datetime型，因为datetime型的范围比smalldatetime型大。我遇见这种情况，用smalldatetime型时，转化失败，而用datetime型时，转化成功。&nbsp;<br />3.对此两种数据库进行操作的sql语句不全相同，例如：在对ACCESS数据库进行删除纪录时用："delete&nbsp;*&nbsp;from&nbsp;user&nbsp;where&nbsp;id=10",而对SQL&nbsp;SERVER数据库进行删除是用："delete&nbsp;user&nbsp;where&nbsp;id=10".&nbsp;<br />4.日期函数不相同，在对ACCESS数据库处理中，可用date()、time()等函数，但对&nbsp;SQL&nbsp;SERVER数据库处理中，只能用datediff,dateadd等函数，而不能用date()、time()等函数。<br />5.在对ACCESS数据库处理中,sql语句中直接可以用一些VB的函数，像cstr()函数，而对SQL&nbsp;SERVER数据库处理中，却不能用。&nbsp;]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">ASP简单日历程序</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_120.html" />
      <updated>2008-9-4 13:57:24</updated>
      <published>2008-9-4 13:57:24</published>
      <id>http://dev.mo.cn/article_120.html</id>
      <summary type="html">
      <![CDATA[&lt;style&nbsp;type="text/css"&gt;<br />&lt;!--<br />a:link&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;text-decoration:&nbsp;none;<br />}<br />a:visited&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;text-decoration:&nbsp;none;<br />}<br />a:hover&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;text-decoration:&nbsp;none;<br />}<br />a:active&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;text-decoration:&nbsp;none;<br />}<br />--&gt;<br />&lt;/style&gt;<br />&lt;%<br />y=request.querystring("y")&nbsp;<br />m=request.querystring("m")&nbsp;<br />d=request.querystring("d")<br /><br />if&nbsp;y=""&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;y=year(date)<br />&nbsp;&nbsp;&nbsp;&nbsp;m=month(date)<br />&nbsp;&nbsp;&nbsp;&nbsp;d=day(date)<br />end&nbsp;if<br /><br />call&nbsp;blogdate(y,m,d)<br /><br />'=====================以年月日为参数的显示==============================================<br />sub&nbsp;blogdate(y,m,d)&nbsp;&nbsp;&nbsp;'<br />str1="&nbsp;&nbsp;&nbsp;当前的日期是"&y&"年"&m&"月"&d&"日&nbsp;&nbsp;&nbsp;"&nbsp;&nbsp;&nbsp;'得到当前日期的年月日<br />nowdate=y&"-"&m&"-"&d<br />lastdate=dateadd("m",-1,nowdate)<br />lasty=year(lastdate)<br />lastm=month(lastdate)<br />nextdate=dateadd("m",1,nowdate)<br />nexty=year(nextdate)<br />nextm=month(nextdate)<br />str1=str1&"&lt;a&nbsp;href="&request.servervariables("path_info")&"?y="&lasty&"&m="&lastm&"&d=1"&"&gt;上一月&lt;/a&gt;&nbsp;"&nbsp;<br />str1=str1&"&lt;a&nbsp;href="&request.servervariables("path_info")&"?y="&nexty&"&m="&nextm&"&d=1"&"&gt;下一月&lt;/a&gt;&nbsp;"&nbsp;<br />str1=str1&"&lt;a&nbsp;href="&request.servervariables("path_info")&"&gt;返回今日&lt;/a&gt;"<br />response.write&nbsp;str1<br />thismonth=y&"-"&m&"-1"&nbsp;&nbsp;&nbsp;&nbsp;'当前月的第一天<br />nextmonth=dateadd("m",1,thismonth)&nbsp;&nbsp;'下个月的第一天<br />num=datediff("d",thismonth,nextmonth)&nbsp;&nbsp;'当前月的天数<br />firstday=weekday(thismonth)-1&nbsp;&nbsp;&nbsp;'得到当前月第一天的星期<br />'call&nbsp;displaydate(firstday,num)<br />Response.Write&nbsp;"&lt;table&nbsp;border=1&nbsp;width=""40%""&nbsp;&nbsp;style=""border-collapse:collapse""&gt;"&nbsp;&&nbsp;vbCrlf<br />Response.Write&nbsp;"&lt;tr&gt;"&nbsp;&&nbsp;vbCrlf<br />Response.Write&nbsp;"&lt;td&nbsp;align=""center""&gt;星期日&lt;/td&gt;"&nbsp;&&nbsp;vbCrlf<br />Response.Write&nbsp;"&lt;td&nbsp;align=""center""&gt;星期一&lt;/td&gt;"&nbsp;&&nbsp;vbCrlf<br />Response.Write&nbsp;"&lt;td&nbsp;align=""center""&gt;星期二&lt;/td&gt;"&nbsp;&&nbsp;vbCrlf<br />Response.Write&nbsp;"&lt;td&nbsp;align=""center""&gt;星期三&lt;/td&gt;"&nbsp;&&nbsp;vbCrlf<br />Response.Write&nbsp;"&lt;td&nbsp;align=""center""&gt;星期四&lt;/td&gt;"&nbsp;&&nbsp;vbCrlf<br />Response.Write&nbsp;"&lt;td&nbsp;align=""center""&gt;星期五&lt;/td&gt;"&nbsp;&&nbsp;vbCrlf<br />Response.Write&nbsp;"&lt;td&nbsp;align=""center""&gt;星期六&lt;/td&gt;"&nbsp;&&nbsp;vbCrlf<br />Response.Write&nbsp;"&lt;/tr&gt;"&nbsp;&&nbsp;vbCrlf<br />'需要参数：当前月第一天的星期firstday，当前月的天数num<br />for&nbsp;n=1&nbsp;to&nbsp;6<br />response.write&nbsp;"&lt;tr&gt;"<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i=1&nbsp;to&nbsp;7<br />&nbsp;&nbsp;&nbsp;&nbsp;thisday=0<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;i&gt;firstday&nbsp;then&nbsp;thisday=i-firstday<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;n&gt;1&nbsp;then&nbsp;thisday=7*(n-1)+i-firstday<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;thisday&gt;num&nbsp;then&nbsp;thisday=0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;thisday=0&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display="&nbsp;"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display="&lt;a&nbsp;href="&request.servervariables("path_info")&"?y="&y&"&m="&m&"&d="&thisday&"&gt;"&thisday&"&lt;/a&gt;"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;if<br />&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;"&lt;td&nbsp;align=""center""&gt;"&display&"&lt;/td&gt;"<br />&nbsp;&nbsp;&nbsp;&nbsp;next<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;n=5&nbsp;and&nbsp;(thisday=num&nbsp;or&nbsp;thisday=0)&nbsp;&nbsp;then&nbsp;n=n+1<br />response.write&nbsp;"&lt;/tr&gt;"<br />next<br />Response.Write&nbsp;"&lt;/table&gt;"&nbsp;&&nbsp;vbCrlf<br />end&nbsp;sub<br />'===================================================================<br />%&gt;<br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">关于ASP中脚本执行顺序的最最最健全的讲解</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_119.html" />
      <updated>2008-9-1 20:55:13</updated>
      <published>2008-9-1 20:55:13</published>
      <id>http://dev.mo.cn/article_119.html</id>
      <summary type="html">
      <![CDATA[　　如果机房马上要关门了，或者你急着要和MM约会，请直接跳到第四个自然段。<br /><br />　　以下叙述的脚本包括服务器端脚本和客户端的脚本，服务器端脚本指在服务器上运行的那部分脚本，比如常见的Response.Write显然是在服务器上运行的，服务器端脚本可以使用VBScript和JScript语言书写，在本文中全部使用VBScript，Jscript一个道理。<br />　　客户端脚本也可以认为包括VBScript和JavaScript两种语言，是在客户端浏览器上运行的脚本语言。比如我们访问一个网页，弹出一个消息框，这个就是用客户端脚本做的(alert,&nbsp;msgbox,&nbsp;etc)，而且显然不是服务器端脚本能做到的。客户端脚本与服务器端脚本还有一个很大的区别(在IE、Firefox等浏览器中)，就是客户端的脚本可以访问文档对象模型(DOM)，可以操作页面中的对象(比如修改页面标题、修改一个div的innerHTML属性之类)。<br /><br />首先我们先来了解一下ASP页面执行的流程<br />1.IIS找到ASP文件，提交给ASP引擎(一般是ASP.DLL)处理。&nbsp;<br />2.引擎打开这个ASP文件，找出&lt;%和%&gt;之间的内容，当然还有&lt;script&nbsp;runAt="server"&gt;和对应的&lt;/script&gt;之间的内容，这些内容称为脚本块。只有脚本块里的内容被引擎解析，其他内容不管，作为没有意义的字符插在脚本块之间。有必要说明一下的是，其实被解析的内容还不止这些，&lt;!--#include&nbsp;***--&gt;类的服务器端包含文件也是由引擎包含进来并加以处理的。如果你读的程序比较多，你还会知道有的runAt属性标注为"Server"的&lt;object&gt;对象也是会被处理的，这里不做深入讨论。&nbsp;<br />3.引擎执行脚本块中的脚本，这些服务器端的脚本是作为一个整体被执行的，也就是说，可以写出如下的代码：<br />&lt;%<br />Dim&nbsp;i<br />For&nbsp;i=1&nbsp;to&nbsp;5<br />%&gt;&nbsp;Hello&nbsp;World!<br />&lt;%&nbsp;Next&nbsp;%&gt;<br />　　引擎并不会将这些脚本块分开解析，而使两个脚本块都发生语法错误。所以我们得到如下结论：并非所有非服务器脚本的代码都会被发送到客户端，有可能这段非服务器脚本的代码被脚本块限制了。服务器是一定不会操心客户端脚本的执行问题的，但是可以通过服务器端的脚本输出不同的客户端脚本。&nbsp;<br />4.最终引擎产生了一个文本流，或者说是脚本的执行结果，可以认为这是一个字符串，就是发送到客户端浏览器的网页的代码。客户端浏览器将页面显示出来，此时页面的源代码（源文件）是不包含服务器端的脚本的，但包含了服务器端脚本的执行结果（这是显然的）。&nbsp;<br /><br />&lt;%&nbsp;…&nbsp;%&gt;&nbsp;与&nbsp;&lt;script&nbsp;runat="server"&gt;…&lt;/script&gt;<br />　　它们都是服务器端的脚本，同时被处理执行。他们执行时是作为一个整体的。<br /><br />&lt;%&nbsp;…&nbsp;%&gt;&nbsp;与&nbsp;&lt;script&nbsp;language="…"&gt;…&lt;/script&gt;<br />　　前者是服务器端脚本，后者是客户端脚本。前者先执行，后者后执行。<br />　　其实也不尽然，二者的脚本是有可能在同时被执行的，但空间不同，仍然是：前者在服务器上执行，后者在客户端浏览器里执行。前者在逻辑上一定提前于后者执行。同时我们也得到结论：在同一个页面的执行中，客户端脚本无论如何不能反馈给服务器端脚本，也就是说，客户端浏览你的留言本并且提交新留言或者是任何客户端脚本获取的值都不可能在同一次服务器响应中被处理。<br /><br />关于组件的调用<br />　　注意服务器端脚本和客户端脚本都是脚本，自然都可以创建xmlhttp组件、ADODB.Connection组件等，但是并不是放在哪里都可以的。<br />　　xmlhttp如果用于服务器的抓取网页（比如采集）就要在服务器脚本里创建了，而如果是用于客户端的ajax无刷新而后台访问服务器端的页面，那么就是运行于客户端的了，自然在客户端创建。<br />　　ADODB.Connection组件用于访问数据库，一般来说在服务器端创建，毕竟是服务器端的asp程序在跑数据库的数据，但如果你的数据库真的是在客户端连接的(比如这个http://bbs.bccn.net/thread-224966-1-2.html)，那么就毫无疑问在客户端脚本里创建了。<br />　　总之，矛盾着的事物及其每一个侧面各有其特点。不同事物有不同的矛盾；同一事物在发展的不同过程和不同阶段上有不同的矛盾；同一事物中的不同矛盾、同一矛盾的两个不同方面各有其特殊性（看不懂的可以略去不看……）。这一原理要求我们坚持具体问题具体分析原则，在矛盾普遍性原理的指导下，具体分析矛盾的特殊性，并找出解决矛盾的正确方法。反对千篇一律地采用一种方法解决不同事物的矛盾。“一把钥匙开一把锁，到什么山唱什么歌”讲的就是这个道理。<br />　　服务器端VBScript脚本创建对象使用Server.CreateObject(className)方法，客户端VBScript脚本创建对象使用CreateObject(className)方法。<br /><br />典型错误<br />&lt;%&nbsp;<br />Function&nbsp;TSize(b)<br />'这是我自定义的函数&nbsp;<br />TSize="中国"<br />end&nbsp;function<br />%&gt;<br />&lt;a&nbsp;href="javascript:&lt;%TSize('变量')%&gt;"&nbsp;&gt;点这里要使用我定义的函数&lt;/a&gt;<br />(http://bbs.bccn.net/thread-225244-1-1.html)<br />　　错误分析：<br />　　混淆了服务器端脚本和客户端脚本的区别。实际执行时我们会发现，客户端根本没有收到什么TSize之类的代码，因为TSize是服务器端的程序，被引擎处理之后（注意引擎对于函数的处理，纯粹是给服务器端脚本调用的，不会发回到客户端）就消失了，不可能在客户端起作用。这就是说，客户端脚本无法直接调用服务器端脚本的函数。<br />　　事实上，这个程序是有语法错误的，引擎处理这段内容的时候先找到了&lt;%和%&gt;之间的内容，也就是&lt;%TSize('变量')%&gt;，显然这段内容不符合VBScript的语法规则。嗯，改成&lt;%=TSize("变量")%&gt;在服务器端脚本就没有语法错误了，这时TSize函数可以正常返回值"中国"，于是客户端收到的href属性是这样写的："javascript:中国"，是无法执行的。<br /><br />服务器端脚本对客户端脚本的影响<br />　　前面已经说过了，服务器端脚本在逻辑上是提前于客户端脚本的执行的，因此这样的代码是可行的：<br />&lt;%<br />Dim&nbsp;i<br />For&nbsp;i=1&nbsp;to&nbsp;5<br />Response.Write&nbsp;"&lt;script&nbsp;type=""text/javascript""&gt;"&nbsp;_<br />&&nbsp;"alert('Hello&nbsp;World!"&nbsp;&&nbsp;i&nbsp;&&nbsp;"')&lt;/script&gt;"<br />Next<br />%&gt;<br /><br />关于Response.Redirect与javascript的执行问题<br />　　注意以下代码的写法是错误的：<br />&lt;%<br />Response.Redirect&nbsp;"index.asp"<br />Response.Write&nbsp;"&lt;script&nbsp;type=""text/javascript""&gt;"&nbsp;_<br />&&nbsp;"alert('密码错误!')&lt;/script&gt;"<br />%&gt;<br />　　这是一种常见的错误，编写者常常以为，这样写代码可以使客户端先弹出“密码错误”的提示然后转向到index.asp，事实上这不可能发生，即使将两行代码顺序交换，也不可能达到这种效果。<br />　　究其原因，和服务器对于两行代码的处理方式有关。这两行代码不可能同时起作用。<br />　　Response.Write是向客户端发送一段文本，这段文本的内容可以是一段脚本，那么客户端浏览器收到后可以执行这段脚本，注意，要收到之后才能执行。<br />　　而Response.Redirect是向客户端发送了一个HTTP头信息(什么是HTTP头信息？这么说吧，比如对客户端Cookies的写入是HTTP头信息，HTTP头信息在HTTP的主体之前发回客户端浏览器，这就是为什么有时我们把服务器的缓冲关闭之后修改Cookies会出错的原因，因为主体已经开始传送，不允许发送HTTP头信息了。)，信息的内容告诉客户端浏览器应该跳转页面浏览，注意，这个Redirect信息是立刻起作用的，也就是说这个Redirect信息具有排他性，在缓冲打开的情况下，无论已经使用Response.Write向缓冲里写入了多少内容，一旦调用Response.Redirect，将会清空缓冲，并且向客户端浏览器发送这个头指令。如果动态跟踪一下程序的执行，我们还会发现，在调用了Response.Redirect之后，程序停止执行了，所以注意服务器端程序在调用Response.Redirect之前要做好数据连接的关闭等操作。<br />　　那么上面的例子应该怎样修改呢？如果你不愿意修改那个index.asp以加入脚本提示的话，那么只能将转向指令放到客户端脚本中执行，就像这样：<br />&lt;%<br />Response.Write&nbsp;"&lt;script&nbsp;type=""text/javascript""&gt;"&nbsp;_<br />&&nbsp;"alert('!');location.href='index.asp'&lt;/script&gt;"<br />%&gt;<br /><br />联系方式<br />如果有任何意见和建议，特别是文章的错误和不足，或者希望为文章添加新的材料，可以通过编程论坛联系我。当然也可以在本帖后面跟帖提问。<br /><br />值得说明的是，如果有算法和数据结构方面的问题，例如不明白自己的程序为什么错了或者索要某种算法的源代码，使用这个联系方式可能得不到及时解答。请在编程论坛发问。<br /><br /><br />--------------------------------------------------------------------------------<br /><br />版权<br />Copyright&nbsp;(c)&nbsp;2008&nbsp;multiple1902<br />Permission&nbsp;is&nbsp;granted&nbsp;to&nbsp;copy,&nbsp;distribute&nbsp;and/or&nbsp;modify&nbsp;this&nbsp;document&nbsp;under&nbsp;the&nbsp;terms&nbsp;of&nbsp;the&nbsp;<a href="http://www.gnu.org/licenses/fdl.txt" target="new">GNU&nbsp;Free&nbsp;Documentation&nbsp;License</a>,&nbsp;Version&nbsp;1.2&nbsp;or&nbsp;any&nbsp;later&nbsp;version&nbsp;published&nbsp;by&nbsp;the&nbsp;Free&nbsp;Software&nbsp;Foundation.<br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">ASP操作Excel技术总结</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_118.html" />
      <updated>2008-9-1 20:30:42</updated>
      <published>2008-9-1 20:30:42</published>
      <id>http://dev.mo.cn/article_118.html</id>
      <summary type="html">
      <![CDATA[目录&nbsp;<br />一、　　环境配置&nbsp;<br />二、　　ASP对Excel的基本操作&nbsp;<br />三、　　ASP操作Excel生成数据表&nbsp;<br />四、　　ASP操作Excel生成Chart图&nbsp;<br />五、　　服务器端Excel文件浏览、下载、删除方案&nbsp;<br />六、　　附录&nbsp;<br /><br />正文&nbsp;<br />一、　　环境配置&nbsp;<br />服务器端的环境配置从参考资料上看，微软系列的配置应该都行，即：&nbsp;<br />1．Win9x+PWS+Office&nbsp;<br />2．Win2000&nbsp;Professional+PWS+Office&nbsp;<br />3．Win2000&nbsp;Server+IIS+Office&nbsp;<br />目前笔者测试成功的环境是后二者。Office的版本没有特殊要求，考虑到客户机配置的不确定性和下兼容特性，建议服务器端Office版本不要太高，以防止客户机下载后无法正确显示。&nbsp;<br />服务器端环境配置还有两个偶然的发现是：&nbsp;<br />1．　　笔者开发机器上原来装有金山的WPS2002，结果Excel对象创建始终出现问题，卸载WPS2002后，错误消失。&nbsp;<br />2．　　笔者开发ASP代码喜欢用FrontPage，结果发现如果FrontPage打开（服务器端），对象创建出现不稳定现象，时而成功时而不成功。扩展考察后发现，Office系列的软件如果在服务器端运行，则Excel对象的创建很难成功。&nbsp;<br />服务器端还必须要设置的一点是COM组件的操作权限。在命令行键入“DCOMCNFG”，则进入COM组件配置界面，选择Microsoft&nbsp;Excel后点击属性按钮，将三个单选项一律选择自定义，编辑中将Everyone加入所有权限。保存完毕后重新启动服务器。&nbsp;<br />客户端的环境配置没发现什么特别讲究的地方，只要装有Office和IE即可，版本通用的好象都可以。&nbsp;<br /><br />二、　　ASP对Excel的基本操作&nbsp;<br />1、　　建立Excel对象&nbsp;<br />set&nbsp;objExcelApp&nbsp;=&nbsp;CreateObject("Excel.Application")&nbsp;<br />objExcelApp.DisplayAlerts&nbsp;=&nbsp;false　　　　不显示警告&nbsp;<br />objExcelApp.Application.Visible&nbsp;=&nbsp;false　　　　不显示界面&nbsp;<br />2、　　新建Excel文件&nbsp;<br />objExcelApp.WorkBooks.add&nbsp;<br />set&nbsp;objExcelBook&nbsp;=&nbsp;objExcelApp.ActiveWorkBook&nbsp;<br />set&nbsp;objExcelSheets&nbsp;=&nbsp;objExcelBook.Worksheets&nbsp;<br />set&nbsp;objExcelSheet&nbsp;=&nbsp;objExcelBook.Sheets(1)&nbsp;<br />3、　　读取已有Excel文件&nbsp;<br />strAddr&nbsp;=&nbsp;Server.MapPath(".")&nbsp;<br />objExcelApp.WorkBooks.Open(strAddr&nbsp;&&nbsp;"\Templet\Table.xls")&nbsp;<br />set&nbsp;objExcelBook&nbsp;=&nbsp;objExcelApp.ActiveWorkBook&nbsp;<br />set&nbsp;objExcelSheets&nbsp;=&nbsp;objExcelBook.Worksheets&nbsp;<br />set&nbsp;objExcelSheet&nbsp;=&nbsp;objExcelBook.Sheets(1)&nbsp;<br />4、　　另存Excel文件&nbsp;<br />objExcelBook.SaveAs&nbsp;strAddr&nbsp;&&nbsp;"\Temp\Table.xls"&nbsp;<br />5、　　保存Excel文件&nbsp;<br />objExcelBook.Save　　　　（笔者测试时保存成功，页面报错。）&nbsp;<br />6、　　退出Excel操作&nbsp;<br />objExcelApp.Quit　　一定要退出&nbsp;<br />set&nbsp;objExcelApp&nbsp;=&nbsp;Nothing&nbsp;<br /><br />三、　　ASP操作Excel生成数据表&nbsp;<br />1、　　在一个范围内插入数据&nbsp;<br />objExcelSheet.Range("B3:k3").Value&nbsp;=&nbsp;Array("67",&nbsp;"87",&nbsp;"5",&nbsp;"9",&nbsp;"7",&nbsp;"45",&nbsp;"45",&nbsp;"54",&nbsp;"54",&nbsp;"10")&nbsp;<br />2、　　在一个单元格内插入数据&nbsp;<br />objExcelSheet.Cells(3,1).Value="Internet&nbsp;Explorer"&nbsp;<br />3、　　选中一个范围&nbsp;<br />4、　　单元格左边画粗线条&nbsp;<br />5、　　单元格右边画粗线条&nbsp;<br />6、　　单元格上边画粗线条&nbsp;<br />7、　　单元格下边画粗线条&nbsp;<br />8、　　单元格设定背景色&nbsp;<br />9、　　合并单元格&nbsp;<br />10、　　插入行&nbsp;<br />11、　　插入列&nbsp;<br /><br />四、　　ASP操作Excel生成Chart图&nbsp;<br />1、　　创建Chart图&nbsp;<br />objExcelApp.Charts.Add&nbsp;<br />2、　　设定Chart图种类&nbsp;<br />objExcelApp.ActiveChart.ChartType&nbsp;=&nbsp;97&nbsp;<br />注：二维折线图，4；二维饼图，5；二维柱形图，51&nbsp;<br />3、　　设定Chart图标题&nbsp;<br />objExcelApp.ActiveChart.HasTitle&nbsp;=&nbsp;True&nbsp;<br />objExcelApp.ActiveChart.ChartTitle.Text&nbsp;=&nbsp;"A&nbsp;test&nbsp;Chart"&nbsp;<br />4、　　通过表格数据设定图形&nbsp;<br />objExcelApp.ActiveChart.SetSourceData&nbsp;objExcelSheet.Range("A1:k5"),1&nbsp;<br />5、　　直接设定图形数据（推荐）&nbsp;<br />objExcelApp.ActiveChart.SeriesCollection.NewSeries&nbsp;<br />objExcelApp.ActiveChart.SeriesCollection(1).Name&nbsp;=&nbsp;"=""333"""&nbsp;<br />objExcelApp.ActiveChart.SeriesCollection(1).Values&nbsp;=&nbsp;"={1,4,5,6,2}"&nbsp;<br />6、　　绑定Chart图&nbsp;<br />objExcelApp.ActiveChart.Location&nbsp;1&nbsp;<br />7、　　显示数据表&nbsp;<br />objExcelApp.ActiveChart.HasDataTable&nbsp;=&nbsp;True&nbsp;<br />8、　　显示图例&nbsp;<br />objExcelApp.ActiveChart.DataTable.ShowLegendKey&nbsp;=&nbsp;True&nbsp;<br /><br />五、　　服务器端Excel文件浏览、下载、删除方案&nbsp;<br />浏览的解决方法很多，“Location.href=”，“Navigate”，“Response.Redirect”都可以实现，建议用客户端的方法，原因是给服务器更多的时间生成Excel文件。&nbsp;<br />下载的实现要麻烦一些。用网上现成的服务器端下载组件或自己定制开发一个组件是比较好的方案。另外一种方法是在客户端操作Excel组件，由客户端操作服务器端Excel文件另存至客户端。这种方法要求客户端开放不安全ActiveX控件的操作权限，考虑到通知每个客户将服务器设置为可信站点的麻烦程度建议还是用第一个方法比较省事。&nbsp;<br />删除方案由三部分组成：&nbsp;<br />A：　　同一用户生成的Excel文件用同一个文件名，文件名可用用户ID号或SessionID号等可确信不重复字符串组成。这样新文件生成时自动覆盖上一文件。&nbsp;<br />B：　　在Global.asa文件中设置Session_onEnd事件激发时，删除这个用户的Excel暂存文件。&nbsp;<br />C：　　在Global.asa文件中设置Application_onStart事件激发时，删除暂存目录下的所有文件。&nbsp;<br />注：建议目录结构&nbsp;\Src&nbsp;代码目录&nbsp;\Templet&nbsp;模板目录&nbsp;\Temp&nbsp;暂存目录&nbsp;<br /><br />六、　　附录&nbsp;<br />出错时Excel出现的死进程出现是一件很头疼的事情。在每个文件前加上“On&nbsp;Error&nbsp;Resume&nbsp;Next”将有助于改善这种情况，因为它会不管文件是否产生错误都坚持执行到“Application.Quit”，保证每次程序执行完不留下死进程。<br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">强烈反驳'6行代码实现无组件上传'</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_117.html" />
      <updated>2008-8-23 19:45:59</updated>
      <published>2008-8-23 19:45:59</published>
      <id>http://dev.mo.cn/article_117.html</id>
      <summary type="html">
      <![CDATA[下面这段代码就是网络上流传的"6行代码实现无组件上传".<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&nbsp;&nbsp;strFileName&nbsp;=&nbsp;Request.QueryString("file1")<br />&nbsp;&nbsp;Set&nbsp;objStream&nbsp;=&nbsp;Server.CreateObject("ADODB.Stream")<br />&nbsp;&nbsp;objStream.Type&nbsp;=&nbsp;1&nbsp;'&nbsp;adTypeBinary<br />&nbsp;&nbsp;objStream.Open<br />&nbsp;&nbsp;objStream.LoadFromFile&nbsp;strFileName<br />&nbsp;&nbsp;objStream.SaveToFile&nbsp;Server.mappath("123_onweb.gif"),2<br /></div></div><br />确实,你在本地测试的时候,一切正常，没什么错误！但当你把这段代码上传到服务器后就会出错了---服务器上根本没有那个&nbsp;strFileName&nbsp;指定的文件,stream去哪里load这个文件！！！<br /><br />他犯的一个严重错误就是:<span style="color:Red;">服务器端和客户端都还分不清楚~~</span><br />希望大家能认识到这个问题，不要被误导了~<br /><br />PS:<br />简单的完整的把一个文件上传到服务器可以用这段代码~<br /><a href="http://dev.mo.cn/show.asp?id=63" target="new">http://dev.mo.cn/show.asp?id=63</a><br />更复杂的上传可以使用自己写的这个类<br /><a href="http://dev.mo.cn/detial.asp?id=143" target="new">http://dev.mo.cn/detial.asp?id=143</a>]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">Asp利用Stream下载文件</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_116.html" />
      <updated>2008-8-23 18:26:00</updated>
      <published>2008-8-23 18:26:00</published>
      <id>http://dev.mo.cn/article_116.html</id>
      <summary type="html">
      <![CDATA[<div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;%<br />Dim&nbsp;Stream<br />Dim&nbsp;FileName&nbsp;<br />Dim&nbsp;FileExt&nbsp;<br />Const&nbsp;adTypeBinary&nbsp;=&nbsp;1<br />FileName="你的文件路径"<br />FileName=replace(FileName,"\","/")<br />name=mid(FileName,instrrev(FileName,"/"))&nbsp;'文件名<br />Response.Clear<br />Response.ContentType&nbsp;=&nbsp;"application/octet-stream"<br />Response.AddHeader&nbsp;"content-disposition",&nbsp;"attachment;&nbsp;filename="&name<br />Set&nbsp;Stream&nbsp;=&nbsp;server.CreateObject("ADODB.Stream")<br />Stream.Type&nbsp;=&nbsp;adTypeBinary<br />Stream.Open<br />Stream.LoadFromFile&nbsp;Server.MapPath(FileName)<br />While&nbsp;Not&nbsp;Stream.EOS<br />Response.BinaryWrite&nbsp;Stream.Read(1024&nbsp;*&nbsp;64)<br />Wend<br />Stream.Close<br />Set&nbsp;Stream&nbsp;=&nbsp;Nothing<br />Response.Flush<br />Response.End<br />%&gt;</div></div>]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">简单的数字转换大写（货币）</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_115.html" />
      <updated>2008-8-23 18:21:06</updated>
      <published>2008-8-23 18:21:06</published>
      <id>http://dev.mo.cn/article_115.html</id>
      <summary type="html">
      <![CDATA[例如，把932.2转换为"玖佰叁拾贰圆贰角零分"<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;%<br />dim&nbsp;m<br />m=25698932.2<br />response.write&nbsp;cstr(m)&"&lt;br&gt;"<br />response.write&nbsp;m2h(m)<br /><br />Function&nbsp;m2h(money)&nbsp;<br />dim&nbsp;str,lstr,rstr,dwstr,dxstr,astr,i,n<br />dim&nbsp;dw_l,dw_r,dx_a,dw,dx,l_len,r_len<br />dw_l=split("圆|拾|佰|仟|万|拾万|佰万|仟万|亿|拾亿|佰亿|仟亿|万亿","|")<br />dw_r=split("角|分","|")<br />dx_a=split("零|壹|贰|叁|肆|伍|陆|柒|捌|玖","|")<br />str=cstr(money)<br />if&nbsp;instr(str,".")&gt;0&nbsp;then<br />&nbsp;&nbsp;&nbsp;lstr=split(str,".")(0)<br />&nbsp;&nbsp;&nbsp;rstr=split(str,".")(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;len(rstr)=1&nbsp;then&nbsp;rstr=rstr&"0"<br />else<br />&nbsp;&nbsp;&nbsp;lstr=str<br />&nbsp;&nbsp;&nbsp;rstr="00"<br />end&nbsp;if<br />l_len=len(lstr)<br />r_len=len(rstr)<br />for&nbsp;i=0&nbsp;to&nbsp;l_len-1<br />&nbsp;&nbsp;n=cint(mid(lstr,i+1,1))<br />&nbsp;&nbsp;dx=dx_a(n)<br />&nbsp;&nbsp;dxstr=dxstr&dx&"&nbsp;"<br />&nbsp;&nbsp;dw=dw_l(l_len-i-1)<br />&nbsp;&nbsp;dwstr=dwstr&dw&"&nbsp;"<br />&nbsp;&nbsp;astr=astr&dx&dw<br />next<br /><br />for&nbsp;i=0&nbsp;to&nbsp;r_len-1<br />&nbsp;&nbsp;n=cint(mid(rstr,i+1,1))<br />&nbsp;&nbsp;dx=dx_a(n)<br />&nbsp;&nbsp;dxstr=dxstr&dx&"&nbsp;"<br />&nbsp;&nbsp;dw=dw_r(i)<br />&nbsp;&nbsp;dwstr=dwstr&dw&"&nbsp;"<br />&nbsp;&nbsp;astr=astr&dx&dw<br />next<br /><br />m2h=dwstr&"&lt;br&gt;"&dxstr&"&lt;br&gt;"&astr<br />end&nbsp;function<br />%&gt;</div></div><br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">Dictionary对象介绍</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_114.html" />
      <updated>2008-8-23 18:16:17</updated>
      <published>2008-8-23 18:16:17</published>
      <id>http://dev.mo.cn/article_114.html</id>
      <summary type="html">
      <![CDATA[　　Dictionary对象是很像一个数组，但是它比数组更为灵活和实用。与数组不同，Dictionary对象是动态的，不必声明包含元素的数量。向Dictionary对象里添加一个元素后，Dictionary对象就会自动增长以保存这个元素；删除一个元素时，Dictionary对象也会自动缩小。如果使用动态数组，虽然也可以完成同样的工作，但是必须要Redim&nbsp;Preserve命令来扩展或缩小数组。<br /><br />　　Dictionary对象可以在任何一个位置上删除元素。例如，Dictionary对象可以删除&nbsp;第一个元素，并把它的空间释放掉。此时原来处在第二位置上的元素变为第一个元素，依次类推。<br /><br />　　在使用Dictionary对象时，不必用数字来查询元素，可以用关键字进行查询，就像查字典一样。在向Dictionary对象里添加元素时，不仅添加了真实的值，也添加了一个用于查找数值的字符串。<br /><br />创建Dictionary对象的语法如下：<br />&lt;%<br />Dim&nbsp;objDictioary&nbsp;'定义变量&nbsp;<br />Set&nbsp;objDictionary=Sever.Create("Scripting.Dictionary")<br />%&gt;<br /><br />1.&nbsp;Dictionary对象提供如下的属性。<br /><br />表8-1&nbsp;Dictionary对象常见属性<br /><br />对象　　　　&nbsp;说明<br />CompareMode&nbsp;　设置或者返回字符串比较模式<br />Count&nbsp;　　　　返回Dictionary中的字/项组合的数量（只读）<br />Item(key)&nbsp;　　设置或者返回特定key的对应项值<br />Key(key)　　　设置或者返回key的值<br /><br />其中CompareMode&nbsp;语法如下：<br />　　objDictionary.CompareMode[=Compare]<br />参数objDictionary表示Dictionary对象名称；Compare表示比较模式。当Compare为vbBianryCompare时执行二进制比较；为vbTextCompare时执行文本比较。<br /><br />2.&nbsp;Dictionary对象提供如下的方法<br /><br />（1）Add(key,item)&nbsp;在Dictionary中添加“关键字/项”组合，语法如下：<br />ObjDictionary.Add&nbsp;key,item<br />参数key与参数item是关联的。<br />下面的程序创建一个Dictionary对象实例，并插入数据。<br />&lt;%<br />Dim&nbsp;objDictionary&nbsp;'定义变量<br />Set&nbsp;objDictionary=Sever.Createobject("Scripting.Dictionary")<br />objDictionary.Add"a","步骤1"<br />objDictionary.Add"b","步骤2"<br />objDictionary.Add"c","步骤3"&nbsp;<br />%&gt;<br />（2）Exists(key)&nbsp;判断指定的key是否存在，如果存在则返回True,否则返回False.<br />（3）Item()&nbsp;返回一个数组，它包含了Dictionary对象中的所有项。<br />（4）keys()&nbsp;返回一个数字，它包含了Dictionary对象中的所有关键字。<br />（5）Remove(key)&nbsp;删除指定key&nbsp;的一个关键字/项组合。<br />（6）RemoveAll()&nbsp;删除Dictionary对象中所有的关键字/项组合。<br /><br />下面的操作将会导致出现错误：<br />1)在已经存在某关键字的情况下加入同一“关键字/项”组合。<br />2)删除不存在的关键字/项的组合。<br />3)修改已经包含数据的Dictionary对象的CompareMode属性。]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">Stream对象详解</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_113.html" />
      <updated>2008-8-23 18:15:04</updated>
      <published>2008-8-23 18:15:04</published>
      <id>http://dev.mo.cn/article_113.html</id>
      <summary type="html">
      <![CDATA[Adodb.Stream是ADO的Stream对象,提供存取二进制数据或者文本流,从而实现对流的读、写和管理等操作<br />有下列方法：&nbsp;<br />Cancel&nbsp;方法&nbsp;<br />　&nbsp;使用方法如下&nbsp;<br />　&nbsp;Object.Cancel&nbsp;<br />　&nbsp;说明：取消执行挂起的异步&nbsp;Execute&nbsp;或&nbsp;Open&nbsp;方法的调用。<br />&nbsp;<br />Close&nbsp;方法&nbsp;<br />　&nbsp;使用方法如下&nbsp;<br />　&nbsp;Object.Close&nbsp;<br />　&nbsp;说明：关闭对像&nbsp;<br /><br />CopyTo&nbsp;方法&nbsp;<br />　&nbsp;使用方法如下&nbsp;<br />　&nbsp;Object.CopyTo(destStream,[CharNumber])&nbsp;<br />　&nbsp;说明：将对像的数据复制，destStream指向要复制的对像，CharNumber为可选参数，指要复制的字节数，不选为全部复制。&nbsp;<br /><br />Flush&nbsp;方法&nbsp;<br />　&nbsp;使用方法如下&nbsp;<br />　&nbsp;Object.Flush&nbsp;<br />　&nbsp;说明：&nbsp;<br /><br />LoadFromFile&nbsp;方法&nbsp;<br />　&nbsp;使用方法如下&nbsp;<br />　&nbsp;Object.LoadFromFile(FileName)&nbsp;<br />　&nbsp;说明:将FileName指定的文件装入对像中,参数FileName为指定的用户名。&nbsp;<br /><br />Open&nbsp;方法&nbsp;<br />　&nbsp;使用方法如下&nbsp;<br />　&nbsp;Object.Open(Source,[Mode],[Options],[UserName],[Password])&nbsp;<br />　&nbsp;说明：打开对像，&nbsp;<br />　&nbsp;参数说明：<br />&nbsp;&nbsp;&nbsp;Sourece&nbsp;对像源，可不指定&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;Mode&nbsp;指定打开模式，可不指定，可选参数如下：&nbsp;<br />　&nbsp;&nbsp;&nbsp;&nbsp;adModeRead&nbsp;=1&nbsp;<br />　&nbsp;&nbsp;&nbsp;&nbsp;adModeReadWrite&nbsp;=3&nbsp;<br />　&nbsp;&nbsp;&nbsp;&nbsp;adModeRecursive&nbsp;=4194304&nbsp;<br />　&nbsp;&nbsp;&nbsp;&nbsp;adModeShareDenyNone&nbsp;=16&nbsp;<br />　&nbsp;&nbsp;&nbsp;&nbsp;adModeShareDenyRead&nbsp;=4&nbsp;<br />　&nbsp;&nbsp;&nbsp;&nbsp;adModeShareDenyWrite&nbsp;=8&nbsp;<br />　&nbsp;&nbsp;&nbsp;&nbsp;adModeShareExclusive&nbsp;=12&nbsp;<br />　&nbsp;&nbsp;&nbsp;&nbsp;adModeUnknown&nbsp;=0&nbsp;<br />　&nbsp;&nbsp;&nbsp;&nbsp;adModeWrite&nbsp;=2&nbsp;<br />&nbsp;&nbsp;&nbsp;Options&nbsp;指定打开的选项，可不指定，可选参数如下：&nbsp;<br />　&nbsp;&nbsp;&nbsp;&nbsp;adOpenStreamAsync&nbsp;=1&nbsp;<br />　&nbsp;&nbsp;&nbsp;&nbsp;adOpenStreamFromRecord&nbsp;=4&nbsp;<br />　&nbsp;&nbsp;&nbsp;&nbsp;adOpenStreamUnspecified=-1&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;UserName&nbsp;指定用户名，可不指定。&nbsp;<br />&nbsp;&nbsp;&nbsp;Password&nbsp;指定用户名的密码&nbsp;<br /><br />Read&nbsp;方法&nbsp;<br />　&nbsp;使用方法如下：&nbsp;<br />　&nbsp;Object.Read(Numbytes)&nbsp;<br />　&nbsp;说明：读取指定长度的二进制内容。&nbsp;<br />　&nbsp;参数说明：Numbytes指定的要读取的找度，不指定则读取全部。&nbsp;<br /><br />ReadText&nbsp;方法&nbsp;<br />　&nbsp;使用方法如下：&nbsp;<br />　&nbsp;Object.ReadText(NumChars)&nbsp;<br />　&nbsp;说明：读取指定长度的文本&nbsp;<br />　&nbsp;参数说明：NumChars指定的要读取的找度，不指定则读取全部。&nbsp;<br /><br />SaveToFile&nbsp;方法&nbsp;<br />　&nbsp;使用方法如下：&nbsp;<br />　&nbsp;Object.SaveToFile(FileName,[Options])&nbsp;<br />　&nbsp;说明：将对像的内容写到FileName指定的文件中&nbsp;<br />　&nbsp;参数说明：FileName指定的文件&nbsp;<br />　&nbsp;Options&nbsp;存取的选项，可不指定，可选参数如下：&nbsp;<br />　&nbsp;　&nbsp;adSaveCreateNotExist&nbsp;=1&nbsp;<br />　&nbsp;　&nbsp;adSaveCreateOverWrite&nbsp;=2&nbsp;<br /><br />SetEOS&nbsp;方法&nbsp;<br />　&nbsp;使用方法如下：&nbsp;<br />　&nbsp;Object.setEOS()&nbsp;<br />　&nbsp;说明：&nbsp;<br /><br />SkipLine&nbsp;方法&nbsp;<br />　&nbsp;使用方法如下：&nbsp;<br />　&nbsp;Object.SkipLine()&nbsp;<br />　&nbsp;说明：<br />&nbsp;<br />Write&nbsp;方法&nbsp;<br />　&nbsp;使用方法如下：&nbsp;<br />　&nbsp;Object.Write(Buffer)&nbsp;<br />　&nbsp;说明：将指定的数据装入对像中。&nbsp;<br />　&nbsp;参数说明：Buffer&nbsp;为指定的要写入的内容。&nbsp;<br /><br />WriteText&nbsp;方法&nbsp;<br />　&nbsp;使用方法如下：&nbsp;<br />　&nbsp;Object.Write(Data,[Options])&nbsp;<br />　&nbsp;说明：将指定的文本数据装入对像中。&nbsp;<br />　&nbsp;参数说明：<br />　&nbsp;Data&nbsp;为指定的要写入的内容。&nbsp;<br />　&nbsp;Options&nbsp;写入的选项，可不指定，可选参数如下：&nbsp;<br />　　&nbsp;&nbsp;adWriteChar&nbsp;=0&nbsp;<br />　　&nbsp;&nbsp;adWriteLine&nbsp;=1&nbsp;<br />____________________________________________________________________<br />有下列属性：&nbsp;<br />Charset&nbsp;<br />EOS&nbsp;返回对像内数据是否为空。&nbsp;<br /><br />LineSeparator&nbsp;指定换行格式，可选参数有&nbsp;<br />　&nbsp;adCR　=13&nbsp;<br />　&nbsp;adCRLF　=-1&nbsp;<br />　&nbsp;adLF　=10&nbsp;<br /><br />Mode&nbsp;指定或返加模式。&nbsp;<br /><br />Position&nbsp;指定或返加对像内数据的当前指针。&nbsp;<br /><br />Size&nbsp;返回对像内数据的大小。&nbsp;<br /><br />State&nbsp;返加对像状态是否打开。&nbsp;<br /><br />Type&nbsp;指定或返回的数据类型，可选参数为：&nbsp;<br />　&nbsp;adTypeBinary&nbsp;=1&nbsp;<br />　&nbsp;adTypeText&nbsp;=2]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">艾恩(An-Upload)ASP无组件上传类开发文档</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_112.html" />
      <updated>2008-8-19 6:34:33</updated>
      <published>2008-8-19 6:34:33</published>
      <id>http://dev.mo.cn/article_112.html</id>
      <summary type="html">
      <![CDATA[艾恩ASP无组件上传(An-upload)&nbsp;说明文档(下载地址:<a href="http://dev.mo.cn/detial.asp?id=143" target="new">http://dev.mo.cn/detial.asp?id=143</a>)<br /><br />本类简介:<br />&nbsp;&nbsp;1.尽量追求简洁，减少赘余代码<br />&nbsp;&nbsp;2.全面保存客户提交的信息(普通表单,文件域值,相同表单值)<br />&nbsp;&nbsp;3.准确获取上传中的错误信息<br />&nbsp;&nbsp;4.可选择文件保存方式(以原文件名保存和以新文件名保存,新文件名为时间+随机数字组成)<br />&nbsp;&nbsp;5.文件保存函数简洁,调用方便,并且比较灵活(保存路径和保存方式可随时改变)<br />&nbsp;&nbsp;6.同时可以获取文件的二进制形式,从而可以实现将二进制数据保存到数据库<br />&nbsp;&nbsp;7.灵活运用本类,可以实现表单数据和文件同时编辑(这是一般类无法达到的)<br />&nbsp;&nbsp;8.更多的用途靠大家来发现了.....<br />&nbsp;&nbsp;9.examples里面有两个很简单的例子,能掌握这两个例子就可以灵活使用本类<br /><br /><br />为使网友更方便地使用该类(UpLoad)，现写出本类(UpLoad)的开发文档.<br />详细说明如下('后面为注释文字):<br /><br />第一部分&nbsp;上传表单<br />&nbsp;&nbsp;1.特别注意Form一定要加上enctype="multipart/form-data"属性,否则上传会出错<br />&nbsp;&nbsp;2.多文件上传的时候建议固定上传文件数量,如果不固定的话按我的表单设计就好，注意最后3个按钮的位置<br />&nbsp;&nbsp;3.可以存在相同name属性的表单,但文件域除外(不能存在两个相同name属性的文件域)<br /><br />第二部分<br /><span style="color:red;"><br />demo---示例文件夹<br />&nbsp;&nbsp;&nbsp;bytes_upload&nbsp;&nbsp;---&nbsp;&nbsp;&nbsp;演示获取上传文件的二进制形式<br />&nbsp;&nbsp;&nbsp;db_upload&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;---&nbsp;&nbsp;&nbsp;一个复杂的文件上传+表单数据保存示例<br />&nbsp;&nbsp;&nbsp;multi_upload&nbsp;&nbsp;---&nbsp;&nbsp;&nbsp;演示批量文件上传<br />&nbsp;&nbsp;&nbsp;single_upload&nbsp;---&nbsp;&nbsp;&nbsp;演示单个文件上传+文本表单<br /></span><br />关键程序代码(与single_upload基本对应):<br />'==================================================================================<br />&nbsp;Dim&nbsp;myupload&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'定义变量&nbsp;<br />&nbsp;set&nbsp;myupload=new&nbsp;UpLoad&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'创建类实例<br />&nbsp;myupload.MaxSize=500*1024&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'设置单个文件最大上传限制为500KB,按字节计；默认(可以不设置)为不限制单文件大小<br />&nbsp;myupload.MaxSize=1*1024*1024&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'设置最大上传限制为1MB,按字节计；默认(可以不设置)为不限制&nbsp;<br />&nbsp;myupload.Exe="rar|jpg|gif|bmp"&nbsp;&nbsp;&nbsp;&nbsp;'设置合法扩展名,以|分割,忽略大小写&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;myupload.GetData()&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 />上面这段代码运行完毕后<br />&nbsp;&nbsp;&nbsp;用errNum=myupload.err来获取错误信息,errNum&lt;=0代表数据处理成功<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errNum&gt;0&nbsp;代表出错，可用myupload.Description来获取错误描述<br /><br />程序生成两个集合(dictionary对象):myupload.forms---表单数据集合;myupload.files---文件类集合<br />如果没有错误可以开始保存数据：<br /><br />假设有个表单的名字为input1<br />&nbsp;&nbsp;&nbsp;你可以使用myupload.forms("input1")来获取表单的值<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注意：myupload.forms("input1")的参数input1区分大小写的<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myupload.forms(文件域名)可以获取文件的本地路径(一般没用)<br /><br />假设你上传的文件域名字为file1<br />&nbsp;&nbsp;&nbsp;你可以用set&nbsp;file=myupload.files("file1")来获取保存文件的类<br />&nbsp;&nbsp;&nbsp;然后可以调用file.SaveToFile(path,savetype)来保存文件<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path为保存文件的目录<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;savetype为保存方式:0为新文件名(时间+随机数字)保存;1为原文件名保存<br />&nbsp;&nbsp;&nbsp;可以使用file.FileName获得保存到服务器的文件的名字<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file.size获取文件的大小,字节为单位<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file.GetBytes获取文件的二进制形式(方便一些程序员，可以把数据保存到数据库)<br />&nbsp;&nbsp;&nbsp;保存完文件后使用set&nbsp;file=nothing来释放资源<br /><br />本类使用方法就是这样的，很简单，灵活性比较大！<br />&nbsp;&nbsp;&nbsp;<br />第三部分&nbsp;说明<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;类名:&nbsp;UpLoad(艾恩无组件上传类)<br />&nbsp;&nbsp;作者:&nbsp;Anlige<br />&nbsp;&nbsp;版本:&nbsp;An-Upload无组件上传类8.8.19<br />&nbsp;&nbsp;开发日期:&nbsp;2008-4-12<br />&nbsp;&nbsp;修改日期:&nbsp;2008-9-5<br />&nbsp;&nbsp;作者主页:&nbsp;http://dev.mo.cn<br />&nbsp;&nbsp;Email:&nbsp;zhanghuiguoanlige@126.com<br />&nbsp;&nbsp;下载地址:<a href="http://dev.mo.cn/detial.asp?id=143" target="new">http://dev.mo.cn/detial.asp?id=143</a><br />&nbsp;&nbsp;QQ:&nbsp;417833272<br />&nbsp;&nbsp;备注:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;请不要尝试修改Upload_class.asp文件，此为关键无组件上传类；<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;您可以修改部分代码，请保留Upload_class.asp文件中的版本，作者联系方式等注释！谢谢使用！]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">HTML中meta标签用法详解</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_111.html" />
      <updated>2008-8-19 3:57:28</updated>
      <published>2008-8-19 3:57:28</published>
      <id>http://dev.mo.cn/article_111.html</id>
      <summary type="html">
      <![CDATA[meta是html语言head区的一个辅助性标签。几乎所有的网页里，我们可以看到类似下面这段的html代码：<br />＜head＞<br />＜meta&nbsp;http-equiv="content-Type"&nbsp;content="text/html;&nbsp;charset=gb2312"＞<br />＜/head＞<br />也许你认为这些代码可有可无。其实如果你能够用好meta标签，会给你带来意想不到的效果，例如加入关键字会自动被大型搜索网站自动搜集；可以设定页面格式及刷新等等。&nbsp;<br />一、meta标签的组成<br />meta标签共有两个属性，它们分别是http-equiv属性和name属性，不同的属性又有不同的参数值，这些不同的参数值就实现了不同的网页功能。<br />1、name属性<br />name属性主要用于描述网页，与之对应的属性值为content，content中的内容主要是便于搜索引擎机器人查找信息和分类信息用的。<br />meat标签的name属性语法格式是：＜meta&nbsp;name="参数"&nbsp;content="具体的参数值"＞&nbsp;。<br />其中name属性主要有以下几种参数：<br />A、Keywords(关键字)<br />说明：keywords用来告诉搜索引擎你网页的关键字是什么。<br />举例：＜meta&nbsp;name&nbsp;="keywords"&nbsp;content="science,&nbsp;education,culture,politics,ecnomics，relationships,&nbsp;entertaiment,&nbsp;human"＞<br />B、description(网站内容描述)<br />说明：description用来告诉搜索引擎你的网站主要内容。<br />举例：＜meta&nbsp;name="description"&nbsp;content="This&nbsp;page&nbsp;is&nbsp;about&nbsp;the&nbsp;meaning&nbsp;of&nbsp;science,&nbsp;education,culture."＞<br />C、robots(机器人向导)<br />说明：robots用来告诉搜索机器人哪些页面需要索引，哪些页面不需要索引。<br />content的参数有all,none,index,noindex,follow,nofollow。默认是all。<br />举例：＜meta&nbsp;name="robots"&nbsp;content="none"＞<br />D、author(作者)<br />说明：标注网页的作者<br />举例：＜meta&nbsp;name="author"&nbsp;content="闪电儿,web@webjx.com"＞<br />2、http-equiv属性<br />http-equiv顾名思义，相当于http的文件头作用，它可以向浏览器传回一些有用的信息，以帮助正确和精确地显示网页内容，与之对应的属性值为content，content中的内容其实就是各个参数的变量值。<br />meta标签的http-equiv属性语法格式是：＜meta&nbsp;http-equiv="参数"&nbsp;content="参数变量值"＞&nbsp;；其中http-equiv属性主要有以下几种参数：<br />A、Expires(期限)<br />说明：可以用于设定网页的到期时间。一旦网页过期，必须到服务器上重新传输。<br />用法：＜meta&nbsp;http-equiv="expires"&nbsp;content="Fri,&nbsp;12&nbsp;Jan&nbsp;2001&nbsp;18:18:18&nbsp;GMT"＞<br />注意：必须使用GMT的时间格式。<br />B、Pragma(cache模式)<br />说明：禁止浏览器从本地计算机的缓存中访问页面内容。<br />用法：＜meta&nbsp;http-equiv="Pragma"&nbsp;content="no-cache"＞<br />注意：这样设定，访问者将无法脱机浏览。<br />C、Refresh(刷新)<br />说明：自动刷新并指向新页面。<br />用法：＜meta&nbsp;http-equiv="Refresh"&nbsp;content="2；URL=http://www.webjx.com"＞<br />注意：其中的2是指停留2秒钟后自动刷新到URL网址。<br />D、Set-Cookie(cookie设定)<br />说明：如果网页过期，那么存盘的cookie将被删除。<br />用法：＜meta&nbsp;http-equiv="Set-Cookie"&nbsp;content="cookievalue=xxx;&nbsp;expires=Friday,&nbsp;12-Jan-2001&nbsp;18:18:18&nbsp;GMT；&nbsp;path=/"＞<br />注意：必须使用GMT的时间格式。<br />E、Window-target(显示窗口的设定)<br />说明：强制页面在当前窗口以独立页面显示。<br />用法：＜meta&nbsp;http-equiv="Window-target"&nbsp;content="_top"＞<br />注意：用来防止别人在框架里调用自己的页面。<br />F、content-Type(显示字符集的设定)<br />说明：设定页面使用的字符集。<br />用法：＜meta&nbsp;http-equiv="content-Type"&nbsp;content="text/html;&nbsp;charset=gb2312"＞<br />二、meta标签的功能<br />上面我们介绍了meta标签的一些基本组成，接着我们再来一起看看meta标签的常见功能：<br />１、帮助主页被各大搜索引擎登录<br />meta标签的一个很重要的功能就是设置关键字，来帮助你的主页被各大搜索引擎登录，提高网站的访问量。在这个功能中，最重要的就是对Keywords和description的设置。因为按照搜索引擎的工作原理,搜索引擎首先派出机器人自动检索页面中的keywords和decription，并将其加入到自己的数据库，然后再根据关键词的密度将网站排序。因此，我们必须设置好关键字，来提高页面的搜索点击率。下面我们来举一个例子供大家参考：<br />＜meta&nbsp;name="keywords"&nbsp;content="网页,网页制作,&nbsp;网页特效,建站指南,&nbsp;教程下载,&nbsp;动画制作，网页教学，网页素材，视频教程，技术论坛，免费空间，免费域名"＞<br />＜meta&nbsp;name="description"&nbsp;content="网页教学网　专业的网页教学网站"＞<br />设置好这些关键字后，搜索引擎将会自动把这些关键字添加到数据库中，并根据这些关键字的密度来进行合适的排序。<br />　　２、定义页面的使用语言<br />　　这是meta标签最常见的功能,在制作网页时,我们在纯HTML代码下都会看到它,它起的作用是定义你网页的语言,当浏览者访问你的网页时,浏览器会自动识别并设置网页中的语言,如果你网页设置的是GB码,而浏览者没有安装GB码,这时网页只会呈现浏览者所设置的浏览器默认语言。同样的,如果该网页是英语,那么charset=en。下面就是一个具有代表性的例子：<br />　　＜meta&nbsp;http-equiv=″content－Type″&nbsp;content=″text/html;&nbsp;charset=gb2312″〉<br />该代码就表示将网页的语言设置成国标码。<br />　　３、自动刷新并指向新的页面<br />　　如果你想使您的网页在无人控制的情况下，能自动在指定的时间内去访问指定的网页，就可以使用meta标签的自动刷新网页的功能。下面我们来看一段代码：<br />　　〈meta&nbsp;http-equiv=″refresh″&nbsp;content=″２;&nbsp;URL=http://www.webjx.com″〉<br />　　这段代码可以使当前某一个网页在２秒后自动转到http://www.webjx.com页面中去,这就是meta的刷新作用,在content中,２代表设置的时间（单位为秒）,而URL就是在指定的时间后自动连接的网页地址。<br />　　４、实现网页转换时的动画效果<br />　　使用meta标签，我们还可以在进入网页或者离开网页的一刹那实现动画效果，我们只要在页面的html代码中的＜head＞＜/head＞标签之间添加如下代码就可以了：<br />＜meta&nbsp;http-equiv="Page-Enter"&nbsp;content="revealTrans(duration=５.０,&nbsp;transition=２０)"＞<br />＜meta&nbsp;http-equiv="Page-Exit"&nbsp;content="revealTrans(duration=５.０,&nbsp;transition=２０)"＞<br />一旦上述代码被加到一个网页中后，我们再进出页面时就会看到一些特殊效果，这个功能其实与FrontPage2000中的Format/Page&nbsp;Transition一样，但我们要注意的是所加网页不能是一个Frame页;<br />　　５、网页定级评价<br />　　IE4.0以上版本的浏览器可以防止浏览一些受限制的网站,而之所以浏览器会自动识别某些网站是否受限制,就是因为在网站meta标签中已经设置好了该网站的级别,而该级别的评定是由美国RSAC,即娱乐委员会的评级机构评定的,如果你需要评价自己的网站,可以连接到网站http://www.rsac.org/,按要求提交表格,那么RSAC会提供一段meta代码给你,复制到自己网页里就可以了。下面就是一段代码的样例：<br />〈meta&nbsp;http-equiv=″PICS－Label″<br />content=′(PICS－1.1&nbsp;″http://www.rsac.org/ratingsv01.html″<br />l&nbsp;gen&nbsp;true&nbsp;comment&nbsp;″RSACi&nbsp;North&nbsp;America&nbsp;Server″<br />for&nbsp;″http://www.rsac.org″<br />on&nbsp;″2001.08.16T08:15－0500″<br />r&nbsp;(n&nbsp;0&nbsp;s&nbsp;0&nbsp;v&nbsp;0&nbsp;l&nbsp;0))′〉<br />　　６、控制页面缓冲<br />　　meta标签可以设置网页到期的时间,也就是说,当你在Internet&nbsp;Explorer&nbsp;浏览器中设置浏览网页时首先查看本地缓冲里的页面,那么当浏览某一网页,而本地缓冲又有时,那么浏览器会自动浏览缓冲区里的页面,直到meta中设置的时间到期,这时候,浏览器才会去取得新页面。例如下面这段代码就表示网页的到期时间是2001年1月12日18时18分18秒。<br />　　〈meta&nbsp;http-equiv=″expires″&nbsp;content=″Friday,&nbsp;12-Jan-2001&nbsp;18:18:18&nbsp;GMT″〉<br />　　７、控制网页显示的窗口<br />　　我们还可以使用meta标签来控制网页显示的窗口，只要在网页中加入下面的代码就可以了：＜metahttp-equiv="window-target"&nbsp;content="_top"＞，这段代码可以防止网页被别人作为一个Frame调用。<br />]]>
      </summary>
      <category term="" label="HTML/CSS" scheme="http://dev.mo.cn/cat_diary_8.html" />
   </entry>
   <entry>
      <title type="html">如何解决AJAX中跨域访问出现'没有权限'的错误</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_110.html" />
      <updated>2008-8-16 11:07:25</updated>
      <published>2008-8-16 11:07:25</published>
      <id>http://dev.mo.cn/article_110.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;很多人在使用AJAX调用别人站点内容的时候,JS会提示"没有权限"错误，这是XMLHTTP组件的限制-安全起见<br />禁止访问非同域的网站,下面一个例子来访问http://www.google.cn,<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;script&nbsp;type="text/javascript"&gt;<br />&nbsp;function&nbsp;createobj()&nbsp;{<br />&nbsp;if&nbsp;(window.ActiveXObject)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;ActiveXObject("Microsoft.XMLHTTP");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp;(window.XMLHttpRequest)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;XMLHttpRequest();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />function&nbsp;getWebPage(url)&nbsp;{<br />&nbsp;&nbsp;var&nbsp;oBao=createobj();<br />&nbsp;&nbsp;var&nbsp;my_url=url<br />&nbsp;&nbsp;oBao.open('get',my_url,false);&nbsp;<br />&nbsp;&nbsp;oBao.onreadystatechange=function(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(oBao.readyState==4){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(oBao.status==200){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;returnStr=oBao.responseText;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.write(returnStr);<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;document.write("未找到您输入的地址或服务器505错误!");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;oBao.send(null);&nbsp;<br />&nbsp;}<br />getWebPage('http://www.google.cn');<br />&lt;/script&gt;<br /></div></div><br />&nbsp;&nbsp;保存这段代码到test.html,在本地直接用IE打开没问题,但将该段代码上传到服务器后，问题出现了--JS提示"没有权限"错误!!!这该如何解决呢？<br />&nbsp;&nbsp;下面思考一下：既然不能访问非同域的，只能访问同域的地址了，同域的动态文件怎么获取非同域网页内容呢？我们还是想到的AJAX，只不过这个AJAX是在服务器端执行.<br />&nbsp;&nbsp;&nbsp;大体思路是这样的:首先将URL用AJAX提交给自己站内的文件，例如getPage.asp---在getPage.asp再次通过服务器XMLHTTP来访问提交来的URL---将获取的内容返回给提交URL的页----显示内容<br />&nbsp;&nbsp;下面开始组织代码,首先是test.html文件<br />&nbsp;&nbsp;<div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;script&nbsp;type="text/javascript"&gt;<br />&nbsp;function&nbsp;createobj()&nbsp;{<br />&nbsp;if&nbsp;(window.ActiveXObject)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;ActiveXObject("Microsoft.XMLHTTP");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp;(window.XMLHttpRequest)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;XMLHttpRequest();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />function&nbsp;getWebPage(url)&nbsp;{<br />&nbsp;&nbsp;var&nbsp;oBao=createobj();<br />&nbsp;&nbsp;var&nbsp;my_url="getpage.asp?url="+escape(url);<br />&nbsp;&nbsp;oBao.open('get',my_url,false);&nbsp;<br />&nbsp;&nbsp;oBao.onreadystatechange=function(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(oBao.readyState==4){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(oBao.status==200){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;returnStr=oBao.responseText;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.write(returnStr);<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;document.write("未找到您输入的地址或服务器505错误!");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;oBao.send(null);&nbsp;<br />&nbsp;}<br />getWebPage('http://www.google.cn');<br />&lt;/script&gt;<br /></div></div><br /><br />再就是getpage.asp文件(注意:要以UTF-8格式保存本文件,防止乱码),如下:<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;%<br />response.charset="UTF-8"<br />reg="\&lt;meta.+&nbsp;charset=&nbsp;{0,}([^\""&nbsp;\&gt;\/]*).+\/{0,1}\&gt;"<br />'函数名:GetResStr<br />'作用:获取指定URL的HTML代码<br />'参数:URL-要获取的URL<br />function&nbsp;GetResStr(URL)<br />err.clear<br />dim&nbsp;ResBody,ResStr,PageCode,ReturnStr<br />Set&nbsp;Http=createobject("MiCROSOFT.XMLHTTP")&nbsp;<br />Http.open&nbsp;"GET",URL,False&nbsp;<br />Http.Send()&nbsp;<br />If&nbsp;Http.Readystate&nbsp;=4&nbsp;Then&nbsp;<br />&nbsp;&nbsp;If&nbsp;Http.status=200&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;ResStr=http.responseText<br />&nbsp;&nbsp;&nbsp;&nbsp;ResBody=http.responseBody<br />&nbsp;&nbsp;&nbsp;&nbsp;PageCode=GetCode(ResStr,reg)<br />&nbsp;&nbsp;&nbsp;&nbsp;ReturnStr=BytesToBstr(http.responseBody,PageCode)<br />&nbsp;&nbsp;&nbsp;&nbsp;GetResStr=ReturnStr<br />&nbsp;&nbsp;End&nbsp;If&nbsp;<br />End&nbsp;If&nbsp;<br />End&nbsp;Function<br /><br />'函数名:BytesToBstr<br />'作用:转换二进制数据为字符<br />'参数:Body-二进制数据,Cset-文本编码方式<br />Function&nbsp;BytesToBstr(Body,Cset)&nbsp;<br />&nbsp;&nbsp;Dim&nbsp;Objstream&nbsp;<br />&nbsp;&nbsp;Set&nbsp;Objstream&nbsp;=&nbsp;CreateObject("adodb.stream")&nbsp;<br />&nbsp;&nbsp;objstream.Type&nbsp;=&nbsp;1&nbsp;<br />&nbsp;&nbsp;objstream.Mode&nbsp;=3&nbsp;<br />&nbsp;&nbsp;objstream.Open&nbsp;<br />&nbsp;&nbsp;objstream.Write&nbsp;body&nbsp;<br />&nbsp;&nbsp;objstream.Position&nbsp;=&nbsp;0&nbsp;<br />&nbsp;&nbsp;objstream.Type&nbsp;=&nbsp;2&nbsp;<br />&nbsp;&nbsp;objstream.Charset&nbsp;=Cset&nbsp;<br />&nbsp;&nbsp;BytesToBstr&nbsp;=&nbsp;objstream.ReadText&nbsp;<br />&nbsp;&nbsp;objstream.Close&nbsp;<br />&nbsp;&nbsp;set&nbsp;objstream&nbsp;=&nbsp;nothing&nbsp;<br />End&nbsp;Function<br />&nbsp;<br />'函数名:GetCode<br />'作用:提取网页编码<br />'参数:str-待查询字符串,regstr-正则表达式<br />Function&nbsp;GetCode(str,regstr)<br />Dim&nbsp;Reg,serStr<br />set&nbsp;Reg=&nbsp;new&nbsp;RegExp<br />Reg.IgnoreCase&nbsp;=&nbsp;True<br />Reg.MultiLine&nbsp;=&nbsp;True<br />Reg.Pattern&nbsp;=regstr<br />if&nbsp;Reg.test(str)&nbsp;then&nbsp;'若查询到匹配项<br />&nbsp;&nbsp;&nbsp;Set&nbsp;Cols&nbsp;=&nbsp;Reg.Execute(str)<br />&nbsp;&nbsp;&nbsp;serStr=Cols(0).SubMatches(0)&nbsp;'使用匹配到的第一个匹配项<br />else&nbsp;'否则给个默认值gb2312,有点省懒法，如果页面没给出编码格式，想知道确实有点麻烦<br />&nbsp;&nbsp;&nbsp;serStr="gb2312"<br />end&nbsp;if<br />GetCode=serStr<br />end&nbsp;function<br /><br />dim&nbsp;url:url=request.querystring("url")<br />response.write&nbsp;GetResStr(URL)<br />%&gt;<br /></div></div><br /><br />&nbsp;&nbsp;代码组织完毕,实验下,成功提取http://www.google.cn的内容!!!!!这样就可以解决"没有权限"的问题了。&nbsp;<br />&nbsp;&nbsp;其实,单纯一个getpage.asp一样能获取，不过不能像js那样动态的处理DOM。<br />&nbsp;&nbsp;还有一个问题,如果你用第一种方法访问http://www.baidu.com会出现乱码,因为baidu编码为GB2312,<br />而XMLHTTP返回的是UTF-8编码格式。用第二种方法就不会出现这样的问题了,只要定义了编码格式的站点就能正常返回信息(这里不能包括一些使用特别编码的站点)。<br /><br /><br /><br /><br /><br />]]>
      </summary>
      <category term="" label="AJAX" scheme="http://dev.mo.cn/cat_diary_2.html" />
   </entry>
   <entry>
      <title type="html">ASP在线获取ACCESS数据库表名及结构</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_109.html" />
      <updated>2008-8-11 21:15:24</updated>
      <published>2008-8-11 21:15:24</published>
      <id>http://dev.mo.cn/article_109.html</id>
      <summary type="html">
      <![CDATA[此方法可获得ACCESS数据的表名及其结构，数据类型等...<br />程序过滤了几个ACCESS数据库的几个隐藏表(可能是导致ACCESS数据库删除数据还会变大的原因)<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;获取ACCESS数据库表名&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&nbsp;style="text-align:left;margin-left:50px;font-family:'arial';font-size:12px"&gt;<br />&lt;form&nbsp;style="padding:5px;margin:5px;margin-left:0px"&nbsp;name="get"&nbsp;action=""&nbsp;method="post"&gt;<br />数据库路径:&lt;input&nbsp;type="text"&nbsp;name="path"&nbsp;value=""&nbsp;size="50"&nbsp;/&gt;<br />&lt;input&nbsp;type="hidden"&nbsp;name="ari"&nbsp;value="1"&nbsp;/&gt;<br />&nbsp;&lt;input&nbsp;type="submit"&nbsp;value="查看"&nbsp;/&gt;<br />&lt;/form&gt;<br />&lt;hr&gt;<br />&lt;%<br />if&nbsp;request.form("ari")="1"&nbsp;and&nbsp;request.form("path")&lt;&gt;""&nbsp;then<br />dim&nbsp;conn,connstr,i,sql,rs<br />on&nbsp;error&nbsp;resume&nbsp;next<br />Connstr="DRIVER=Microsoft&nbsp;Access&nbsp;Driver&nbsp;(*.mdb);DBQ="+server.mappath(request.form("path"))<br />Set&nbsp;Conn=Server.CreateObject("ADODB.Connection")&nbsp;<br />conn.Open&nbsp;connstr<br />If&nbsp;Err&nbsp;Then<br />err.Clear<br />Set&nbsp;Conn&nbsp;=&nbsp;Nothing<br />Response.Write&nbsp;"数据库连接出错，请检查连接字串。"<br />Response.End<br />End&nbsp;If<br />%&gt;<br />&lt;font&nbsp;color=red&gt;&lt;%=conn.connectionstring%&gt;&lt;/font&gt;&lt;hr&gt;<br />&lt;%<br />j=0<br />dim&nbsp;tablecount<br />tablecount=0<br />Set&nbsp;shm&nbsp;=&nbsp;conn.OpenSchema(20)<br />shm.MoveFirst<br />Do&nbsp;While&nbsp;Not&nbsp;shm.EOF<br />&nbsp;&nbsp;If&nbsp;shm("TABLE_TYPE")&nbsp;=&nbsp;"TABLE"&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;Left(shm("table_name"),&nbsp;1)&nbsp;&lt;&gt;&nbsp;"~"&nbsp;Then&nbsp;'这里过滤掉隐藏表<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j=j+1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;GetFileds(shm("table_name"))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br />&nbsp;&nbsp;End&nbsp;If<br />&nbsp;&nbsp;shm.MoveNext<br />Loop<br />response.write&nbsp;"共有&nbsp;"&j&"&nbsp;个数据表!"<br />else<br />response.write&nbsp;"&lt;h3&gt;请输入数据库相对路径查看具体内容!&lt;/h3&gt;"<br />end&nbsp;if<br />%&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br />&lt;%<br />Function&nbsp;GetFileds(TableName)<br />Set&nbsp;rs&nbsp;=&nbsp;server.createobject("adodb.recordset")<br />Dim&nbsp;SQL<br />SQL&nbsp;=&nbsp;"select&nbsp;*&nbsp;from&nbsp;"&nbsp;&&nbsp;TableName<br />rs.Open&nbsp;SQL,&nbsp;conn,&nbsp;1,&nbsp;1<br />Dim&nbsp;Cont<br />Cont&nbsp;=&nbsp;rs.Fields.Count<br />response.write&nbsp;"&lt;div&nbsp;style=""margin-bottom:10px;padding:5px;border:1px&nbsp;#dddddd&nbsp;solid;background:#eeeeee""&gt;"&vbcrlf<br />response.write&nbsp;"表&nbsp;&lt;font&nbsp;color=red&gt;&lt;b&gt;"&TableName&"&lt;/b&gt;&lt;/font&gt;&nbsp;中含有"&Cont&"个字段,具体如下:&lt;br&gt;"&vbcrlf<br />For&nbsp;i&nbsp;=&nbsp;0&nbsp;To&nbsp;Cont&nbsp;-&nbsp;1<br />&nbsp;&nbsp;dim&nbsp;filtype<br />&nbsp;&nbsp;select&nbsp;case&nbsp;rs.fields(i).type<br />&nbsp;&nbsp;&nbsp;case&nbsp;3&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;filtype="自动编号(数字)"<br />&nbsp;&nbsp;&nbsp;case&nbsp;202&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;filtype="字符"<br />&nbsp;&nbsp;&nbsp;case&nbsp;203&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;filtype="备注"<br />&nbsp;&nbsp;&nbsp;case&nbsp;125<br />&nbsp;&nbsp;&nbsp;&nbsp;filtype="日期"<br />&nbsp;&nbsp;&nbsp;case&nbsp;11<br />&nbsp;&nbsp;&nbsp;&nbsp;filtype="真/假(是/否)"<br />&nbsp;&nbsp;end&nbsp;select<br />&nbsp;&nbsp;response.write&nbsp;"&nbsp;&nbsp;&lt;font&nbsp;color=red&gt;"&i&"&lt;/font&gt;--&lt;font&nbsp;color=green&gt;&lt;b&gt;"&rs.fields(i).name&"&lt;/b&gt;&lt;/font&gt;--"&filtype&";&lt;br&nbsp;/&gt;"&vbcrlf<br />Next<br />response.write&nbsp;"&lt;/div&gt;"&vbcrlf<br />rs.Close<br />set&nbsp;rs=nothing<br />End&nbsp;Function<br />%&gt;<br /></div></div><br /><br /><br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">ASP在线压缩ACCESS数据库</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_108.html" />
      <updated>2008-8-11 21:06:59</updated>
      <published>2008-8-11 21:06:59</published>
      <id>http://dev.mo.cn/article_108.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;使用ACCESS作数据库的站长会发现，随着时间的增长你的数据库会越来越大，甚至你删除数据数据库不会变小还会变大，其实在access数据库里还有好几个隐藏表！有次一个人让我给他看看网站，网站占用空间500多M,他压缩后发给我后是50M，但当我给压缩数据库后发现，他的网站总占用空间不到10M...几十倍的差距。用下面的代码可以实现对access数据库的压缩，不会损伤数据库的任何数据，可安全使用<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;%<br />path=server.mappath("mydb.mdb")<br />is97=true&nbsp;'这个参数决定调用方法的参数不同,若是97数据库请设为true，否则为false<br />Response.Write&nbsp;PA_CompactDB(request.querystring("path"),&nbsp;is97)<br /><br /><br />Function&nbsp;PA_CompactDB(m_strDBFile,&nbsp;m_bIsAccess97)<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;objFSO,&nbsp;ofileb,ofilea,objEngine,&nbsp;strDBFileB,JET_3X,sizestring<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;bHasError<br />&nbsp;&nbsp;&nbsp;&nbsp;On&nbsp;Error&nbsp;Resume&nbsp;Next<br />&nbsp;&nbsp;&nbsp;&nbsp;bHasError&nbsp;=&nbsp;False<br />&nbsp;&nbsp;&nbsp;&nbsp;strDBFileA&nbsp;=&nbsp;Server.MapPath(m_strDBFile)<br />&nbsp;&nbsp;&nbsp;&nbsp;strDBFileB&nbsp;=&nbsp;left(strDBFileA,InStrRev(strDBFileA,"\"))<br />&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;objFSO&nbsp;=&nbsp;CreateObject("Scripting.FileSystemObject")<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;objFSO.FileExists(strDBFileA)&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;objEngine&nbsp;=&nbsp;CreateObject("JRO.JetEngine")<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;Err.Number&lt;&gt;0&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PA_CompactDB&nbsp;=&nbsp;"Error:"&nbsp;&&nbsp;Err.Description<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Err.Clear<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;ofileb=objFSO.getfile(strDBFileA)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sizestring="Before&nbsp;Compacted,Filesize&nbsp;is&nbsp;"&(ofileb.size/1024)&"KB;&lt;br&gt;"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;m_bIsAccess97&nbsp;=&nbsp;True&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objEngine.CompactDatabase&nbsp;"Provider=Microsoft.Jet.OLEDB.4.0;Data&nbsp;Source="&nbsp;&&nbsp;strDBFileA,&nbsp;_<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Provider=Microsoft.Jet.OLEDB.4.0;Data&nbsp;Source="&nbsp;&&nbsp;strDBFileB&nbsp;&&nbsp;"_temp.mdb;"&nbsp;_<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&&nbsp;"Jet&nbsp;OLEDB:objEngine&nbsp;Type="&nbsp;&&nbsp;JET_3X<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;objEngine.CompactDatabase&nbsp;"Provider=Microsoft.Jet.OLEDB.4.0;Data&nbsp;Source="&nbsp;&&nbsp;strDBFileA,&nbsp;_<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Provider=Microsoft.Jet.OLEDB.4.0;Data&nbsp;Source="&nbsp;&&nbsp;strDBFileB&nbsp;&&nbsp;"_temp.mdb"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objFSO.CopyFile&nbsp;strDBFileB&nbsp;&&nbsp;"_temp.mdb",strDBFileA<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objFSO.DeleteFile(strDBFileB&nbsp;&&nbsp;"_temp.mdb")<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;objEngine&nbsp;=&nbsp;nothing<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;ofilea=objFSO.getfile(strDBFileA)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sizestring=sizestring&"After&nbsp;Compacted,Filesize&nbsp;is&nbsp;"&(ofilea.size/1024)&"KB!&lt;br&gt;"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PA_CompactDB&nbsp;="Your&nbsp;Database("&nbsp;&&nbsp;strDBFileA&nbsp;&&nbsp;")&nbsp;has&nbsp;benn&nbsp;compacted&nbsp;successfully!&lt;br&gt;"&sizestring<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br />&nbsp;&nbsp;&nbsp;&nbsp;Else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PA_CompactDB&nbsp;=&nbsp;"Your&nbsp;database&nbsp;path&nbsp;is&nbsp;wrong!"<br />&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br />&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;objFSO&nbsp;=&nbsp;nothing<br />&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;ofileb&nbsp;=&nbsp;nothing<br />&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;ofilea&nbsp;=&nbsp;nothing<br />&nbsp;&nbsp;&nbsp;&nbsp;on&nbsp;Error&nbsp;Goto&nbsp;0<br />End&nbsp;Function<br />%&gt;<br /></div></div><br /><br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">XMLDOM对象方法详解</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_107.html" />
      <updated>2008-8-11 4:59:32</updated>
      <published>2008-8-11 4:59:32</published>
      <id>http://dev.mo.cn/article_107.html</id>
      <summary type="html">
      <![CDATA[abort&nbsp;方法&nbsp;<br />&nbsp;作&nbsp;&nbsp;&nbsp;用<br />&nbsp;&nbsp;abort&nbsp;方法取消一个进行中的异步下载&nbsp;<br />&nbsp;基本语法<br />&nbsp;&nbsp;xmlDocument.abort();<br />&nbsp;<br />说&nbsp;&nbsp;&nbsp;明<br />&nbsp;&nbsp;如果这个方法在异步下载时被呼叫，所有的解析动作会停止，而且在内存中的文件会被释放。<br />&nbsp;<br />范&nbsp;&nbsp;&nbsp;例<br />&nbsp;xmlDocument<br />&nbsp;-------------------------------------------------------------------------------------<br />AppendChild&nbsp;方法&nbsp;<br />&nbsp;作&nbsp;&nbsp;&nbsp;用<br />&nbsp;&nbsp;加上一个节点当作指定节点最后的子节点。&nbsp;<br />&nbsp;基本语法<br />&nbsp;&nbsp;xmlDocumentNode.appendChild(newChild);<br />&nbsp;<br />说&nbsp;&nbsp;&nbsp;明<br />&nbsp;&nbsp;newChild&nbsp;是附加子节点的地址。<br />&nbsp;<br />范&nbsp;&nbsp;&nbsp;例<br />&nbsp;docObj&nbsp;＝&nbsp;xmlDoc.documentElement;<br />alert(docObj.xml);<br />objNewNode&nbsp;＝&nbsp;docObj.appendChild(xmlDoc.documentElement.&nbsp;firstChild);<br />alert(docObj.xml);<br />&nbsp;&nbsp;-------------------------------------------------------------------------------------<br />cloneNode&nbsp;方法&nbsp;<br />&nbsp;作&nbsp;&nbsp;&nbsp;用<br />&nbsp;<br />&nbsp;基本语法<br />&nbsp;&nbsp;xmlDocumentNode.cloneNode(deep);<br />&nbsp;<br />说&nbsp;&nbsp;&nbsp;明<br />&nbsp;&nbsp;deep&nbsp;是一个布尔值。如果为true，此节点会复制以指定节点发展出去的所有节点。如果是false，只有指定的节点和它的属性被复制。<br />&nbsp;<br />范&nbsp;&nbsp;&nbsp;例<br />&nbsp;currNode&nbsp;＝&nbsp;xmlDoc.documentElement.childNodes.item(1);<br />objClonedNode&nbsp;＝&nbsp;currNode.cloneNode(1);<br />alert(objClonedNode.xml);<br />&nbsp;&nbsp;-------------------------------------------------------------------------------------<br />createAttribute&nbsp;方法&nbsp;<br />&nbsp;作&nbsp;&nbsp;&nbsp;用<br />&nbsp;&nbsp;建立一个指定名称的属性。&nbsp;<br />&nbsp;基本语法<br />&nbsp;&nbsp;xmlDocument.createAttribute(name);<br />&nbsp;<br />说&nbsp;&nbsp;&nbsp;明<br />&nbsp;&nbsp;name&nbsp;是被建立属性的名称。<br />&nbsp;<br />范&nbsp;&nbsp;&nbsp;例<br />&nbsp;objNewAtt&nbsp;＝&nbsp;xmlDoc.createAttribute("encryption");<br />alert(objNewAtt.xml);<br />&nbsp;&nbsp;-------------------------------------------------------------------------------------<br />createCDATASection&nbsp;方法&nbsp;<br />&nbsp;作&nbsp;&nbsp;&nbsp;用<br />&nbsp;<br />&nbsp;基本语法<br />&nbsp;&nbsp;xmlDocument.createCDATASection(data);<br />&nbsp;<br />说&nbsp;&nbsp;&nbsp;明<br />&nbsp;&nbsp;date&nbsp;是一个字符串，且包含了被置放在CDATA&nbsp;的资料。<br />&nbsp;<br />范&nbsp;&nbsp;&nbsp;例<br />&nbsp;objNewCDATA&nbsp;＝&nbsp;xmlDoc.createCDATASection("This&nbsp;is&nbsp;a&nbsp;CDATA&nbsp;Section");<br />alert(objNewCDATA.xml);<br />&nbsp;&nbsp;-------------------------------------------------------------------------------------<br />createComment&nbsp;方法&nbsp;<br />&nbsp;作&nbsp;&nbsp;&nbsp;用<br />&nbsp;<br />&nbsp;基本语法<br />&nbsp;&nbsp;xmlDocument.createComment(data);<br />&nbsp;<br />说&nbsp;&nbsp;&nbsp;明<br />&nbsp;&nbsp;data&nbsp;是一个字符串，且包含了被置放在批注的资料。<br />&nbsp;<br />范&nbsp;&nbsp;&nbsp;例<br />&nbsp;objNewComment&nbsp;＝&nbsp;xmlDoc.createComment("This&nbsp;is&nbsp;a&nbsp;comment");<br />alert(objNewComment.xml);<br />&nbsp;&nbsp;-------------------------------------------------------------------------------------<br />createDocumentFragment&nbsp;方法&nbsp;<br />&nbsp;作&nbsp;&nbsp;&nbsp;用<br />&nbsp;&nbsp;建立一个空的文件片断对象。&nbsp;<br />&nbsp;基本语法<br />&nbsp;&nbsp;xmlDocument.createDocumentFragment();<br />&nbsp;<br />说&nbsp;&nbsp;&nbsp;明<br />&nbsp;&nbsp;一个新的文件片断被建立，但没有加到文件树中。要加入片断到文件树中，必须使用插入方法，例如insertBefore、replaceChild&nbsp;或appendChild。<br />&nbsp;<br />范&nbsp;&nbsp;&nbsp;例<br />&nbsp;objNewFragment&nbsp;＝&nbsp;xmlDoc.createDocumentFragment();<br />alert(objNewFragment.xml);<br />&nbsp;&nbsp;-------------------------------------------------------------------------------------<br />createElement&nbsp;方法&nbsp;<br />&nbsp;作&nbsp;&nbsp;&nbsp;用<br />&nbsp;&nbsp;建立一个指定名称的元素。&nbsp;<br />&nbsp;基本语法<br />&nbsp;&nbsp;xmlDocument.createElement(tagName);<br />&nbsp;<br />说&nbsp;&nbsp;&nbsp;明<br />&nbsp;&nbsp;tagName&nbsp;是一个区分大小写的字符串来指定新元素名称。<br />&nbsp;<br />范&nbsp;&nbsp;&nbsp;例<br />&nbsp;objNewElement&nbsp;＝&nbsp;xmlDoc.createElement("TO");<br />alert(objNewElement.xml);<br />&nbsp;&nbsp;-------------------------------------------------------------------------------------<br />createEntityReference&nbsp;方法&nbsp;<br />&nbsp;作&nbsp;&nbsp;&nbsp;用<br />&nbsp;&nbsp;建立一个参照到指定名称的实体。&nbsp;<br />&nbsp;基本语法<br />&nbsp;&nbsp;xmlDocument.createEntityReference(name);<br />&nbsp;<br />说&nbsp;&nbsp;&nbsp;明<br />&nbsp;&nbsp;name&nbsp;是一个区分大小写的字符串，来指定新实体参照的名称。一个新的实体参照被建立，但是并没有被加到文件树中。若要将实体参照加到文件树中，必须使用一种插入方法，例如：insertBefore，replaceChild，或appendChild。<br />&nbsp;范&nbsp;&nbsp;&nbsp;例<br />&nbsp;objNewER&nbsp;＝&nbsp;xmlDoc.createEntityReference("eRef");<br />alert(objNewER.xml);<br />&nbsp;&nbsp;-------------------------------------------------------------------------------------<br /><br />load&nbsp;方法&nbsp;<br />&nbsp;作&nbsp;&nbsp;&nbsp;用<br />&nbsp;&nbsp;表示从指定位置加载的文件。&nbsp;<br />&nbsp;基本语法<br />&nbsp;&nbsp;boolValue&nbsp;＝&nbsp;xmlDocument.load(url);<br />&nbsp;<br />说&nbsp;&nbsp;&nbsp;明<br />&nbsp;&nbsp;url&nbsp;包含要被加载档案的URL&nbsp;的字符串。假如文件加载成功，传回值即为true。若加载失败，传回值为false。<br />&nbsp;<br />范&nbsp;&nbsp;&nbsp;例<br />&nbsp;boolValue&nbsp;＝&nbsp;xmlDoc.load("LstA_1.xml");<br />alert(boolValue);<br />&nbsp;&nbsp;-------------------------------------------------------------------------------------<br />loadXML&nbsp;方法&nbsp;<br />&nbsp;作&nbsp;&nbsp;&nbsp;用<br />&nbsp;&nbsp;加载一个XML&nbsp;文件或字符串的片断。&nbsp;<br />&nbsp;基本语法<br />&nbsp;&nbsp;boolValue&nbsp;＝&nbsp;xmlDocument.loadXML(xmlString);<br />&nbsp;<br />说&nbsp;&nbsp;&nbsp;明<br />&nbsp;&nbsp;xmlString&nbsp;是包含XML&nbsp;文字码的字符串。<br />&nbsp;<br />范&nbsp;&nbsp;&nbsp;例<br />&nbsp;xmlString&nbsp;＝&nbsp;"&lt;GREETING&gt;&lt;MESSAGE&gt;Hello!&lt;/MESSAGE&gt;&lt;/GREETING&gt;";<br />boolValue&nbsp;＝&nbsp;xmlDoc.loadXML(xmlString);<br />alert(boolValue);<br />&nbsp;&nbsp;-------------------------------------------------------------------------------------<br />nodeFromID&nbsp;方法&nbsp;<br />&nbsp;作&nbsp;&nbsp;&nbsp;用<br />&nbsp;&nbsp;传回节点ID&nbsp;符合指定值的节点。&nbsp;<br />&nbsp;基本语法<br />&nbsp;&nbsp;xmlDocumentNode&nbsp;＝&nbsp;xmlDocument.nodeFromID(idString);<br />&nbsp;<br />说&nbsp;&nbsp;&nbsp;明<br />&nbsp;&nbsp;idString&nbsp;是一个包含ID&nbsp;值的字符串。符合的节点必定是ID&nbsp;型态。若符合，将传回一个对象；若操作失败，则传回null。<br />&nbsp;<br />范&nbsp;&nbsp;&nbsp;例<br />&nbsp;objDocumentNode&nbsp;＝&nbsp;xmlDoc.nodeFromID("TO");<br />alert(objDocumentNode);<br />&nbsp;&nbsp;-------------------------------------------------------------------------------------<br />parsed&nbsp;方法&nbsp;<br />&nbsp;作&nbsp;&nbsp;&nbsp;用<br />&nbsp;&nbsp;会验证该指定的节点(node)及其衍生的子节点(descendants)是否已被解析过。&nbsp;<br />&nbsp;基本语法<br />&nbsp;&nbsp;boolValue&nbsp;＝&nbsp;xmlDocumentNode.parsed()；<br />&nbsp;<br />说&nbsp;&nbsp;&nbsp;明<br />&nbsp;&nbsp;如果全部的节点都已经被解析过了，则传回值为ture；如果有任何一个节点尚未被解析，传回值则为false。<br />&nbsp;<br />范&nbsp;&nbsp;&nbsp;例<br />&nbsp;currNode&nbsp;＝&nbsp;xmlDoc.documentElement.childNodes.item(0)；<br />boolValue&nbsp;＝&nbsp;currNode.parsed()；<br />alert(boolValue)；<br />&nbsp;&nbsp;-------------------------------------------------------------------------------------<br />removeChild&nbsp;方法&nbsp;<br />&nbsp;作&nbsp;&nbsp;&nbsp;用<br />&nbsp;&nbsp;会将指定的节点从节点清单中移除。&nbsp;<br />&nbsp;基本语法<br />&nbsp;&nbsp;objDocumentNode&nbsp;＝&nbsp;xmlDocumentNode.removeChild(oldChild);<br />&nbsp;<br />说&nbsp;&nbsp;&nbsp;明<br />&nbsp;&nbsp;oldChild&nbsp;为一个包含要被移除的节点对象。<br />&nbsp;<br />范&nbsp;&nbsp;&nbsp;例<br />&nbsp;objRemoveNode&nbsp;＝&nbsp;xmlDoc.documentElement.childNodes.item(3)；<br />alert(xmlDoc.xml);<br />xmlDoc.documentElement.removeChild(objRemoveNode)；<br />alert(xmlDoc.xml)；<br />&nbsp;&nbsp;-------------------------------------------------------------------------------------<br />replaceChild&nbsp;方法&nbsp;<br />&nbsp;作&nbsp;&nbsp;&nbsp;用<br />&nbsp;&nbsp;置换指定的旧子节点为提供的新子节点。&nbsp;<br />&nbsp;基本语法<br />&nbsp;&nbsp;objDocumentNode&nbsp;＝&nbsp;xmlDocumentNode.replaceChild(newChild,oldChild)；<br />&nbsp;<br />说&nbsp;&nbsp;&nbsp;明<br />&nbsp;&nbsp;newChild&nbsp;为包含新子节点的对象。如果此参数为null，则此旧子节点会被移除而不会被取代。oldChild&nbsp;为包含旧子节点的对象。<br />&nbsp;<br />范&nbsp;&nbsp;&nbsp;例<br />&nbsp;objOldNode&nbsp;＝&nbsp;xmlDoc.documentElement.childNodes.item(3)；<br />objNewNode&nbsp;＝&nbsp;xmlDoc.createComment("I've&nbsp;replaced&nbsp;the&nbsp;BCC&nbsp;element.")；<br />alert(xmlDoc.xml)；<br />xmlDoc.documentElement.replaceChild(objNewNode,objOldNode)；<br />alert(xmlDoc.xml)；<br />&nbsp;&nbsp;-------------------------------------------------------------------------------------<br />selectNodes&nbsp;方法&nbsp;<br />&nbsp;作&nbsp;&nbsp;&nbsp;用<br />&nbsp;&nbsp;传回所有符合提供样式(pattern)的节点。&nbsp;<br />&nbsp;基本语法<br />&nbsp;&nbsp;objDocumentNodeList&nbsp;＝&nbsp;xmlDocumentNode.selectNodes(patternString)；<br />&nbsp;<br />说&nbsp;&nbsp;&nbsp;明<br />&nbsp;&nbsp;patternString&nbsp;为一包含XSL&nbsp;样式的字符串。此方法会传回节点清单对象，包含符合样式的节点。如果没有符合的节点，则传回空的清单列表。<br />&nbsp;<br />范&nbsp;&nbsp;&nbsp;例<br />&nbsp;objNodeList＝xmlDoc.selectNodes（"/"）；<br />alert（objNodeList.item(0).xml）；<br />&nbsp;&nbsp;-------------------------------------------------------------------------------------<br />createNode&nbsp;方法&nbsp;<br />&nbsp;作&nbsp;&nbsp;&nbsp;用<br />&nbsp;&nbsp;建立一个指定型态、名称，及命名空间的新节点。&nbsp;<br />&nbsp;基本语法<br />&nbsp;&nbsp;xmlDocument.createNode(type,&nbsp;name,&nbsp;nameSpaceURI);<br />&nbsp;<br />说&nbsp;&nbsp;&nbsp;明<br />&nbsp;&nbsp;type&nbsp;用来确认要被建立的节点型态，name&nbsp;是一个字符串来确认新节点的名称，命名空间的前缀则是选择性的。nameSpaceURI&nbsp;是一个定义命名空间URI&nbsp;的字符串。如果前缀被包含在名称参数中，此节点会在nameSpaceURI&nbsp;的内文中以指定的前缀建立。如果不包含前缀，指定的命名空间会被视为预设的命名空间。<br />&nbsp;<br />范&nbsp;&nbsp;&nbsp;例<br />&nbsp;objNewNode&nbsp;＝&nbsp;xmlDoc.createNode(1,&nbsp;"TO",&nbsp;"");<br />alert(objNewNode.xml);<br />&nbsp;&nbsp;-------------------------------------------------------------------------------------<br />createProcessingInstruction&nbsp;方法&nbsp;<br />&nbsp;作&nbsp;&nbsp;&nbsp;用<br />&nbsp;&nbsp;建立一个新的处理指令，包含了指定的目标和数据。&nbsp;<br />&nbsp;基本语法<br />&nbsp;&nbsp;xmlDocument.createProcessingInstruction(target,&nbsp;data);<br />&nbsp;<br />说&nbsp;&nbsp;&nbsp;明<br />&nbsp;&nbsp;target&nbsp;是表示目标、名称或处理指令的字符串。Data&nbsp;是表示处理指令的值。一个新的处理指令被建立，但是并没有加到文件树中。要把处理指令加到文件树中，必须使用插入方法，例如：insertBefore、replaceChild，或是appendChild。<br />&nbsp;<br />范&nbsp;&nbsp;&nbsp;例<br />&nbsp;objNewPI&nbsp;＝xmlDoc.createProcessingInstruction(‘XML’,&nbsp;‘version＝"1.0"’);<br />alert(objNewPI.xml);<br />&nbsp;&nbsp;-------------------------------------------------------------------------------------<br />createTextNode&nbsp;方法&nbsp;<br />&nbsp;作&nbsp;&nbsp;&nbsp;用<br />&nbsp;&nbsp;建立一个新的text&nbsp;节点，并包含指定的数据。&nbsp;<br />&nbsp;基本语法<br />&nbsp;&nbsp;xmlDocument.createTextNode(data);<br />&nbsp;<br />说&nbsp;&nbsp;&nbsp;明<br />&nbsp;&nbsp;data&nbsp;是一个代表新text&nbsp;节点的字符串。一个新的text&nbsp;节点被建立，但是没有加到文件树中。若要将节点加到文件树中，必须使用插入方法，例如：insertBefore，replaceChild或appendChild。<br />&nbsp;<br />范&nbsp;&nbsp;&nbsp;例<br />&nbsp;objNewTextNode&nbsp;＝&nbsp;xmlDoc.createTextNode("This&nbsp;is&nbsp;a&nbsp;text&nbsp;node.");<br />alert(objNewTextNode.xml);<br />&nbsp;&nbsp;-------------------------------------------------------------------------------------<br /><br />getElementsByTagName&nbsp;方法&nbsp;<br />&nbsp;作&nbsp;&nbsp;&nbsp;用<br />&nbsp;&nbsp;传回指定名称的元素集合。&nbsp;<br />&nbsp;基本语法<br />&nbsp;&nbsp;objNodeList&nbsp;＝&nbsp;xmlDocument.getElementsByTagName(tagname);<br />&nbsp;<br />说&nbsp;&nbsp;&nbsp;明<br />&nbsp;&nbsp;tagname&nbsp;是一个字符串，代表找到的元素卷标名称。使用tagname&nbsp;"*"传回文件中所有找到的元素。<br />&nbsp;<br />范&nbsp;&nbsp;&nbsp;例<br />&nbsp;objNodeList&nbsp;＝&nbsp;xmlDoc.getElementsByTagName("*");<br />alert(objNodeList.item(1).xml);<br />&nbsp;&nbsp;-------------------------------------------------------------------------------------<br />haschildnodes&nbsp;方法&nbsp;<br />&nbsp;作&nbsp;&nbsp;&nbsp;用<br />&nbsp;&nbsp;如果指定的节点有一个或更多子节点，传回值为true。&nbsp;<br />&nbsp;基本语法<br />&nbsp;&nbsp;boolValue&nbsp;＝&nbsp;xmlDocumentNode.hasChildNodes()&nbsp;;<br />&nbsp;<br />说&nbsp;&nbsp;&nbsp;明<br />&nbsp;&nbsp;如果此节点有子节点传回值为true，否则传回false&nbsp;值。<br />&nbsp;<br />范&nbsp;&nbsp;&nbsp;例<br />&nbsp;boolValue&nbsp;＝&nbsp;xmlDoc.documentElement.hasChildNodes();<br />alert(boolValue);<br />&nbsp;&nbsp;-------------------------------------------------------------------------------------<br /><br />insertBefore&nbsp;方法&nbsp;<br />&nbsp;作&nbsp;&nbsp;&nbsp;用<br />&nbsp;&nbsp;在指定的节点前插入一个子节点。&nbsp;<br />&nbsp;基本语法<br />&nbsp;&nbsp;objDocumentNode&nbsp;＝&nbsp;xmlDocumentNode.insertBefore(newChild,refChild);<br />&nbsp;<br />说&nbsp;&nbsp;&nbsp;明<br />&nbsp;&nbsp;newChild&nbsp;是一个包含新子节点地址的对象，refChild&nbsp;是参照节点的地址。新子节点被插到参照节点之前。如果refChild&nbsp;参数没有包含在内，新的子节点会被插到子节点列表的末端。<br />&nbsp;<br />范&nbsp;&nbsp;&nbsp;例<br />&nbsp;objRefNode&nbsp;＝&nbsp;xmlDoc.documentElement;<br />alert(xmlDoc.xml);<br />objNewNode&nbsp;＝&nbsp;xmlDoc.createComment("This&nbsp;is&nbsp;a&nbsp;comment");<br />xmlDoc.insertBefore(objNewNode,&nbsp;objRefNode);<br />alert(xmlDoc.xml);<br />&nbsp;<br />&nbsp;-------------------------------------------------------------------------------------<br />selectSingleNode&nbsp;传回第一个符合样式的节点。&nbsp;<br />&nbsp;作&nbsp;&nbsp;&nbsp;用<br />&nbsp;&nbsp;传回第一个符合样式的节点。&nbsp;<br />&nbsp;基本语法<br />&nbsp;&nbsp;objDocumentNode&nbsp;＝&nbsp;xmlDocumentNode.selectSingleNode(patternString)；<br />&nbsp;<br />说&nbsp;&nbsp;&nbsp;明<br />&nbsp;&nbsp;patternString&nbsp;为一包含XSL&nbsp;样式的字符串。此方法会传回第一个符合的节点对象，如果没有符合的节点，则传回null。<br />&nbsp;<br />范&nbsp;&nbsp;&nbsp;例<br />&nbsp;objNode&nbsp;＝&nbsp;xmlDoc.selectSingleNode("EMAIL/BCC")；<br />alert(objNode.xml)；<br />&nbsp;&nbsp;-------------------------------------------------------------------------------------<br /><br />transformNode&nbsp;方法&nbsp;<br />&nbsp;作&nbsp;&nbsp;&nbsp;用<br />&nbsp;&nbsp;使用提供的样式表来处理该节点及其子节点。&nbsp;<br />&nbsp;基本语法<br />&nbsp;&nbsp;strTransformedDocument&nbsp;＝&nbsp;xmlDocumentNode.transformNode(stylesheet)；<br />&nbsp;<br />说&nbsp;&nbsp;&nbsp;明<br />&nbsp;&nbsp;stylesheet&nbsp;为一XML&nbsp;文件或是片断包含负责节点转换工作的XSL&nbsp;元素。此方法会传回一包含转换结果的字符串。<br />&nbsp;<br />范&nbsp;&nbsp;&nbsp;例<br />&nbsp;var&nbsp;style&nbsp;＝&nbsp;new&nbsp;ActiveXObject("Microsoft.XMLDOM")；<br />style.load("LstA_49.xsl")；<br />strTransform&nbsp;＝&nbsp;xmlDoc.transformNode(style.documentElement)；<br />alert(strTransform)；<br />&nbsp;<br /><br /><br /><br /><br />]]>
      </summary>
      <category term="" label="JavaScript/DOM" scheme="http://dev.mo.cn/cat_diary_9.html" />
   </entry>
   <entry>
      <title type="html">XMLDOM对象属性详解</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_106.html" />
      <updated>2008-8-11 2:53:41</updated>
      <published>2008-8-11 2:53:41</published>
      <id>http://dev.mo.cn/article_106.html</id>
      <summary type="html">
      <![CDATA[async&nbsp;属性&nbsp;<br /><br />作&nbsp;用&nbsp;async&nbsp;属性表示是否允许异步的下载。&nbsp;<br />基本语法&nbsp;boolValue&nbsp;＝&nbsp;XMLDocument.async;XMLDocument.async&nbsp;＝&nbsp;boolValue;<br />说&nbsp;明&nbsp;布尔值是可擦写的（read/write），如果准许异步下载，值为True；反之则为False。<br />范&nbsp;例<br /><br />xmlDoc.async&nbsp;＝&nbsp;"false";&nbsp;<br />alert(xmlDoc.async);&nbsp;<br /><br />=================================================<br /><br />attribute&nbsp;属性&nbsp;<br /><br />作&nbsp;用&nbsp;传回目前节点的属性列表。&nbsp;<br />基本语法&nbsp;objAttributeList&nbsp;=&nbsp;xmlNode.attributes;<br />说&nbsp;明&nbsp;传回一个物件。如果此节点不能包含属性，则传回空值。<br />范&nbsp;例&nbsp;<br /><br />objAttList&nbsp;＝&nbsp;xmlDoc.documentElement.attributes;&nbsp;<br />alert(objAttList);&nbsp;<br /><br />=================================================<br /><br />childNodes&nbsp;属性&nbsp;<br /><br />作&nbsp;用&nbsp;传回一个节点清单，包含该节点所有可用的子节点。&nbsp;<br />基本语法&nbsp;objNodeList=node.childNodes;<br />说&nbsp;明&nbsp;传回一个物件。假如这节点没有子节点，传回null。<br />范&nbsp;例&nbsp;<br /><br />objNodeList&nbsp;＝&nbsp;xmlDoc.childNodes;&nbsp;<br />alert(objNodeList);&nbsp;<br /><br />=================================================<br /><br />doctype&nbsp;属性&nbsp;<br /><br />作&nbsp;用&nbsp;传回文件型态节点，包含目前文件的DTD。这节点是一般的文件型态宣告，例如，节点，名为EMAIL&nbsp;的节点物件会被传回。&nbsp;<br />基本语法&nbsp;objDocType=xmlDocument.doctype;<br />说&nbsp;明&nbsp;传回一个对象，这个属性是只读的。假如这文件不包含DTD，会传回null。<br />范&nbsp;例&nbsp;<br /><br />objDocType&nbsp;＝&nbsp;xmlDoc.doctype;&nbsp;<br />alert(objDocType.nodeName);&nbsp;<br /><br />=================================================<br /><br />documentElement&nbsp;属性&nbsp;<br /><br />作&nbsp;用&nbsp;确认XML&nbsp;文件的根（Root）节点。&nbsp;<br />基本语法&nbsp;objDoc=xmlDocument.documentElement;<br />说&nbsp;明&nbsp;回一个在单一根文件元素中包含数据的对象。此属性可读/写，如果文件中不包含根节点，将传回null。<br />范&nbsp;例&nbsp;<br /><br />objDocRoot&nbsp;＝&nbsp;xmlDoc.documentElement;&nbsp;<br />alert(objDocRoot);&nbsp;<br /><br />=================================================<br /><br />firstChild&nbsp;属性&nbsp;<br /><br />作&nbsp;用&nbsp;确认在目前节点中的第一个子元素。&nbsp;<br />基本语法&nbsp;objFirstChild&nbsp;＝&nbsp;xmlDocNode.firstChild&nbsp;;<br />说&nbsp;明&nbsp;此属性只读且会传回一对象，如果节点中没有包含第一个子元素，将传回null。<br />范&nbsp;例&nbsp;<br /><br />objFirstChild&nbsp;＝&nbsp;xmlDoc.documentElement.firstChild;&nbsp;<br />alert(objFirstChild);&nbsp;<br /><br />=================================================<br /><br />implementation&nbsp;属性&nbsp;<br /><br />作&nbsp;用&nbsp;DOM&nbsp;应用程序能使用其它实作中的对象。implementation&nbsp;属性确认目前XML&nbsp;文件的DOMimplementation&nbsp;对象。&nbsp;<br />基本语法&nbsp;objImplementation&nbsp;＝&nbsp;xmlDocument.implementation;<br />说&nbsp;明&nbsp;此属性只读且传回一个对象。<br />范&nbsp;例&nbsp;<br /><br />objImp&nbsp;＝&nbsp;xmlDoc.implementation;&nbsp;<br />alert(objImp);&nbsp;<br /><br />=================================================<br /><br />lastChild&nbsp;属性&nbsp;<br /><br />作&nbsp;用&nbsp;确认目前节点中最后的子元素。&nbsp;<br />基本语法&nbsp;objLastChild&nbsp;＝&nbsp;xmlDocNode.lastChild;<br />说&nbsp;明&nbsp;此属性只读且传回一个对象。如果节点中没有包含最后子元素，将传回null。<br />范&nbsp;例&nbsp;<br /><br />objLastChild&nbsp;＝&nbsp;xmlDoc.documentElement.lastChild;&nbsp;<br />alert(objLastChild);&nbsp;<br /><br />=================================================<br /><br />nextSibling&nbsp;属性&nbsp;<br /><br />作&nbsp;用&nbsp;在目前文件节点的子节点列表中传回下一个兄弟节点。&nbsp;<br />基本语法&nbsp;objNextSibling&nbsp;＝&nbsp;xmlDocNode.nextSibling;<br />说&nbsp;明&nbsp;此属性是只读且传回一个对象。如果节点中没有包含其它的相关节点，会传回null。<br />范&nbsp;例&nbsp;<br /><br />objSibling&nbsp;＝&nbsp;xmlDoc.documentElement.childNodes.item(1)&nbsp;.nextSibling;&nbsp;<br />alert(objSibling);&nbsp;<br /><br />=================================================<br /><br />nodeName&nbsp;属性&nbsp;<br /><br />作&nbsp;用&nbsp;传回代表目前节点名称的字符串。&nbsp;<br />基本语法&nbsp;strNodeName&nbsp;＝&nbsp;xmlDocNode.nodeName&nbsp;;<br />说&nbsp;明&nbsp;传回一个字符串。这个属性是只读的，传回元素名称、属性或实体参照。<br />范&nbsp;例&nbsp;<br /><br />strNodeName&nbsp;＝&nbsp;xmlDoc.documentElement.nodeName;&nbsp;<br />alert(strNodeName);&nbsp;<br /><br />=================================================<br /><br />nodeType&nbsp;属性&nbsp;<br /><br />作&nbsp;用&nbsp;辨识节点的DOM&nbsp;型态。&nbsp;<br />基本语法&nbsp;numNodeType&nbsp;＝&nbsp;xmlDocNode.nodeType&nbsp;;<br />说&nbsp;明&nbsp;此属性只读且传回一个数值。&nbsp;<br /><br />有效的数值符合以下的型别：&nbsp;<br />1-ELEMENT&nbsp;<br />2-ATTRIBUTE&nbsp;<br />3-TEXT&nbsp;<br />4-CDATA&nbsp;<br />5-ENTITY&nbsp;REFERENCE&nbsp;<br />6-ENTITY&nbsp;<br />7-PI&nbsp;(processing&nbsp;instruction)&nbsp;<br />8-COMMENT&nbsp;<br />9-DOCUMENT&nbsp;<br />10-DOCUMENT&nbsp;TYPE&nbsp;<br />11-DOCUMENT&nbsp;FRAGMENT&nbsp;<br />12-NOTATION&nbsp;<br />　&nbsp;<br />范&nbsp;例&nbsp;<br /><br />numNodeType&nbsp;＝&nbsp;xmlDoc.documentElement.nodeType;&nbsp;<br />alert(numNodeType);&nbsp;<br /><br />=================================================<br /><br />nodeValue&nbsp;属性&nbsp;<br /><br />作&nbsp;用&nbsp;传回指定节点相关的文字。这并非一个元素中数据的值，而是与一个节点相关且未解析的文字，就像一个属性或者一个处理指令。&nbsp;<br />基本语法&nbsp;varNodeValue&nbsp;＝&nbsp;xmlDocNode.nodeValue;<br />说&nbsp;明&nbsp;传回的文字代表以节点的nodeType&nbsp;属性为主的型态值。（请参考附录中的nodeType&nbsp;属性。）因为节点型态可能是几种数据型态中的一种，传回值也因此有差异。传回null&nbsp;的节点型态有：DOCUMENT、ELEMENT、DOCUMENT&nbsp;TYPE、DOCUMENT&nbsp;FRAGMENT、ENTITY、ENTITY&nbsp;REFERENCE，和NOTATION。此属性可擦写。<br />范&nbsp;例&nbsp;<br /><br />varNodeValue&nbsp;＝&nbsp;xmlDoc.documentElement.nodeValue;&nbsp;<br />alert(varNodeValue);&nbsp;<br /><br />=================================================<br /><br />ondataavailable&nbsp;属性&nbsp;<br /><br />作&nbsp;用&nbsp;指定一个事件来处理ondataavailable&nbsp;事件。&nbsp;<br />基本语法&nbsp;xmlDocNode.ondataavailable&nbsp;＝&nbsp;value;<br />说&nbsp;明&nbsp;此属性是唯写，允许文件作者一旦数据为可用，即可尽快的使用数据来运作。<br />范&nbsp;例&nbsp;<br /><br />xmlDoc.ondataavailable&nbsp;＝&nbsp;alert("Data&nbsp;is&nbsp;now&nbsp;available.");&nbsp;<br /><br />=================================================<br /><br />onreadystatechange&nbsp;属性&nbsp;<br /><br />作&nbsp;用&nbsp;指定一个事件来处理onreadystatechange&nbsp;事件。这个事件能辨识readyState&nbsp;属性的改变。&nbsp;<br />基本语法&nbsp;xmlDocNode.onreadystatechange&nbsp;＝&nbsp;value;<br />说&nbsp;明&nbsp;此属性是唯写的，允许文件作者指定当readyState&nbsp;属性改变时呼叫事件。<br />范&nbsp;例&nbsp;<br /><br />xmlDoc.onreadystatechange&nbsp;＝&nbsp;alert("The&nbsp;readyState&nbsp;property&nbsp;has&nbsp;changed.");&nbsp;<br /><br />=================================================<br /><br />ownerDocument&nbsp;属性&nbsp;<br /><br />作&nbsp;用&nbsp;传回文件的根节点，包含目前节点。&nbsp;<br />基本语法&nbsp;objOwnerDoc&nbsp;＝&nbsp;xmlDocument.ownerDocument;<br />说&nbsp;明&nbsp;此属性是只读的，传回一个包含文件根节点的对象，包含特定的节点。<br />范&nbsp;例&nbsp;<br /><br />objOwnerDoc&nbsp;＝&nbsp;xmlDoc.childNodes.item(2).ownerDocument;&nbsp;<br />alert(objOwnerDoc);&nbsp;<br /><br />=================================================<br /><br />parentNode&nbsp;属性&nbsp;<br /><br />作&nbsp;用&nbsp;传回目前节点的父节点。只能应用在有父节点的节点中。&nbsp;<br />基本语法&nbsp;objParentNode&nbsp;＝&nbsp;xmlDocumentNode.parentNode;<br />说&nbsp;明&nbsp;此属性是只读的，传回包含指定节点的父节点对象。如果此节点不存在于文件树中，将传回null。<br />范&nbsp;例&nbsp;<br /><br />objParentNode&nbsp;＝&nbsp;xmlDoc.childNodes.item(1).parentNode;&nbsp;<br />alert(objParentNode);&nbsp;<br /><br />=================================================<br /><br />parseError&nbsp;属性&nbsp;<br /><br />作&nbsp;用&nbsp;传回一个DOM&nbsp;解析错误对象，此对象描述最后解析错误的讯息。&nbsp;<br />基本语法&nbsp;objParseErr&nbsp;＝&nbsp;xmlDocument.parseError;<br />说&nbsp;明&nbsp;此属性是只读的。如果没有错误发生，将传回0。<br />范&nbsp;例&nbsp;<br /><br />objParseErr&nbsp;＝&nbsp;xmlDoc.parseError;&nbsp;<br />alert(objParseErr);&nbsp;<br /><br />=================================================<br /><br />previousSibling&nbsp;属性&nbsp;<br /><br />作&nbsp;用&nbsp;传回目前节点之前的兄弟节点。&nbsp;<br />基本语法&nbsp;objPrevSibling&nbsp;＝&nbsp;xmlDocument.previousSibling;<br />说&nbsp;明&nbsp;传回一个对象，这个属性是只读的。若该节点没有包含前面的兄弟节点，会传回null。<br />范&nbsp;例&nbsp;<br /><br />objPrevSibling&nbsp;＝&nbsp;xmlDoc.documentElement.childNodes.item(3).previousSibling;&nbsp;<br />alert(objPrevSibling);&nbsp;<br /><br />=================================================<br /><br />readyState&nbsp;属性&nbsp;<br /><br />作&nbsp;用&nbsp;传回XML&nbsp;文件资料的目前状况。&nbsp;<br />基本语法&nbsp;intState&nbsp;＝&nbsp;xmlDocument.readyState;<br />说&nbsp;明&nbsp;这个属性是只读的，传回值有以下的可能：&nbsp;<br />0-UNINITIALIZED：XML&nbsp;对象被产生，但没有任何文件被加载。&nbsp;<br />1-LOADING：加载程序进行中，但文件尚未开始解析。&nbsp;<br />2-LOADED：部分的文件已经加载且进行解析，但对象模型尚未生效。&nbsp;<br />3-INTERACTIVE：仅对已加载的部分文件有效，在此情况下，对象模型是有效但只读的。&nbsp;<br />4-COMPLETED：文件已完全加载，代表加载成功。&nbsp;<br />范&nbsp;例&nbsp;<br /><br />alert("The&nbsp;readyState&nbsp;property&nbsp;is&nbsp;"&nbsp;+&nbsp;xmlDoc.readyState);&nbsp;<br /><br />=================================================<br /><br />url&nbsp;属性&nbsp;<br /><br />作&nbsp;用&nbsp;传回最近一次加载XML&nbsp;文件的URL。&nbsp;<br />基本语法&nbsp;strDocUrl&nbsp;＝&nbsp;xmlDocument.url;<br />说&nbsp;明&nbsp;这个属性是只读的，传回最近一次加载成功文件的URL，若文件仅存在主存储器中（表示该文件并非由外部档案加载)，则传回null。<br />范&nbsp;例&nbsp;<br /><br />alert(xmlDoc.url);&nbsp;<br /><br />=================================================<br /><br />validateOnParse&nbsp;属性&nbsp;<br /><br />作&nbsp;用&nbsp;告诉解析器文件是否有效。&nbsp;<br />基本语法&nbsp;boolValidate&nbsp;＝&nbsp;xmlDocument.validateOnParse;&nbsp;xmlDocument.validateOnParse&nbsp;=&nbsp;boolValidate;&nbsp;<br />说&nbsp;明&nbsp;此属性是可擦写的。如果传回值为true，表示文件被解析时被确认是有效的。如果传回false，表示文件是无效的，并被认为只是标准格式的（well-formed）文件。<br />范&nbsp;例&nbsp;<br /><br />xmlDoc.validateOnParse&nbsp;＝&nbsp;true;&nbsp;<br />alert(xmlDoc.validateOnParse);&nbsp;<br /><br />=================================================<br /><br />xml&nbsp;属性&nbsp;<br /><br />作&nbsp;用&nbsp;传回指定节点的XML&nbsp;描述和所有的子节点。&nbsp;<br />基本语法&nbsp;xmlValue&nbsp;＝&nbsp;xmlDocumentNode.xml;<br />说&nbsp;明&nbsp;此属性是只读的。<br />范&nbsp;例&nbsp;<br /><br />xmlValue&nbsp;＝&nbsp;xmlDoc.documentElement.xml;&nbsp;<br />alert(xmlValue);&nbsp;<br /><br /><br />]]>
      </summary>
      <category term="" label="JavaScript/DOM" scheme="http://dev.mo.cn/cat_diary_9.html" />
   </entry>
   <entry>
      <title type="html">简简单单制作网页导航栏</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_105.html" />
      <updated>2008-8-10 15:08:40</updated>
      <published>2008-8-10 15:08:40</published>
      <id>http://dev.mo.cn/article_105.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;网页导航对于每一个站点来说都是相当重要的，导航能够让人一下就能知道你网站的大体内容是关于什么的，下面来简单制作一个导航栏，用两种方法：<br />1.DIV+LI(经常见这样的站点，具体代码不一定和本例一样)<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;!DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN"&nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;<br />&lt;html&nbsp;xmlns="http://www.w3.org/1999/xhtml"&nbsp;xml:lang="zh-cn"&nbsp;lang="zh-cn"&gt;<br />&lt;head&gt;<br />&lt;meta&nbsp;http-equiv="Content-Type"&nbsp;content="text/html;&nbsp;charset=gb2312"&nbsp;/&gt;<br />&lt;title&gt;DIV+UL打造导航栏--艾恩ASP学习BLOG--http://dev.mo.cn&lt;/title&gt;<br />&lt;link&nbsp;rel="stylesheet"&nbsp;href="css.css"&nbsp;type="text/css"&nbsp;/&gt;<br />&lt;script&nbsp;type="text/javascript"&gt;<br />&nbsp;function&nbsp;setbg(obj,act){<br />&nbsp;&nbsp;&nbsp;if(act=='over'){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.style.cssText='background:#dddddd;';<br />&nbsp;&nbsp;&nbsp;}else{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.style.cssText='background:none;';<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;}<br />&lt;/script&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;div&nbsp;id="menu"&gt;<br />&nbsp;&lt;ul&nbsp;id="menu_list"&gt;<br />&nbsp;&nbsp;&lt;li&nbsp;onmouseover="setbg(this,'over');"&nbsp;onmouseout="setbg(this,'out');"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;a&nbsp;href="http://dev.mo.cn/index.asp""&gt;首页&lt;/a&gt;<br />&nbsp;&nbsp;&lt;/li&gt;<br />&nbsp;&nbsp;&lt;li&nbsp;onmouseover="setbg(this,'over');"&nbsp;onmouseout="setbg(this,'out');"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;a&nbsp;href="http://dev.mo.cn/mydiary.asp"&gt;技术文章&lt;/a&gt;<br />&nbsp;&nbsp;&lt;/li&gt;<br />&nbsp;&nbsp;&lt;li&nbsp;onmouseover="setbg(this,'over');"&nbsp;onmouseout="setbg(this,'out');"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;a&nbsp;href="http://dev.mo.cn/mydiary.asp?typ=self"&gt;个人日志&lt;/a&gt;<br />&nbsp;&nbsp;&lt;/li&gt;<br />&nbsp;&nbsp;&lt;li&nbsp;onmouseover="setbg(this,'over');"&nbsp;onmouseout="setbg(this,'out');"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;a&nbsp;href="http://dev.mo.cn/myfiles.asp"&gt;资源下载&lt;/a&gt;<br />&nbsp;&nbsp;&lt;/li&gt;<br />&nbsp;&nbsp;&lt;li&nbsp;onmouseover="setbg(this,'over');"&nbsp;onmouseout="setbg(this,'out');"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;a&nbsp;href="http://dev.mo.cn/ly.asp"&gt;给我留言&lt;/a&gt;<br />&nbsp;&nbsp;&lt;/li&gt;<br />&nbsp;&nbsp;&lt;li&nbsp;onmouseover="setbg(this,'over');"&nbsp;onmouseout="setbg(this,'out');"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;a&nbsp;href="http://dev.mo.cn/links.asp"&gt;友情站点&lt;/a&gt;<br />&nbsp;&nbsp;&lt;/li&gt;<br />&nbsp;&lt;/ul&gt;<br />&lt;/div&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br /></div></div><br /><br />2.DIV+A<br />可以看出，用这种方法代码明显比上面的精简！<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;!DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN"&nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;<br />&lt;html&nbsp;xmlns="http://www.w3.org/1999/xhtml"&nbsp;xml:lang="zh-cn"&nbsp;lang="zh-cn"&gt;<br />&lt;head&gt;<br />&lt;meta&nbsp;http-equiv="Content-Type"&nbsp;content="text/html;&nbsp;charset=gb2312"&nbsp;/&gt;<br />&lt;title&gt;DIV+A打造导航栏--艾恩ASP学习BLOG--http://dev.mo.cn&lt;/title&gt;<br />&lt;link&nbsp;rel="stylesheet"&nbsp;href="css_a.css"&nbsp;type="text/css"&nbsp;/&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;div&nbsp;id="menu"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;a&nbsp;href="http://dev.mo.cn/index.asp""&gt;首页&lt;/a&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;a&nbsp;href="http://dev.mo.cn/mydiary.asp"&gt;技术文章&lt;/a&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;a&nbsp;href="http://dev.mo.cn/mydiary.asp?typ=self"&gt;个人日志&lt;/a&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;a&nbsp;href="http://dev.mo.cn/myfiles.asp"&gt;资源下载&lt;/a&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;a&nbsp;href="http://dev.mo.cn/ly.asp"&gt;给我留言&lt;/a&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;a&nbsp;href="http://dev.mo.cn/links.asp"&gt;友情站点&lt;/a&gt;<br />&lt;/div&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br /></div></div><br /><br />作导航的方法有很多种，上面只是简单的例子，作<span style="color:red;">抛砖引玉</span>用,相信大家能作出更好的效果来，下面提供整个示例的代码下载：<br /><a href="http://dev.mo.cn/upfiles/2008081014562510.rar" target="new">http://dev.mo.cn/upfiles/2008081014562510.rar</a>]]>
      </summary>
      <category term="" label="HTML/CSS" scheme="http://dev.mo.cn/cat_diary_8.html" />
   </entry>
   <entry>
      <title type="html">操作Xml数据的Cls_Person类说明</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_104.html" />
      <updated>2008-8-10 3:06:50</updated>
      <published>2008-8-10 3:06:50</published>
      <id>http://dev.mo.cn/article_104.html</id>
      <summary type="html">
      <![CDATA[<br />Cls_Person类用来完成与联系人信息相关的各种操作,包括添加,修改和删除等等,它使用VBScript编写.Cls_Person包括Id,Name,Nick,Mobile,Tel,Email,QQ和Company属性,对应于XML文件中的Person节点.Cls_Person包括GetInfoFromXml,AddToXml,EditToXml和DeleteFormXml四个主要方法,分别完成获取信息,添加信息,修改信息和删除信息四个功能.&nbsp;<br /><br />Cls_Person的具体实现如下,<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&nbsp;<br />'***************************************************&nbsp;<br />'&nbsp;说明：Person类&nbsp;<br />'&nbsp;作者：gwd&nbsp;2002-11-06&nbsp;<br />'&nbsp;引用：pub/constpub.asp&nbsp;<br />'***************************************************&nbsp;<br />Class&nbsp;Cls_Person&nbsp;<br />Private&nbsp;m_intId&nbsp;'&nbsp;Id,对应Person节点在Persons集合中的位置&nbsp;<br />Private&nbsp;m_strName&nbsp;'&nbsp;姓名&nbsp;<br />Private&nbsp;m_strNick&nbsp;'&nbsp;英文名&nbsp;<br />Private&nbsp;m_strMobile&nbsp;'&nbsp;手机&nbsp;<br />Private&nbsp;m_strTel&nbsp;'&nbsp;电话&nbsp;<br />Private&nbsp;m_strEmail&nbsp;'&nbsp;电子邮件&nbsp;<br />Private&nbsp;m_strQQ&nbsp;'&nbsp;QQ号&nbsp;<br />Private&nbsp;m_strCompany&nbsp;'&nbsp;所在公司&nbsp;<br />Private&nbsp;m_strError&nbsp;'&nbsp;出错信息&nbsp;<br />'&nbsp;类初始化&nbsp;<br />Private&nbsp;Sub&nbsp;Class_Initialize()&nbsp;<br />　m_strError&nbsp;=&nbsp;""&nbsp;<br />　m_intId&nbsp;=&nbsp;-1&nbsp;<br />End&nbsp;Sub&nbsp;<br />'&nbsp;类释放&nbsp;<br />Private&nbsp;Sub&nbsp;Class_Terminate()&nbsp;<br />　m_strError&nbsp;=&nbsp;""&nbsp;<br />End&nbsp;Sub&nbsp;<br />'-----读写各个属性---------------------------&nbsp;<br />Public&nbsp;Property&nbsp;Get&nbsp;Id&nbsp;<br />　Id&nbsp;=&nbsp;m_intId&nbsp;<br />End&nbsp;Property&nbsp;<br />Public&nbsp;Property&nbsp;Let&nbsp;Id(intId)&nbsp;<br />　m_intId&nbsp;=&nbsp;intId&nbsp;<br />End&nbsp;Property&nbsp;<br />Public&nbsp;Property&nbsp;Get&nbsp;Name&nbsp;<br />Name&nbsp;=&nbsp;m_strName&nbsp;<br />End&nbsp;Property&nbsp;<br />Public&nbsp;Property&nbsp;Let&nbsp;Name(strName)&nbsp;<br />　m_strName&nbsp;=&nbsp;strName&nbsp;<br />End&nbsp;Property&nbsp;<br />Public&nbsp;Property&nbsp;Get&nbsp;Nick&nbsp;<br />　Nick&nbsp;=&nbsp;m_strNick&nbsp;<br />End&nbsp;Property&nbsp;<br />Public&nbsp;Property&nbsp;Let&nbsp;Nick(strNick)&nbsp;<br />　m_strNick&nbsp;=&nbsp;strNick&nbsp;<br />End&nbsp;Property&nbsp;<br />Public&nbsp;Property&nbsp;Get&nbsp;Mobile&nbsp;<br />　Mobile&nbsp;=&nbsp;m_strMobile&nbsp;<br />End&nbsp;Property&nbsp;<br />Public&nbsp;Property&nbsp;Let&nbsp;Mobile(strMobile)&nbsp;<br />　m_strMobile&nbsp;=&nbsp;strMobile&nbsp;<br />End&nbsp;Property&nbsp;<br />Public&nbsp;Property&nbsp;Get&nbsp;Tel&nbsp;<br />　Tel&nbsp;=&nbsp;m_strTel&nbsp;<br />End&nbsp;Property&nbsp;<br />Public&nbsp;Property&nbsp;Let&nbsp;Tel(strTel)&nbsp;<br />　m_strTel&nbsp;=&nbsp;strTel&nbsp;<br />End&nbsp;Property&nbsp;<br />Public&nbsp;Property&nbsp;Get&nbsp;Email&nbsp;<br />　Email&nbsp;=&nbsp;m_strEmail&nbsp;<br />End&nbsp;Property&nbsp;<br />Public&nbsp;Property&nbsp;Let&nbsp;Email(strEmail)&nbsp;<br />　m_strEmail&nbsp;=&nbsp;strEmail&nbsp;<br />End&nbsp;Property&nbsp;<br />Public&nbsp;Property&nbsp;Get&nbsp;QQ&nbsp;<br />　QQ&nbsp;=&nbsp;m_strQQ&nbsp;<br />End&nbsp;Property&nbsp;<br />Public&nbsp;Property&nbsp;Let&nbsp;QQ(strQQ)&nbsp;<br />　m_strQQ&nbsp;=&nbsp;strQQ&nbsp;<br />End&nbsp;Property&nbsp;<br />Public&nbsp;Property&nbsp;Get&nbsp;Company&nbsp;<br />　Company&nbsp;=&nbsp;m_strCompany&nbsp;<br />End&nbsp;Property&nbsp;<br />Public&nbsp;Property&nbsp;Let&nbsp;Company(strCompany)&nbsp;<br />　m_strCompany&nbsp;=&nbsp;strCompany&nbsp;<br />End&nbsp;Property&nbsp;<br />'-----------------------------------------------&nbsp;<br />'&nbsp;获取错误信息&nbsp;<br />Public&nbsp;Function&nbsp;GetLastError()&nbsp;<br />　GetLastError&nbsp;=&nbsp;m_strError&nbsp;<br />End&nbsp;Function&nbsp;<br />'&nbsp;私有方法,添加错误信息&nbsp;<br />Private&nbsp;Sub&nbsp;AddErr(strEcho)&nbsp;<br />　m_strError&nbsp;=&nbsp;m_strError&nbsp;+&nbsp;"＜Div&nbsp;CLASS=""alert""＞"&nbsp;&&nbsp;strEcho&nbsp;&&nbsp;"＜/Div＞"&nbsp;<br />End&nbsp;Sub&nbsp;<br />'&nbsp;清除错误信息&nbsp;<br />Public&nbsp;Function&nbsp;ClearError()&nbsp;<br />　m_strError&nbsp;=&nbsp;""&nbsp;<br />End&nbsp;Function&nbsp;<br />'&nbsp;从Xml中读取指定节点的数据,并填充各个属性&nbsp;<br />'&nbsp;需要首先设置Id&nbsp;<br />Public&nbsp;Function&nbsp;GetInfoFromXml(objXmlDoc)&nbsp;<br />　Dim&nbsp;objNodeList&nbsp;<br />　Dim&nbsp;I&nbsp;<br />　ClearError&nbsp;<br />　If&nbsp;objXmlDoc&nbsp;Is&nbsp;Nothing&nbsp;Then&nbsp;<br />　　GetInfoFromXml&nbsp;=&nbsp;False&nbsp;<br />　　AddErr&nbsp;"Dom对象为空值"&nbsp;<br />　　Exit&nbsp;Function&nbsp;<br />　End&nbsp;If&nbsp;<br />　If&nbsp;CStr(m_intId)&nbsp;=&nbsp;"-1"&nbsp;Then&nbsp;<br />　　GetInfoFromXml&nbsp;=&nbsp;False&nbsp;<br />　　AddErr&nbsp;"未正确设置联系人对象的ID属性"&nbsp;<br />　　Exit&nbsp;Function&nbsp;<br />　Else&nbsp;<br />　　I&nbsp;=&nbsp;m_intId&nbsp;-&nbsp;1&nbsp;'&nbsp;要读取得节点位置&nbsp;<br />　End&nbsp;If&nbsp;<br />　'&nbsp;选择并读取节点信息,赋予各个属性&nbsp;<br />　Set&nbsp;objNodeList&nbsp;=&nbsp;objXmlDoc.getElementsByTagName("Person")&nbsp;<br />　If&nbsp;objNodeList.length&nbsp;-&nbsp;m_intId&nbsp;＞=&nbsp;0&nbsp;Then&nbsp;<br />　　On&nbsp;Error&nbsp;Resume&nbsp;Next&nbsp;<br />　　m_strName&nbsp;=&nbsp;objNodeList(I).selectSingleNode("Name").Text&nbsp;<br />　　m_strNick&nbsp;=&nbsp;objNodeList(I).selectSingleNode("Nick").Text&nbsp;<br />　　m_strMobile&nbsp;=&nbsp;objNodeList(I).selectSingleNode("Mobile").Text&nbsp;<br />　　m_strTel&nbsp;=&nbsp;objNodeList(I).selectSingleNode("Tel").Text&nbsp;<br />　　m_strEmail&nbsp;=&nbsp;objNodeList(I).selectSingleNode("Email").Text&nbsp;<br />　　m_strQQ&nbsp;=&nbsp;objNodeList(I).selectSingleNode("QQ").Text&nbsp;<br />　　m_strCompany&nbsp;=&nbsp;objNodeList(I).selectSingleNode("Company").Text&nbsp;<br />　　GetInfoFromXml&nbsp;=&nbsp;True&nbsp;<br />　Else&nbsp;<br />　　GetInfoFromXml&nbsp;=&nbsp;False&nbsp;<br />　　AddErr&nbsp;"获取联系信息发生错误"&nbsp;<br />　　Set&nbsp;objNodeList&nbsp;=&nbsp;Nothing&nbsp;<br />　　Exit&nbsp;Function&nbsp;<br />　End&nbsp;If&nbsp;<br />　Set&nbsp;objNodeList&nbsp;=&nbsp;Nothing&nbsp;<br />End&nbsp;Function&nbsp;<br />'&nbsp;添加信息到XML文件中&nbsp;<br />'&nbsp;需要首先设置好要填充的属性&nbsp;<br />Public&nbsp;Function&nbsp;AddToXml(objXmlDoc)&nbsp;<br />　Dim&nbsp;objPerson,&nbsp;objNode&nbsp;<br />　ClearError&nbsp;<br />　If&nbsp;objXmlDoc&nbsp;Is&nbsp;Nothing&nbsp;Then&nbsp;<br />　　AddToXml&nbsp;=&nbsp;False&nbsp;<br />　　AddErr&nbsp;"Dom对象为空值"&nbsp;<br />　　Exit&nbsp;Function&nbsp;<br />　End&nbsp;If&nbsp;<br />　'&nbsp;创建Person节点&nbsp;<br />　Set&nbsp;objPerson&nbsp;=&nbsp;objXmlDoc.createElement("Person")&nbsp;<br />　objXmlDoc.documentElement.appendChild&nbsp;objPerson&nbsp;<br />　'&nbsp;创建各个子节点&nbsp;<br />　'-----------------------------------------------------&nbsp;<br />　Set&nbsp;objNode&nbsp;=&nbsp;objXmlDoc.createElement("Name")&nbsp;<br />　objNode.Text&nbsp;=&nbsp;m_strName&nbsp;<br />　objPerson.appendChild&nbsp;objNode&nbsp;<br />　Set&nbsp;objNode&nbsp;=&nbsp;objXmlDoc.createElement("Nick")&nbsp;<br />　objNode.Text&nbsp;=&nbsp;m_strNick&nbsp;<br />　objPerson.appendChild&nbsp;objNode&nbsp;<br />　Set&nbsp;objNode&nbsp;=&nbsp;objXmlDoc.createElement("Mobile")&nbsp;<br />　objNode.Text&nbsp;=&nbsp;m_strMobile&nbsp;<br />　objPerson.appendChild&nbsp;objNode&nbsp;<br />　Set&nbsp;objNode&nbsp;=&nbsp;objXmlDoc.createElement("Tel")&nbsp;<br />　objNode.Text&nbsp;=&nbsp;m_strTel&nbsp;<br />　objPerson.appendChild&nbsp;objNode&nbsp;<br />　Set&nbsp;objNode&nbsp;=&nbsp;objXmlDoc.createElement("Email")&nbsp;<br />　objNode.Text&nbsp;=&nbsp;m_strEmail&nbsp;<br />　objPerson.appendChild&nbsp;objNode&nbsp;<br />　Set&nbsp;objNode&nbsp;=&nbsp;objXmlDoc.createElement("QQ")&nbsp;<br />　objNode.Text&nbsp;=&nbsp;m_strQQ&nbsp;<br />　objPerson.appendChild&nbsp;objNode&nbsp;<br />　Set&nbsp;objNode&nbsp;=&nbsp;objXmlDoc.createElement("Company")&nbsp;<br />　objNode.Text&nbsp;=&nbsp;m_strCompany&nbsp;<br />　objPerson.appendChild&nbsp;objNode&nbsp;<br />　'-----------------------------------------------------&nbsp;<br />　Set&nbsp;objNode&nbsp;=&nbsp;Nothing&nbsp;<br />　Set&nbsp;objPerson&nbsp;=&nbsp;Nothing&nbsp;<br />　&nbsp;On&nbsp;Error&nbsp;Resume&nbsp;Next&nbsp;<br />　objXmlDoc.save&nbsp;Server.MapPath(C_XMLFILE)&nbsp;'保存XML文件&nbsp;<br />　If&nbsp;Err.Number&nbsp;=&nbsp;0&nbsp;Then&nbsp;<br />　　AddToXml&nbsp;=&nbsp;True&nbsp;<br />　Else&nbsp;<br />　　AddToXml&nbsp;=&nbsp;False&nbsp;<br />　　AddErr&nbsp;Err.Description&nbsp;<br />　End&nbsp;If&nbsp;<br />End&nbsp;Function&nbsp;<br />'&nbsp;从XML文件中删除数据&nbsp;<br />'&nbsp;需要首先设置Id&nbsp;<br />Public&nbsp;Function&nbsp;DeleteFromXml(objXmlDoc)&nbsp;<br />　Dim&nbsp;objNodeList,&nbsp;objNode&nbsp;<br />　ClearError&nbsp;<br />　If&nbsp;objXmlDoc&nbsp;Is&nbsp;Nothing&nbsp;Then&nbsp;<br />　　DeleteFromXml&nbsp;=&nbsp;False&nbsp;<br />　　AddErr&nbsp;"Dom对象为空值"&nbsp;<br />　　Exit&nbsp;Function&nbsp;<br />　End&nbsp;If&nbsp;<br />　If&nbsp;CStr(m_intId)&nbsp;=&nbsp;"-1"&nbsp;Then&nbsp;<br />　　DeleteFromXml&nbsp;=&nbsp;False&nbsp;<br />　　AddErr&nbsp;"未正确设置联系人对象的ID属性"&nbsp;<br />　　Exit&nbsp;Function&nbsp;<br />　End&nbsp;If&nbsp;<br />　Set&nbsp;objNodeList&nbsp;=&nbsp;objXmlDoc.getElementsByTagName("Person")&nbsp;<br />　If&nbsp;objNodeList.length&nbsp;-&nbsp;m_intId&nbsp;＜&nbsp;0&nbsp;Then&nbsp;<br />　　DeleteFromXml&nbsp;=&nbsp;False&nbsp;<br />　　AddErr&nbsp;"未找到相应的联系人"&nbsp;<br />　　Set&nbsp;objNodeList&nbsp;=&nbsp;Nothing&nbsp;<br />　　Exit&nbsp;Function&nbsp;<br />　End&nbsp;If&nbsp;<br />　On&nbsp;Error&nbsp;Resume&nbsp;Next&nbsp;<br />　Set&nbsp;objNode&nbsp;=&nbsp;objXmlDoc.documentElement.removeChild(objNodeList(intId-1))&nbsp;<br />　If&nbsp;objNode&nbsp;Is&nbsp;Nothing&nbsp;Then&nbsp;<br />　　DeleteFromXml&nbsp;=&nbsp;False&nbsp;<br />　　AddErr&nbsp;"删除联系人失败"&nbsp;<br />　　Set&nbsp;objNodeList&nbsp;=&nbsp;Nothing&nbsp;<br />　　Exit&nbsp;Function&nbsp;<br />　Else&nbsp;<br />　　objXmlDoc.save&nbsp;Server.MapPath(C_XMLFILE)&nbsp;<br />　End&nbsp;If&nbsp;<br />　Set&nbsp;objNode&nbsp;=&nbsp;Nothing&nbsp;<br />　Set&nbsp;objNodeList&nbsp;=&nbsp;Nothing&nbsp;<br />　If&nbsp;Err.Number&nbsp;=&nbsp;0&nbsp;Then&nbsp;<br />　　DeleteFromXml&nbsp;=&nbsp;True&nbsp;<br />　Else&nbsp;<br />　　DeleteFromXml&nbsp;=&nbsp;False&nbsp;<br />　　AddErr&nbsp;Err.Description&nbsp;<br />　End&nbsp;If&nbsp;<br />End&nbsp;Function&nbsp;<br />'&nbsp;修改XML文件中的数据&nbsp;<br />'&nbsp;需要首先设置好Id&nbsp;<br />Public&nbsp;Function&nbsp;EditToXml(objXmlDoc)&nbsp;<br />　Dim&nbsp;objPersonList,&nbsp;objOldPerson,&nbsp;objNewPerson,&nbsp;objNode&nbsp;<br />　ClearError&nbsp;<br />　If&nbsp;objXmlDoc&nbsp;Is&nbsp;Nothing&nbsp;Then&nbsp;<br />　　EditToXml&nbsp;=&nbsp;False&nbsp;<br />　　AddErr&nbsp;"Dom对象为空值"&nbsp;<br />　　Exit&nbsp;Function&nbsp;<br />　End&nbsp;If&nbsp;<br />　If&nbsp;CStr(m_intId)&nbsp;=&nbsp;"-1"&nbsp;Then&nbsp;<br />　　EditToXml&nbsp;=&nbsp;False&nbsp;<br />　　AddErr&nbsp;"未正确设置联系人对象的ID属性"&nbsp;<br />　　Exit&nbsp;Function&nbsp;<br />　End&nbsp;If&nbsp;<br />　Set&nbsp;objPersonList&nbsp;=&nbsp;objXmlDoc.getElementsByTagName("Person")&nbsp;<br />　If&nbsp;objPersonList.length&nbsp;-&nbsp;m_intId&nbsp;＜&nbsp;0&nbsp;Then&nbsp;<br />　　DeleteFromXml&nbsp;=&nbsp;False&nbsp;<br />　　AddErr&nbsp;"未找到相应的联系人"&nbsp;<br />　　Set&nbsp;objPersonList&nbsp;=&nbsp;Nothing&nbsp;<br />　　Exit&nbsp;Function&nbsp;<br />　End&nbsp;If&nbsp;<br />　Set&nbsp;objOldPerson&nbsp;=&nbsp;objPersonList(m_intId-1)&nbsp;'&nbsp;要修改的旧节点&nbsp;<br />　Set&nbsp;objNewPerson&nbsp;=&nbsp;objXmlDoc.createElement("Person")&nbsp;'&nbsp;用来替换旧节点的新节点&nbsp;<br />　Set&nbsp;objNode&nbsp;=&nbsp;objXmlDoc.createElement("Name")&nbsp;<br />　objNode.Text&nbsp;=&nbsp;m_strName&nbsp;<br />　objNewPerson.appendChild&nbsp;objNode&nbsp;<br />　Set&nbsp;objNode&nbsp;=&nbsp;objXmlDoc.createElement("Nick")&nbsp;<br />　objNode.Text&nbsp;=&nbsp;m_strNick&nbsp;<br />　objNewPerson.appendChild&nbsp;objNode&nbsp;<br />　Set&nbsp;objNode&nbsp;=&nbsp;objXmlDoc.createElement("Mobile")&nbsp;<br />　objNode.Text&nbsp;=&nbsp;m_strMobile&nbsp;<br />　objNewPerson.appendChild&nbsp;objNode&nbsp;<br />　Set&nbsp;objNode&nbsp;=&nbsp;objXmlDoc.createElement("Tel")&nbsp;<br />　objNode.Text&nbsp;=&nbsp;m_strTel&nbsp;<br />　objNewPerson.appendChild&nbsp;objNode&nbsp;<br />　Set&nbsp;objNode&nbsp;=&nbsp;objXmlDoc.createElement("Email")&nbsp;<br />　objNode.Text&nbsp;=&nbsp;m_strEmail&nbsp;<br />　objNewPerson.appendChild&nbsp;objNode&nbsp;<br />　Set&nbsp;objNode&nbsp;=&nbsp;objXmlDoc.createElement("QQ")&nbsp;<br />　objNode.Text&nbsp;=&nbsp;m_strQQ&nbsp;<br />　objNewPerson.appendChild&nbsp;objNode&nbsp;<br />　Set&nbsp;objNode&nbsp;=&nbsp;objXmlDoc.createElement("Company")&nbsp;<br />　objNode.Text&nbsp;=&nbsp;m_strCompany&nbsp;<br />　objNewPerson.appendChild&nbsp;objNode&nbsp;<br />　On&nbsp;Error&nbsp;Resume&nbsp;Next&nbsp;<br />　'&nbsp;进行替换&nbsp;<br />　Set&nbsp;objNode&nbsp;=&nbsp;objXmlDoc.documentElement.replaceChild(objNewPerson,&nbsp;objOldPerson)&nbsp;<br />　If&nbsp;objNode&nbsp;Is&nbsp;Nothing&nbsp;Then&nbsp;<br />　EditToXml&nbsp;=&nbsp;False&nbsp;<br />　AddErr&nbsp;"修改联系人失败"&nbsp;<br />　Set&nbsp;objOldPerosn&nbsp;=&nbsp;Nothing&nbsp;<br />　Set&nbsp;objNewPerson&nbsp;=&nbsp;Nothing&nbsp;<br />　Set&nbsp;objPersonList&nbsp;=&nbsp;Nothing&nbsp;<br />　Exit&nbsp;Function&nbsp;<br />Else&nbsp;<br />　objXmlDoc.save&nbsp;Server.MapPath(C_XMLFILE)&nbsp;<br />End&nbsp;If&nbsp;<br />Set&nbsp;objOldPerson&nbsp;=&nbsp;Nothing&nbsp;<br />Set&nbsp;objNewPerson&nbsp;=&nbsp;Nothing&nbsp;<br />Set&nbsp;objPersonList&nbsp;=&nbsp;Nothing&nbsp;<br />If&nbsp;Err.Number&nbsp;=&nbsp;0&nbsp;Then&nbsp;<br />　EditToXml&nbsp;=&nbsp;True&nbsp;<br />Else&nbsp;<br />　EditToXml&nbsp;=&nbsp;False&nbsp;<br />　AddErr&nbsp;Err.Description&nbsp;<br />End&nbsp;If&nbsp;<br />End&nbsp;Function&nbsp;<br />End&nbsp;Class&nbsp;<br /></div></div><br /><br /><br />]]>
      </summary>
      <category term="" label="JavaScript/DOM" scheme="http://dev.mo.cn/cat_diary_9.html" />
   </entry>
   <entry>
      <title type="html">ASP代码封装成DLL</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_103.html" />
      <updated>2008-8-9 17:55:35</updated>
      <published>2008-8-9 17:55:35</published>
      <id>http://dev.mo.cn/article_103.html</id>
      <summary type="html">
      <![CDATA[服务器端组件<br /><br />首先,服务器端的组件要有别于客户端的组件.客户端的组件是通过网络传输,依靠HTML来起作用.而且只能在IE上有用.但是服&nbsp;务器端的组件是运行在服务器端,它在服务器上执行各种操作.因此,所有的浏览器都能享用,它依靠的是服务器而不是浏览器.&nbsp;<br /><br />当IIS被请求执行一个ASP程序,它首先会在ASP文件中找到&lt;%%&gt;标签之间的代码,并且执行它(也可以是&lt;script&nbsp;runat=server&gt;&lt;/script&gt;之间的代码).如果这个ASP程序在先前被调用过,那么它就会用&nbsp;内存中的编译过的程序来向用户返回HTML代码,如果没有,那么它就重新编译.这里ASP就比CGI多一点速度优势,因为CGI&nbsp;是每一个请求都使用一个线程.这样就大大消耗了服务器的资源.<br /><br />想不想你写的程序自己就能在IIS运行!?!现在你就行了!使用VB5(当然现在是VB6了),你就能建立Dynamic&nbsp;Linked&nbsp;Libraries(DLL文件),它能在IIS上直接运行(如果有asp文件来请求的话).&nbsp;<br /><br />系统和软件的要求<br /><br />你需要一个32位的操作系统来运行ASP.当然你也得安装IIS或PWS.我们下面的程序是在windows&nbsp;95+PWS+VB&nbsp;5的环境下开发的.<br /><br />我们开始吧<br /><br />启动你的VB,选择ActiveX图标.这个图标可以在新建工程找到!VB会提供一个默认的工程名(project1)和类名(&nbsp;class1).我们会将这两个名字都改掉.在改名之前,请首先确认我们拥有Microsoft&nbsp;Active&nbsp;Server&nbsp;Pages&nbsp;ObjectLibrary,它在我们的程序非常有用.从菜单中选择"工程",然后在其中选择"引用",就会出现"引用"窗&nbsp;口<br />从中选择Microsoft&nbsp;Active&nbsp;Server&nbsp;Pages&nbsp;ObjectLibrary.<br /><br />给工程和类命名<br /><br />现在我们来根据自己的爱好来为project1和class1来命名吧!给它们命名也是很重要的,我们以后会用这个工程名和类名&nbsp;来创建这个组件的实例!后面详细介绍.<br /><br />如何改名,我就不想多说了!<br />我们的工程名改为Exmaple,类名为Helloword<br /><br />怎样使用工程和类<br /><br />现在我们有了我们自己的工程(Example1)和类名(Hello<br />World).以后我们就会在ASP代码中使用它们的名字来&nbsp;引用这个组件.在ASP中我们就这样引用,如下:<br /><br />Set&nbsp;ObjReference=Server.CreateObject("ProjectName.ClassName")<br /><br />对于我们工程的引用就是:<br />SetObjReference=Server.CreateObject("Example1.HelloWorld")<br />现在我们就能用ObjReference来调用我们在组件中所创建的函数,子程序.下面我们会来写一个SayHello的子程序&nbsp;,我们执行它的代码如下:<br /><br />&lt;%<br />Set&nbsp;ObjReference=Server.CreateObject("Example1.HelloWorld")<br />ObjReference.SayHello<br />%&gt;<br /><br />为了在Helloword类中使用ASP的方法,你必须在此类中写一个OnStartPage<br />子函数.如下:<br /><br />Public&nbsp;Sub&nbsp;OnStartPage(PassedScriptingContext&nbsp;As&nbsp;ScriptingContext)<br />&nbsp;&nbsp;Set&nbsp;MyScriptingContext=PassedScriptingContext<br />EndSub<br /><br />现在,无论什么时候用户访问一个带有本组件的ASP文件,IIS就会把ScriptingContext传送给我们的对象请我们&nbsp;使用.这个ScriptingContext包括了全部的ASP方法和属性.实现上,这使得我们有能力访问所有ASP的对象.看&nbsp;下面的代码:<br /><br />Public&nbsp;Sub&nbsp;OnStartPage(PassedScriptingContext&nbsp;As&nbsp;ScriptingContext)<br />&nbsp;&nbsp;Set&nbsp;MyScriptingContext=PassedScriptingContext<br />&nbsp;&nbsp;Set&nbsp;MyApplication=MyScriptingContext.Application<br />&nbsp;&nbsp;Set&nbsp;MyRequest=MyScriptingContext.Request<br />&nbsp;&nbsp;Set&nbsp;MyResponse=MyScriptingContext.Response<br />&nbsp;&nbsp;Set&nbsp;MyServer=MyScriptingContext.Server<br />&nbsp;&nbsp;Set&nbsp;MySession=MyScriptingContext.Session<br />End&nbsp;Sub<br /><br />以后我们就能用在VB中用MyApplication来代替ASP中的Application,同理可以代替Request,Server.....,不过我们来是要在OnStartPage之前来申明这些变量:&nbsp;<br /><br />Private&nbsp;MyScriptingContext&nbsp;As&nbsp;ScriptingContext<br />Private&nbsp;MyApplication&nbsp;As&nbsp;Application<br />Private&nbsp;MyRequest&nbsp;As&nbsp;Request<br />Private&nbsp;MyResponse&nbsp;As&nbsp;Response<br />Private&nbsp;MyServer&nbsp;As&nbsp;Server<br />Private&nbsp;MySession&nbsp;As&nbsp;Session<br /><br />使用ASP的对象<br /><br />我们的变量现在就能像标准的ASP对象来使用了!比如,我们经常在ASP中用Request.form()来收集提交表单的数据&nbsp;.现在我们在我们的VB中实现这个功能,代码如下:<br /><br />用ASP中实现:<br />&lt;%<br />MyTempVariable=Request.Form("userName")<br />Response.Write("youentered"&MyTempVariable&"asyourus&nbsp;ername")<br />%&gt;<br /><br />在VB中实现:<br /><br />MyTempVariable=MyRequest.Form("userName")<br />My&nbsp;Response.Write("youentered"&MyTempVariable&"asyourus&nbsp;ername")<br /><br />通过使用MyResponse来代替Response,我们能够使用所有Response的方法,当然,MyResponse这&nbsp;个名字可以随便来取,你甚至可以就取Response.<br />另一件我们得注意的是,我们得在我们的建立的类中,写上OnEndPage子函数,这个OnStartPage是相反的!OnS&nbsp;tartPage是创建对象,OnEndPage是消毁对象.<br /><br />Public&nbsp;Sub&nbsp;OnEndPage()<br />&nbsp;&nbsp;Set&nbsp;MyScriptingContext=Nothing<br />&nbsp;&nbsp;Set&nbsp;MyApplication=Nothing<br />&nbsp;&nbsp;Set&nbsp;MyRequest=Nothing<br />&nbsp;&nbsp;Set&nbsp;MyResponse=Nothing<br />&nbsp;&nbsp;Set&nbsp;MyServer=Nothing<br />&nbsp;&nbsp;Set&nbsp;MySession=Nothing<br />End&nbsp;Sub<br /><br />SayHello方法<br /><br />我们来建立一个子函数,用于显示"HolleWorld".这个SayHello方法只是HelloWorld这个类中一个子函&nbsp;数,我们以后会在ASP中用以下的显示这个方法<br /><br />&lt;%<br />Set&nbsp;ObjReference=Server.CreateObject("Example1.HelloWorld")<br />ObjReference.SayHello<br />%&gt;<br /><br />SayHello的程序,很简单的!<br /><br />Public&nbsp;Sub&nbsp;SayHello()<br />&nbsp;&nbsp;MyResponse.Write("HelloWorld")<br />End&nbsp;Sub<br /><br />现在一个小型的组件编写完成,剩下的工作就是编译这个组件,在"工程"菜单中保存它,取什么名字都可以,我们用Exmaple1&nbsp;.vbp吧!然后就用在菜单中选择"makeexmaple1.dll",将其编译成DLL文件.一个组件就真正完成了!&nbsp;<br /><br />注意,编译了此组件那么你就得先把你的PWS关掉,然后再编译此组件.否则VB就会告诉你些组件在使用中.<br /><br />在ASP中使用我们的自己的组件.<br /><br />当你更正了在编译中的错误,成功地编译了example1这个工程,现在你就得拿出你最喜欢的HTML编辑器来写下下面的语句,&nbsp;保存为ASP文件.<br /><br />&lt;HTML&gt;<br />&lt;HEAD&gt;<br />&lt;TITLE&gt;Example1&lt;/TITLE&gt;<br />&lt;/HEAD&gt;<br /><br />&lt;BODY&gt;<br /><br />&lt;%<br />Set&nbsp;ObjReference=Server.CreateObject("Example1.HelloWorld")<br />ObjReference.SayHello<br />%&gt;<br /><br />&lt;/BODY&gt;<br />&lt;/HTML&gt;<br /><br />运行后即可看到结果:<br /><br />HelloWorld<br /><br />注册组件<br /><br />如果你想和你的朋友,邻居分享你的组件,那么你就得在你的系统上注册你的组件.我们一般使用Regsvr32.exe来注册组件&nbsp;.注册后你的组件会出现在Win95/Win98的windows/system目录中.下面是一个注册的例子:&nbsp;<br /><br />egsvr32.exe&nbsp;C:\wwwroot\Example1\Example1.dll<br /><br />在你的系统中,VB会自动给你注册,所以你很少用到Regsvr32.exe<br /><br />这里只是写了一个非常小的组件,你可以写好自己的更大的组件,而且还可以用VB中的很多控件.<br /><br /><span style="color:red;">注意:每重新编译一次组件，都要重新启动iis，并且重新注册组件!!!!!!!</span><br /><br />下面是测试成功的代码(工程名example,类名test1)<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />Option&nbsp;Explicit<br />Private&nbsp;Context&nbsp;As&nbsp;ScriptingContext<br />Private&nbsp;Application&nbsp;As&nbsp;Application<br />Private&nbsp;Response&nbsp;As&nbsp;Response<br />Private&nbsp;Request&nbsp;As&nbsp;Request<br />Private&nbsp;Session&nbsp;As&nbsp;Session<br />Private&nbsp;Server&nbsp;As&nbsp;Server<br /><br />Public&nbsp;Sub&nbsp;OnStartPage(PassedscriptContext&nbsp;As&nbsp;ScriptingContext)<br />Set&nbsp;Context&nbsp;=&nbsp;PassedscriptContext<br />Set&nbsp;Application&nbsp;=&nbsp;Context.Application<br />Set&nbsp;Request&nbsp;=&nbsp;Context.Request<br />Set&nbsp;Response&nbsp;=&nbsp;Context.Response<br />Set&nbsp;Server&nbsp;=&nbsp;Context.Server<br />Set&nbsp;Session&nbsp;=&nbsp;Context.Session<br /><br />End&nbsp;Sub<br />Public&nbsp;Sub&nbsp;hello()<br />Response.Write&nbsp;"hello&nbsp;world"<br />End&nbsp;Sub<br /><br /><br />Public&nbsp;Sub&nbsp;OnEndPage()<br />Set&nbsp;Application&nbsp;=&nbsp;Nothing<br />Set&nbsp;Request&nbsp;=&nbsp;Nothing<br />Set&nbsp;Response&nbsp;=&nbsp;Nothing<br />Set&nbsp;Server&nbsp;=&nbsp;Nothing<br />Set&nbsp;Session&nbsp;=&nbsp;Nothing<br />Set&nbsp;Context&nbsp;=&nbsp;Nothing<br />End&nbsp;Sub<br /></div></div><br /><br />test.asp代码<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;%<br />dim&nbsp;t<br />set&nbsp;t=server.createobject("example.test1")<br />t.hello()<br />%&gt;<br /></div></div><br /><br /><br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">利用404错误页面实现UrlRewrite</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_102.html" />
      <updated>2008-8-9 10:37:25</updated>
      <published>2008-8-9 10:37:25</published>
      <id>http://dev.mo.cn/article_102.html</id>
      <summary type="html">
      <![CDATA[要求:网站编码为utf-8,不适用于GB2312;<br />替换字符的正则可以自己增加和修改，以适合自己的网站；<br />将下面代码保存到err404.html，然后设置404错误页面为err404.html页；<br />测试地址<a href="http://bbs.ii-home.cn/html/index.html" target="new">http://bbs.ii-home.cn/html/index.html</a><br />注:转载请注明本出处!谢谢!<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;script&nbsp;type="text/javascript"&nbsp;language="javascript"&gt;<br />var&nbsp;id=/(detial|show)\.asp\?id\=([0-9]+)/gi;<br />var&nbsp;flag=/([a-z0-9_]+)\.asp\?flag\=xml/gi;<br />var&nbsp;re_id=/(detial|show)\_([0-9]+)\.html/gi;<br />var&nbsp;re_flag=/([a-z0-9_]+)\.rss/gi;<br />var&nbsp;host='blog.ii-home.cn';<br />var&nbsp;ss=window.location.href;<br />//ss=ss.replace(window.location.hostname,host);<br />var&nbsp;Temp=getasp(ss);<br />getNotice(Temp);<br /><br />function&nbsp;createobj()&nbsp;{<br />&nbsp;if&nbsp;(window.ActiveXObject)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;ActiveXObject("Microsoft.XMLHTTP");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp;(window.XMLHttpRequest)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;XMLHttpRequest();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />function&nbsp;getNotice(url)&nbsp;{<br />&nbsp;&nbsp;var&nbsp;oBao=createobj();<br />&nbsp;&nbsp;var&nbsp;my_url=url;<br />&nbsp;&nbsp;oBao.open('get',my_url,false);&nbsp;<br />&nbsp;&nbsp;oBao.onreadystatechange=function(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(oBao.readyState==4){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(oBao.status==200){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;returnStr=oBao.responseText;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;Temps=gethtml(returnStr);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.write(Temps);<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;document.write("未找到您输入的地址或服务器505错误!");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;oBao.send(null);&nbsp;<br />&nbsp;}<br />&nbsp;<br />//将str中的asp网址按照正则替换<br />function&nbsp;gethtml(str){<br />&nbsp;&nbsp;var&nbsp;Temp_str=str.replace(id,'$1_$2.html');<br />&nbsp;&nbsp;Temp_str=Temp_str.replace(/index\.asp/gi,'index.html');<br />&nbsp;&nbsp;Temp_str=Temp_str.replace(/myfiles\.asp/gi,'myfiles.html');<br />&nbsp;&nbsp;Temp_str=Temp_str.replace(/mydiary\.asp\?typ\=self/gi,'mydiary_self.html');<br />&nbsp;&nbsp;Temp_str=Temp_str.replace(/mydiary\.asp/gi,'mydiary.html');<br />&nbsp;&nbsp;Temp_str=Temp_str.replace(flag,'$1.rss');<br />&nbsp;&nbsp;Temp_str=Temp_str.replace(/xml_diary\.asp/gi,'xml_diary.html');<br />&nbsp;&nbsp;Temp_str=Temp_str.replace(/xml_download\.asp/gi,'xml_download.html');<br />&nbsp;&nbsp;Temp_str=Temp_str.replace(/xml_links\.asp/gi,'xml_links.html');<br />&nbsp;&nbsp;Temp_str=Temp_str.replace(/xml_ly\.asp/gi,'xml_ly.html');<br />&nbsp;&nbsp;Temp_str=Temp_str.replace(/ly\.asp/gi,'ly.html');<br />&nbsp;&nbsp;//Temp_str=Temp_str.replace(/href=\"(http){0}/gi,'href="http://blog.ii-home.cn/');<br />&nbsp;&nbsp;return(Temp_str);<br />}<br /><br />//将URL替换成原地址<br />function&nbsp;getasp(str){<br />&nbsp;&nbsp;var&nbsp;Temp_str=str.replace(re_id,'$1.asp?id=$2');<br />&nbsp;&nbsp;Temp_str=Temp_str.replace(/index\.html/gi,'index.asp');<br />&nbsp;&nbsp;Temp_str=Temp_str.replace(/myfiles\.html/gi,'myfiles.asp');<br />&nbsp;&nbsp;Temp_str=Temp_str.replace(/mydiary\.html/gi,'mydiary.asp');<br />&nbsp;&nbsp;Temp_str=Temp_str.replace(/mydiary\_self.html/gi,'mydiary.asp?typ=self');<br />&nbsp;&nbsp;Temp_str=Temp_str.replace(/xml_diary\.html/gi,'xml_diary.asp');<br />&nbsp;&nbsp;Temp_str=Temp_str.replace(/xml_download\.html/gi,'xml_download.asp');<br />&nbsp;&nbsp;Temp_str=Temp_str.replace(/xml_links\.html/gi,'xml_links.asp');<br />&nbsp;&nbsp;Temp_str=Temp_str.replace(/xml_ly\.html/gi,'xml_ly.asp');<br />&nbsp;&nbsp;Temp_str=Temp_str.replace(/ly\.html/gi,'ly.asp');<br />&nbsp;&nbsp;Temp_str=Temp_str.replace(re_flag,'$1.asp?flag=xml');<br />&nbsp;&nbsp;return(Temp_str);<br />}<br />&lt;/script&gt;<br /></div></div><br /><br />测试地址<a href="http://bbs.ii-home.cn/html/index.html" target="new">http://bbs.ii-home.cn/html/index.html</a><br /><br /><br />]]>
      </summary>
      <category term="" label="AJAX" scheme="http://dev.mo.cn/cat_diary_2.html" />
   </entry>
   <entry>
      <title type="html">回家了~~</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_100.html" />
      <updated>2008-8-2 10:05:51</updated>
      <published>2008-8-2 10:05:51</published>
      <id>http://dev.mo.cn/article_100.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;暑假都放了20多天了，该回家看看了，看看老爸看看老妈。。。<br />&nbsp;&nbsp;不过，很快就回回来的；<br />&nbsp;&nbsp;希望我的朋友们不要忘记我；<br />&nbsp;&nbsp;简短声明下！ByeBye!<br /><br />]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">AJAX框架代码</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_99.html" />
      <updated>2008-8-1 3:21:11</updated>
      <published>2008-8-1 3:21:11</published>
      <id>http://dev.mo.cn/article_99.html</id>
      <summary type="html">
      <![CDATA[<div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />var&nbsp;XMLHttp&nbsp;=&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;_objPool:&nbsp;[],<br />&nbsp;&nbsp;&nbsp;&nbsp;_getInstance:&nbsp;function&nbsp;()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(var&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;this._objPool.length;&nbsp;i&nbsp;++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(this._objPool[i].readyState&nbsp;==&nbsp;0&nbsp;||&nbsp;this._objPool[i].readyState&nbsp;==&nbsp;4)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this._objPool[i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;IE5中不支持push方法<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this._objPool[this._objPool.length]&nbsp;=&nbsp;this._createObj();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this._objPool[this._objPool.length&nbsp;-&nbsp;1];<br />&nbsp;&nbsp;&nbsp;&nbsp;},<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;_createObj:&nbsp;function&nbsp;()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(window.XMLHttpRequest)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;objXMLHttp&nbsp;=&nbsp;new&nbsp;XMLHttpRequest();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;MSXML&nbsp;=&nbsp;['MSXML2.XMLHTTP.5.0',&nbsp;'MSXML2.XMLHTTP.4.0',&nbsp;'MSXML2.XMLHTTP.3.0',&nbsp;'MSXML2.XMLHTTP',&nbsp;'Microsoft.XMLHTTP'];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(var&nbsp;n&nbsp;=&nbsp;0;&nbsp;n&nbsp;&lt;&nbsp;MSXML.length;&nbsp;n&nbsp;++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;objXMLHttp&nbsp;=&nbsp;new&nbsp;ActiveXObject(MSXML[n]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<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;catch(e)&nbsp;{<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;mozilla某些版本没有readyState属性<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(objXMLHttp.readyState&nbsp;==&nbsp;null)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objXMLHttp.readyState&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objXMLHttp.addEventListener("load",&nbsp;function&nbsp;()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objXMLHttp.readyState&nbsp;=&nbsp;4;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(typeof&nbsp;objXMLHttp.onreadystatechange&nbsp;==&nbsp;"function")&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objXMLHttp.onreadystatechange();<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;false);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;objXMLHttp;<br />&nbsp;&nbsp;&nbsp;&nbsp;},<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;发送请求(方法[post,get],&nbsp;地址,&nbsp;数据,&nbsp;回调函数)<br />&nbsp;&nbsp;&nbsp;&nbsp;sendReq:&nbsp;function&nbsp;(method,&nbsp;url,&nbsp;data,&nbsp;callback,&nbsp;i)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;objXMLHttp&nbsp;=&nbsp;this._getInstance();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with(objXMLHttp)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<br />&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;if&nbsp;(url.indexOf("?")&nbsp;&gt;&nbsp;0)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url&nbsp;+=&nbsp;"&randnum="&nbsp;+&nbsp;Math.random();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url&nbsp;+=&nbsp;"?randnum="&nbsp;+&nbsp;Math.random();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;open(method,&nbsp;url,&nbsp;true);<br /><br />&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;setRequestHeader('Content-Type',&nbsp;'application/x-www-form-urlencoded');<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send(data);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onreadystatechange&nbsp;=&nbsp;function&nbsp;()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(objXMLHttp.readyState&nbsp;==&nbsp;4&nbsp;&&&nbsp;(objXMLHttp.status&nbsp;==&nbsp;200&nbsp;||&nbsp;objXMLHttp.status&nbsp;==&nbsp;304))&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;callback(objXMLHttp,&nbsp;i);<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;}<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;catch(e)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(e);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />};<br /></div></div><br />]]>
      </summary>
      <category term="" label="AJAX" scheme="http://dev.mo.cn/cat_diary_2.html" />
   </entry>
   <entry>
      <title type="html">喜欢和爱的区别</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_98.html" />
      <updated>2008-7-28 12:43:37</updated>
      <published>2008-7-28 12:43:37</published>
      <id>http://dev.mo.cn/article_98.html</id>
      <summary type="html">
      <![CDATA[人世间有种情感叫“喜欢”，另一种叫“爱”&nbsp;<br /><br />爱是他在的时候，眼睛里只有他一人；他不在的时候，&nbsp;<br />一切都带有他的影子。&nbsp;<br /><br />喜欢是在深夜看书时突然想起他，想象他现在做什么，&nbsp;<br />心里漾起一阵轻飘飘的温暖，却从不主动给他打电话。&nbsp;<br />几分钟后，注意力又重新被书中&nbsp;<br />的情节吸引!&nbsp;<br /><br />爱是在寂寞的夜里，思念如潮水般涌来，&nbsp;<br />手里捧着书却怎么也看不进去，心里惦记着他此时是否还在加班，&nbsp;<br />吃没吃晚饭，是不是如自己想着他&nbsp;<br />一般想着自己&nbsp;<br /><br />喜欢是和他讨论问题争的面红耳赤，各不相让，&nbsp;<br />在他面前像个刺猬一样从不认输，&nbsp;<br />但在心里却早已暗暗佩服他的见地他的才华。&nbsp;<br /><br />爱是希望他和自己步调一致，和自己心灵相通，&nbsp;<br />他无心说的一句玩笑话也能让自己顷刻情绪低落甚至眼泪汪汪。&nbsp;<br />在他面前，自己是从不设防的。&nbsp;<br /><br />喜欢是出门在外给他发个短信，告诉他这边的天气很好，&nbsp;<br />然后把手机关掉，独自在异地疯玩一个星期，&nbsp;<br />晒成一个黑人后突然出现在他面前吓他&nbsp;<br />一跳。&nbsp;<br /><br />爱是无论到哪都希望有他陪伴。可以站在海边给他打手机，&nbsp;<br />让他听听海浪的声音；&nbsp;<br />也可以因为在异乡的街道上看到一个酷似他的背影而愣在原&nbsp;<br />地久久不动。&nbsp;<br /><br />喜欢是他出差前简单的道一声“一路平安”，&nbsp;<br />看着他离去的背影，心中有一点不舍，却什么也不说，&nbsp;<br />只是默默等待他归来的消息.&nbsp;<br /><br />爱是他临出差前千叮咛万嘱咐，往他的背包里塞满衣服和食物，&nbsp;<br />在车站要等到火车开走才肯离开。&nbsp;<br />并且在他走后的日子里天天心神不定，一遍&nbsp;<br />遍的祈祷他能够平安归来。&nbsp;<br /><br />喜欢是在受伤的时候，不想让他看到自己脆弱的一面，&nbsp;<br />在他面前把眼泪悄悄抹掉，&nbsp;<br />转过头依然是一副快乐坚强的模样。&nbsp;<br /><br />爱是在受委屈的时候，爬在他的胸前痛哭，&nbsp;<br />没有伪装没有顾虑，把所有的烦恼统统告诉他，&nbsp;<br />并渴望从他的怀抱中得到安慰。&nbsp;<br /><br />喜欢是和他周末逛街逛累了一起吃肯德基；&nbsp;<br />是在寒冷的冬天和他抢一杯热咖啡；&nbsp;<br />是和他并肩走在街上中间始终隔着半米的距离；是陪他一起在&nbsp;<br />电脑前打游戏两个人笑的像个孩子。&nbsp;<br /><br />爱是周末利用半天时间亲手做出几道好菜满足的看他吃下去；&nbsp;<br />是在寒冷的冬天不断为他的咖啡杯里续上热水；&nbsp;<br />是和他走在街上任由他紧紧挽着&nbsp;<br />自己的手；是在他旁边安静着做着，&nbsp;<br />幸福地看着他在电脑前工作时专心的样子。&nbsp;<br /><br />喜欢是听他讲自己童年的趣事，然后哈哈大笑，&nbsp;<br />心中涌起一阵莫名的感动。&nbsp;<br />爱是听他将自己童年的趣事，然后微微一笑，&nbsp;<br />心中更加怜惜眼前这个曾经如此调皮捣蛋的男人&nbsp;<br /><br />喜欢是在楼道里碰上他，愉快的和他打声招呼，&nbsp;<br />再简单寒暄几句，擦肩而过的时候看见了窗外明媚的阳光，&nbsp;<br />心情无端好了起来。&nbsp;<br />爱是在楼道了看见他，脸上装出一副毫不在乎的表情，&nbsp;<br />但在擦肩而过时细心感受身边颤动的空气，于是忍不住回头望一眼&nbsp;<br /><br />喜欢是看到他和另一个女孩牵手走过，心里有一点点疼，&nbsp;<br />但很快会冲着朝阳重新扬起笑脸。&nbsp;<br />爱是输不爱是输不起的游戏，付出全部只后，&nbsp;<br />留下的可能仅仅是刻在心底的一道伤痕&nbsp;<br /><br />喜欢一个人是想要他是自己的，所以，可以喜欢很多人，&nbsp;<br />想要很多人都是自己的。&nbsp;<br />爱是明明离不开他，却要不得不放弃他，&nbsp;<br />因为他要的幸福，也许我给不了。不敢霸占他，&nbsp;<br />希望看他找到幸福，即使那份幸福不是跟我分享的。&nbsp;<br /><br />喜欢是，希望寂寞的时候，无聊的时候，&nbsp;<br />伤感的时候，找个人说说话。&nbsp;<br />爱是，在任何时候都想跟他分享，&nbsp;<br />快乐的时候甚至希望把所有快乐都给了他。&nbsp;<br /><br />喜欢是，在很久很久没联络的时候，&nbsp;<br />接到他的电话，然后笑着听他说话。&nbsp;<br />爱是，在几天没有联络的时候，着急得的打电话给他，&nbsp;<br />然后忍住眼泪笑一笑。&nbsp;<br /><br />喜欢，只有在一起的时候，才惦记着对方。&nbsp;<br />爱，是哪怕是在一起，每一秒钟也都在思念思念他。&nbsp;<br /><br />喜欢一个人，多许多朋友，也会觉得快乐。&nbsp;<br />爱一个人，是多一个人，都会难受的两个人的世界。&nbsp;<br /><br />喜欢一个人，是甜腻的。&nbsp;<br />爱一个人，是苦尽甘来的。&nbsp;<br /><br />喜欢一个人，在一起的时候会很开心&nbsp;<br />爱一个人，在一起的时候，会莫名的失落&nbsp;<br /><br />喜欢一个人，你不会想到你们的将来&nbsp;<br />爱一个人，你们常常在一起憧憬明天&nbsp;<br /><br />喜欢一个人，在一起的时候永远是欢乐&nbsp;<br />爱一个人，你会常常流泪&nbsp;<br /><br />喜欢一个人，当你们好久不见，你会突然想起他&nbsp;<br />爱一个人，当你们好久不见，你会天天想着他&nbsp;<br /><br />喜欢一个人，当你想起他，你会微微一笑&nbsp;<br />爱一个人，当你想起他，你会对着天空发呆&nbsp;<br /><br />喜欢一个人，你会想他有了孩子，你一定会很喜欢&nbsp;<br />爱一个人，会有一天，你突然很好奇：将来我们的孩子会是什么样子&nbsp;<br /><br />喜欢一个人就是希望大家都开心&nbsp;<br />爱一个人希望他会更开心&nbsp;<br /><br />喜欢一个人，你要得只是今天&nbsp;<br />爱一个人，你期望的是永远&nbsp;<br /><br />喜欢一个人，是看到了他的优点&nbsp;<br />爱一个人，是包容了他的缺点&nbsp;<br /><br />当你站在你爱的人面前,你的心跳会加速&nbsp;<br />但当你站在你喜欢的人面前,你只感到开心&nbsp;<br /><br />当你与你爱的人四目交投,你会害羞&nbsp;<br />但当你与你喜欢的人四目交投,你只会微笑&nbsp;<br /><br />当你与你爱的人对话,你觉得难以启齿&nbsp;<br />但当你和你喜欢的人对话,你可以畅所欲言&nbsp;<br /><br />当你爱的人哭,你会陪她一起哭&nbsp;<br />但当你喜欢的人哭,你会技巧的安慰她.&nbsp;<br /><br />当你不想再爱一个人,你要闭上眼睛并忍着泪水&nbsp;<br />当你不想再喜欢一个人,你只要掩住双耳!&nbsp;<br /><br />喜欢，是一种心情&nbsp;<br />爱，是一种感情&nbsp;<br />喜欢，是一种直觉&nbsp;<br />爱，是一种感觉&nbsp;<br />喜欢，可以停止&nbsp;<br />爱，没有休止&nbsp;<br /><br />喜欢一个人，特别自然&nbsp;<br />爱一个人，特别坦然&nbsp;<br />喜欢一个人，有时候盼和他在一起&nbsp;<br />爱一个人，有时候怕和他在一起&nbsp;<br /><br />喜欢一个人，不停的和他争执&nbsp;<br />爱一个人，不停的为他付出&nbsp;<br />喜欢一个人，希望他可以随时找到自己&nbsp;<br />爱一个人，希望可以随时找到他&nbsp;<br /><br />喜欢一个人，总是为他而笑&nbsp;<br />爱一个人，总是为他而哭&nbsp;<br />喜欢，是执着&nbsp;<br />爱，是值得&nbsp;<br /><br />喜欢就是喜欢，很简单&nbsp;<br />爱就是爱，很复杂&nbsp;<br />喜欢你，却不一定爱你&nbsp;<br />爱你，就一定很喜欢你&nbsp;<br /><br />其实，喜欢和爱仅一步之遥&nbsp;<br />但，想要迈这一步&nbsp;<br />就看你&nbsp;<br />是喜欢迈这一步&nbsp;<br />还是爱迈这一步&nbsp;<br />爱将会属于那些虽然曾经失望过，却仍心怀希望的人；属于那些虽然曾经背叛过，但依然相信的人&nbsp;&nbsp;&nbsp;]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">关于数组排序</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_97.html" />
      <updated>2008-7-28 1:51:30</updated>
      <published>2008-7-28 1:51:30</published>
      <id>http://dev.mo.cn/article_97.html</id>
      <summary type="html">
      <![CDATA[呵呵~今天突然发现,学编程这么久了,除了上C语言课做过排序作业,自己用VB还真没做过---狂晕啊!<br />下面代码只是自己实验代码,仅有参考意义,没有任何技术含量,呵呵!<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;%<br />server.scripttimeout=300<br />count=100<br />Arr=count-1<br />dim&nbsp;nums()<br />response.write&nbsp;"原数组:&lt;br&nbsp;/&gt;"<br />for&nbsp;i=0&nbsp;to&nbsp;Arr<br />&nbsp;&nbsp;ReDim&nbsp;Preserve&nbsp;nums(i)<br />&nbsp;&nbsp;randomize()<br />&nbsp;&nbsp;num=(cint(rnd()*9999))<br />&nbsp;&nbsp;nums(i)=num<br />&nbsp;&nbsp;response.write&nbsp;num&"&nbsp;"<br />&nbsp;&nbsp;if&nbsp;(i+1)&nbsp;mod&nbsp;20&nbsp;=0&nbsp;then&nbsp;response.write&nbsp;"&lt;br&nbsp;/&gt;"<br />next<br />'计算最大值和最小值<br />max=nums(0)<br />min=nums(0)<br />for&nbsp;j=1&nbsp;to&nbsp;Arr<br />&nbsp;&nbsp;if&nbsp;nums(j)&gt;max&nbsp;then&nbsp;max=nums(j)<br />&nbsp;&nbsp;if&nbsp;nums(j)&lt;min&nbsp;then&nbsp;min=nums(j)<br />next&nbsp;&nbsp;<br />'由小到大排序<br />num_m=0<br />time1=timer<br />for&nbsp;j=0&nbsp;to&nbsp;Arr<br />&nbsp;&nbsp;for&nbsp;i=0&nbsp;to&nbsp;Arr-1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;nums(i)&gt;nums(i+1)&nbsp;then&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num_m=nums(i+1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nums(i+1)=nums(i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nums(i)=num_m<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;complete=false&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;if<br />&nbsp;&nbsp;next<br />next<br />&nbsp;&nbsp;'排序完成<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;"&lt;br&nbsp;/&gt;排序后:&lt;br&nbsp;/&gt;"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;k=0&nbsp;to&nbsp;Arr<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;nums(k)&"&nbsp;"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(k+1)&nbsp;mod&nbsp;20&nbsp;=0&nbsp;then&nbsp;response.write&nbsp;"&lt;br&nbsp;/&gt;"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;"&lt;br&nbsp;/&gt;数组共有"&color(count)&"个数,最大值:"&color(max)&",最小值:"&color(min)&";&lt;br&nbsp;/&gt;"<br /><br />function&nbsp;color(str)<br />&nbsp;&nbsp;color="&lt;font&nbsp;color=""red""&gt;"&str&"&lt;/font&gt;"<br />end&nbsp;function<br />%&gt;<br /></div></div><br /><br /><br /><br /><br /><br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">RSS基本结构的定义</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_96.html" />
      <updated>2008-7-26 21:17:56</updated>
      <published>2008-7-26 21:17:56</published>
      <id>http://dev.mo.cn/article_96.html</id>
      <summary type="html">
      <![CDATA[其中，必填项已经在代码中标出。channel的image节点如果不定义，里面的各项也不是必须的！<br />把第一段代码保存为<span style="color:red;">rss.xml</span>，第2段代码保存为<span style="color:red;">rss.xslt</span>(当然都以utf-8格式保存)，然后打开<span style="color:red;">rss.xml</span>就会看到效果！如下图：<br /><a href="http://blog.ii-home.cn/upfiles/2008072711535503.JPG" target="new">http://blog.ii-home.cn/upfiles/2008072711535503.JPG</a><br />如果把第2段代码的<span style="color:red;">&lt;?xml-stylesheet&nbsp;type="text/xsl"&nbsp;href="rss.xslt"?&gt;</span>一行去掉就仅仅显示一个xml文件树结构！<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;?xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"&nbsp;?&gt;<br />&lt;?xml-stylesheet&nbsp;type="text/xsl"&nbsp;href="rss.xslt"?&gt;<br />&lt;rss&nbsp;version="2.0"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;channel&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;艾恩ASP学习BLOG(必选)&lt;/title&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;link&gt;http://blog.ii-home.cn(必选)&lt;/link&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;description&gt;免费提供各种ASP学习资源，组件、源代码、学习手册、技术文章...(必选)&lt;/description&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;category&gt;ASP学习&lt;/category&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;copyright&gt;copyright@2008&nbsp;blog.ii-home.cn&lt;/copyright&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;image&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;url&gt;http://blog.ii-home.cn/img/myblog.jpg(必选)&lt;/url&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;艾恩ASP学习BLOG(必选)&lt;/title&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;link&gt;http://blog.ii-home.cn(必选)&lt;/link&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;width&gt;88&lt;/width&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;height&gt;31&lt;/height&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;description&gt;免费提供各种ASP学习资源，组件、源代码、学习手册、技术文章...&lt;/description&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/image&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;language&gt;zh-cn&lt;/language&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;lastBuildDate&gt;定义频道最新一次改动的时间&lt;/lastBuildDate&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;managingEditor&gt;zhanghuiguoanlige@126.com&lt;/managingEditor&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;pubDate&gt;Sat,&nbsp;26&nbsp;Jul&nbsp;2008&nbsp;21:07:57&nbsp;+0800&lt;/pubDate&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ttl&gt;60&lt;/ttl&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;webMaster&gt;zhanghuiguoanlige@126.com&lt;/webMaster&gt;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;item&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;汉字图片验证码(必选)&lt;/title&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;link&gt;http://blog.ii-home.cn/show.asp?id=94(必选)&lt;/link&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;description&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;![CDATA[生成汉字图片验证码，字库少点-85个，资源下载里有个动网的验证码，字库多点还有多种显示选择~载]]&gt;(必选)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/description&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;author&gt;Anlige&lt;/author&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;category&gt;源代码下载&lt;/category&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;comments&gt;http://blog.ii-home.cn/show.asp?id=94&lt;/comments&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;guid&gt;http://blog.ii-home.cn/show.asp?id=94&lt;/guid&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;pubDate&gt;Sat,&nbsp;26&nbsp;Jul&nbsp;2008&nbsp;21:07:57&nbsp;+0800&lt;/pubDate&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;source&gt;http://blog.ii-home.cn/show.asp?id=94&lt;/source&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/item&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/channel&gt;<br />&lt;/rss&gt;<br /></div></div>.<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;?xml&nbsp;version="1.0"&nbsp;encoding="utf-8"&nbsp;?&gt;&nbsp;<br />&lt;xsl:stylesheet&nbsp;version="1.0"&nbsp;xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&gt;<br />&lt;xsl:output&nbsp;method="html"&nbsp;indent="yes"&nbsp;doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&nbsp;doctype-public="-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN"&nbsp;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:template&nbsp;match="rss/channel"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;html&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;head&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;&lt;xsl:value-of&nbsp;select="title"&nbsp;/&gt;&lt;/title&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;style&nbsp;media="all"&nbsp;type="text/css"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/style&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/head&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;body&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;div&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;a&nbsp;href="{link}"&gt;&lt;xsl:value-of&nbsp;select="title"&nbsp;/&gt;&lt;/a&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/div&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;div&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;a&nbsp;href="{image/link}"&gt;&lt;img&nbsp;style="border:0;"&nbsp;src="{image/url}"&nbsp;alt="{image/title}"&nbsp;/&gt;&lt;/a&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/div&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;div&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:value-of&nbsp;select="webMaster"&nbsp;/&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/div&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:apply-templates&nbsp;select="item"&nbsp;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/body&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/html&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:template&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:template&nbsp;match="item"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;style="padding:5px;border:1px&nbsp;#dddddd&nbsp;solid;margin-top:10px;"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;a&nbsp;href="{link}"&nbsp;target="_blank"&gt;&lt;xsl:value-of&nbsp;select="title"&nbsp;/&gt;&lt;/a&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:value-of&nbsp;select="pubDate"&nbsp;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:value-of&nbsp;select="author"&nbsp;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:value-of&nbsp;select="category"&nbsp;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;xsl:value-of&nbsp;select="description"&nbsp;disable-output-escaping="yes"&nbsp;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;a&nbsp;href="{source}"&gt;&lt;xsl:value-of&nbsp;select="source"&nbsp;/&gt;&lt;/a&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;br&nbsp;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/xsl:template&gt;<br />&lt;/xsl:stylesheet&gt;<br /></div></div><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />]]>
      </summary>
      <category term="" label="HTML/CSS" scheme="http://dev.mo.cn/cat_diary_8.html" />
   </entry>
   <entry>
      <title type="html">最尴尬的口误(暴笑)</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_95.html" />
      <updated>2008-7-25 12:23:01</updated>
      <published>2008-7-25 12:23:01</published>
      <id>http://dev.mo.cn/article_95.html</id>
      <summary type="html">
      <![CDATA[<br /><br />1、周末回家，晚饭后烟瘾犯了，打算借口去散步。在门口换鞋时，老爸问我干吗&nbsp;去？我说：“去散个烟！”结果老爸从我身上搜出一包白沙，狠狠k了我一顿。&nbsp;<br /><br />2、一次从妈妈那里出来后到老婆那里去，看见老婆后，习惯性的叫了一声：“妈！”&nbsp;<br /><br />3、早上上班，发现自行车没气了，于是想叫妈妈推到门外打气。结果我说：“把我的&nbsp;轮胎推出去。”妈妈迷糊了，我笑着连忙改正，结果又说成：“帮我的汽车打点气！”&nbsp;<br /><br />4、一次我开车，坐我旁边的女同事突然问：“你怎么开车不系安全套的？”&nbsp;<br /><br />5、一次在厕所方便，没纸了。就对老婆说：“把擦纸的屁股拿来！”&nbsp;<br /><br />6、一个女孩失恋了，我劝她：“两条腿的蛤蟆不好找，三条腿的男人有的是啊！”&nbsp;<br /><br />7、两个人斗嘴，突然旁边一人冒出来一句：“你们真是吃饱了事情没饭做啊！”&nbsp;<br /><br />8、同事和人争执，急了张口来了句：“你以为我吃饭长大的啊？”我一直纳闷他到底吃&nbsp;什么长大的。&nbsp;<br />9、上电脑课，一同学的机器有问题，于是大喊；“老板，换机子！”&nbsp;<br /><br />10、边吃饭边看帖子，边念经典的给老婆听，笑死她了，于是她对我说：“吃完饭再看&nbsp;吧，不然脑子消化不良！”&nbsp;<br /><br />11、一次问一个近视的人眼睛多少度，他本想说400度的，结果一出口就成了400&nbsp;瓦，肚子痛死！&nbsp;<br /><br />12、一次教育局领导视察课间操，结束后，本应由体育老师宣布“解散”，但一时情&nbsp;急，忘词了，憋了半天，大喊：“撤退！”&nbsp;<br /><br />13、一体育系学生上实习课时，很多老师听课，他太紧张，最后要解散队伍时，一时&nbsp;脑子空白，硬憋了句：“全体注意，立正！闪！！”&nbsp;<br /><br />14、一群同学去郊区同学家玩。我们买了几个西瓜放在厨房。叫一个同学去拿刀&nbsp;切，好久不见回来，正疑惑间，他手里捧着个切开的瓜来了，惊慌地说：我把南瓜给&nbsp;切了。大家狂笑，但两秒钟后，大家更是笑翻，原来他手里捧着个冬瓜！&nbsp;<br /><br />15、高中有一老师姓江，酷似罗家英（演大话西游唐僧的），我去问他问题，脱口&nbsp;而出：“唐师傅，这题……”&nbsp;<br /><br />16、有一同事，有天我开车在路上车胎没气了，问哪里有充气的，同事说：“街上到处&nbsp;都是打胎的啊！”&nbsp;<br /><br />17、一次去麦当劳买甜桶，终于轮到了，我迫不及待的说：“给我两个滚筒！”没想到&nbsp;那服务员对我大声的说；“两个滚筒，四块钱！”&nbsp;<br /><br />18、俺碰到一个心仪已久的女孩从澡堂里出来，想套近乎，憋了半天憋出一句：“你洗&nbsp;澡啊，里面男的多不多啊？”&nbsp;<br /><br />19、有次去吃饭，结帐时对老板说：“老公！结帐！”当时老板娘就在旁边……&nbsp;<br /><br />20、有一老师通宵麻将，见黑板没擦，大怒：“今天谁做庄啊？黑板都不擦！”&nbsp;<br /><br />21、有一次我大叔见我小姑在搽大宝，突然大叫一声：“你皮肤这么好，还用护舒宝&nbsp;啊？”&nbsp;<br /><br />22、刚买了房子，兴奋中给一哥们打电话：‘我买房啦，不过就一毛房（忘说“坯”字&nbsp;了）还得装修。”哥们说：“就只有一厕所吗？那你住哪里啊？”&nbsp;<br /><br />23、被老师留下做作业，不会做就抄别人的，然后去办公室交作业，看见老师&nbsp;说：“我抄完了！”&nbsp;<br /><br />24、某君考驾驶证那天，特别紧张。考官为难他，叫他在路边有一个消防栓的地方停&nbsp;车。此君特紧张的说：“报告消防栓，路边有一个考官，不允许停车！”&nbsp;<br /><br />25、公司养一狗叫：小白。某天大家逗狗，同事甲拿着一饼干对狗说到：“小白，整个&nbsp;办公室只有你喂我哦。”三秒钟后，整个办公室暴笑.&nbsp;&gt;&nbsp;<br />]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">ASP汉字图片验证码</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_94.html" />
      <updated>2008-7-24 17:45:05</updated>
      <published>2008-7-24 17:45:05</published>
      <id>http://dev.mo.cn/article_94.html</id>
      <summary type="html">
      <![CDATA[生成汉字图片验证码，字库少点-85个<br />资源下载里有个动网的验证码，字库多点还有多种显示选择~<br />这个验证码的使用方法:在需要显示验证码的地方加入<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;img&nbsp;src="code.asp"&nbsp;alt="验证"&nbsp;/&gt;&nbsp;<br /></div></div><br />会生成一个Session("psn")供你使用！<br />code.asp请到这里来下载<br /><a href="http://blog.ii-home.cn/detial.asp?id=140" target="new">http://blog.ii-home.cn/detial.asp?id=140</a><br /><br /><br /><br /><br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">参加奥运会火炬在青岛的传递活动</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_93.html" />
      <updated>2008-7-23 0:51:55</updated>
      <published>2008-7-23 0:51:55</published>
      <id>http://dev.mo.cn/article_93.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;昨天,奥运火炬来到了青岛!!!!我们学校参加收火仪式的方队早上6:50(崂山和浮山校区的同学是凌晨3、4点就要集合出发)集合前往第一海水浴场,鱼山校区400多人组成的队伍甚是浩大！<br /><br />&nbsp;&nbsp;为了安全起见，青岛基本出动所有的警察拉好警戒线，每隔几米就有一名警察站岗，心中有一种钦佩，更应该说是感动的感觉！为了奥运，大家都付出了很多，在大家的支持下相信北京奥运会顺利举办成功！<br /><br />&nbsp;&nbsp;火炬8：80左右正式开始传递，经过259名火炬手的传递，上午11:08分，火炬顺利到达收火仪式现场，现场的气氛也是异常的活跃，我们挥动各国国旗大声呐喊着，万分激动地等待这一刻的到来！当最后一棒火炬手—青岛市市长、青岛奥帆委主席夏耕跑进第一海水浴场点燃圣火盆的时候，整个会场沸腾起来了，呐喊声、锣鼓声、欢呼声....震耳欲聋，当然会场的秩序没有一丝混乱！北京奥组委给予“安全保卫和服务组织双满分”的高度评价！<br /><br />&nbsp;&nbsp;北京奥运会是中国百年难遇的举国盛事，需要我们一起努力，一起为奥运加油，为中国加油，愿北京奥运会能够取得圆满成功！<br /><br />&nbsp;&nbsp;(下面是俺在收火仪式会场休息时拍的一张照片，人长的难看点，手机拍的，比较磕碜！)<br /><br /><a onfocus="this.blur()" href="/upfiles/2008072221471109.jpg" target=new><img src="/upfiles/2008072221471109.jpg" border="0" alt="´ڴ" onload="javascript:if(this.width>560)this.width=560" /></a>]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">关于request的几个集合</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_92.html" />
      <updated>2008-7-20 19:05:59</updated>
      <published>2008-7-20 19:05:59</published>
      <id>http://dev.mo.cn/article_92.html</id>
      <summary type="html">
      <![CDATA[request包含request.form和request.querystring及其它几个集合<br />request.form获取的是表单post方式传输的（传输相对于querystring容量较大，传输较安全）&nbsp;<br />request.querystring获取的是表单get方式传输的（会紧接再URL？后，传输容量有限制，且不安全，但可作为URL速记地址）<br />建议不要使用request("test")的形式提取信息，这样的话服务器会依次检索所有的request集合，加重负担&nbsp;<br /><span style="color:red;"><br />读取顺序为&nbsp;<br />request.querystring()&nbsp;<br />request.form()&nbsp;<br />request.cookies()&nbsp;<br />request.ClientCertificate()&nbsp;(不常用，可以说不用)<br />request.serverVariables()&nbsp;<br /><br />request.form只会查询form集合，而不去查询其余4个集合<br /></span><br /><br />有兴趣的可以运行下面的代码看看request.serverVariables的各种属性<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />for&nbsp;each&nbsp;vari&nbsp;in&nbsp;request.serverVariables()<br />response.write&nbsp;vari&"---"&request.serverVariables(vari)&"&lt;br&nbsp;/&gt;"<br />next<br /></div></div><br />这个循环会罗列所有的request.serverVariables()集合中的属性<br /><br /><br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">小偷程序原理--xmlhttp组件</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_91.html" />
      <updated>2008-7-20 18:45:16</updated>
      <published>2008-7-20 18:45:16</published>
      <id>http://dev.mo.cn/article_91.html</id>
      <summary type="html">
      <![CDATA[一般来说，我们做网站，数据都是在我们自己的数据库中的，但有些数据，我们不想也不能自己去收集数据，比如新闻＼天气预报，（我们无法天天更新），所以我们就需要借助别人的网站来显示这些内容&nbsp;。但如果直接链接到别人的网站，那就不是自己的站点了，所以我们通过xmlhttp对象来在后台把别人的网页内容载入到内存中，经过筛选，将别人的网页内容显示出来&nbsp;，这就是所谓的“小偷程序”。&nbsp;<br /><br /><br />小偷程序实际上是通过了XML中的XMLHTTP组件调用其它网站上的网页，动态载入内存后，再对别人网页的内容进行分析过滤。所以，原则上只要别人网页上能显示出来的信息，你都可以使用（关于连接，一般的下载网站的连接你是截不到的，因为它进行了隐藏）。现在有很多新闻小偷程序，很多都是调用了sina的新闻网页，对其中的html进行了一些替换，同时对广告也进行过滤。除了新闻截取，你还可以利用小偷程序去截取一些别的信息，比如天气预报等。<br /><br />小偷程序的优点有：<br />1、无须维护网站，因为小偷程序中的数据来自其他网站，它将随着该网站的更新而更新；<br />2、可以节省服务器资源，一般小偷程序就几个文件，所有网页内容都是来自其他网站。&nbsp;<br /><br /><br />其缺点有：<br />1、不稳定，如果目标网站出错，程序也会出错。目标网站进行升级维护，小偷程序也要进行相应修改；<br />2、速度慢，因为是远程调用，速度和在本地服务器上读取数据比起来，肯定要慢一些。&nbsp;<br /><br /><br />小偷程序一般是使用xmlhttp组件来下载别人的网页，将别人的网页内容载到了你的内存中，再经过分析，过滤掉不需要的内容，最终实现按照自己的格式来显示内容。比如这个网页：http://www.itb2b.com.cn/thief/index.asp&nbsp;，就是截取了新浪的内容。&nbsp;<br /><br /><br />以下是小偷程序代码：<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;%<br />'常用函数<br />'1、输入url目标网页地址，返回值getHTTPPage是目标网页的html代码<br /><br />function&nbsp;getHTTPPage(url)<br />dim&nbsp;Http<br />set&nbsp;Http=server.createobject("MSXML2.XMLHTTP")<br />Http.open&nbsp;"GET",url,false<br />Http.send()<br />if&nbsp;Http.readystate&lt;&gt;4&nbsp;then&nbsp;<br />exit&nbsp;function<br />end&nbsp;if<br />getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312")<br />set&nbsp;http=nothing<br />if&nbsp;err.number&lt;&gt;0&nbsp;then&nbsp;err.Clear&nbsp;<br />end&nbsp;function<br />%&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></div></div><br />换句话说，要做小偷程序，你必须了解xmlhttp组件的使用。微软提供的Microsoft.XMLHTTP对象，能够完成从数据包到Request对象的转换以及发送任务。<br /><br />XMLHTTP对象及其方法:<br />创建XMLHTTP对象的语句如下：&nbsp;<br /><br />Set&nbsp;objXML&nbsp;=&nbsp;CreateObject("Msxml2.XMLHTTP")&nbsp;<br />或<br />Set&nbsp;objXML&nbsp;=&nbsp;CreateObject(“Microsoft.XMLHTTP”)<br />其中Set&nbsp;objXML&nbsp;=&nbsp;CreateObject("Msxml2.XMLHTTP")是最新的版本<br /><br />对象创建后调用Open方法对Request对象进行初始化，语法格式为：&nbsp;<br />poster.open&nbsp;http-method,&nbsp;url,&nbsp;async,&nbsp;userID,&nbsp;password&nbsp;<br />Open方法中包含了5个参数，前三个是必要的，后两个是可选的(在服务器需要进行身份验证时提供)。<br />参数的含义如下所示：&nbsp;&nbsp;<br />http-method：&nbsp;HTTP的通信方式，比如GET或是&nbsp;POST&nbsp;<br />url：&nbsp;接收XML数据的服务器的URL地址。通常在URL中要指明ASP或CGI程序&nbsp;<br />async：&nbsp;一个布尔标识，说明请求是否为异步的。如果是异步通信方式(true)，客户机就不等待服务器的响应；如果是同步方式(false)，客户机就要等到服务器返回消息后才去执行其他操作&nbsp;<br />userID：用户ID，用于服务器身份验证&nbsp;<br />password：用户密码，用于服务器身份验证&nbsp;<br /><br />比如，我们要调用百度的网页，我们可以：&nbsp;<br />dim&nbsp;Http<br />set&nbsp;Http=server.createobject("MSXML2.XMLHTTP")<br />Http.open&nbsp;"GET","http://www.baidu.com",false<br />Http.send()<br /><br />Send方法是用来发送XML数据的，用法如下：<br />poster.send()&nbsp;&nbsp;<br /><br />如果不用send来发参数，而你要调用的网页又要接收参数，可以这样简单处理<br />dim&nbsp;Http<br />set&nbsp;Http=server.createobject("MSXML2.XMLHTTP")<br />Http.open&nbsp;"GET","http://要调用的网页?id=1&name=abc",false<br />Http.send()&nbsp;<br />Http.send()以后，xmlhttp对象会返回一个对象，这个对象里面就包含了所调用网页的内容，就象从浏览器里打开一样，只不过网页内容是在内存中，还没有显示出来。但在调用过程中可能会出错，所以XMLHTTP对象中的readyState属性能够反映出服务器在处理请求时的进展状况。<br /><br />0&nbsp;Response对象已经创建，但XML文档上载过程尚未结束&nbsp;<br />1&nbsp;XML文档已经装载完毕&nbsp;<br />2&nbsp;XML文档已经装载完毕，正在处理中&nbsp;<br />3&nbsp;部分XML文档已经解析&nbsp;<br />4&nbsp;文档已经解析完毕，客户端可以接受返回消息&nbsp;<br /><br />所以我们一般这样处理:<br />dim&nbsp;Http<br />set&nbsp;Http=server.createobject("MSXML2.XMLHTTP")<br />Http.open&nbsp;"GET","http://要调用的网页?id=1&name=abc",false<br />Http.send()<br />'检查是否完成，readystate值为４说明载入完毕<br />if&nbsp;Http.readystate&lt;&gt;4&nbsp;then<br />&nbsp;&nbsp;&nbsp;exit&nbsp;function&nbsp;<br />end&nbsp;if&nbsp;&nbsp;<br /><br />Http.send()后，经检测Http.readystate==4，说明载入完毕，这时网页内容已经载入到了Http.responseBody中了&nbsp;，但是如果是中文网页，Http.responseBody中会有乱码，这需要我们转换一下乱码&nbsp;，所以完整的调用是这样的：<br />dim&nbsp;http&nbsp;<br />set&nbsp;http=Server.createobject("Microsoft.XMLHTTP")&nbsp;<br />Http.open&nbsp;"GET","你要调用的网址",false&nbsp;<br />Http.send()&nbsp;<br />if&nbsp;Http.readystate&lt;&gt;4&nbsp;then　'如果不等于4，说明出错了<br />&nbsp;&nbsp;&nbsp;exit&nbsp;function&nbsp;<br />end&nbsp;if&nbsp;<br />getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312")<br />set&nbsp;http=nothing&nbsp;<br />其中,bytesToBSTR是一个自己写的函数&nbsp;<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />Function&nbsp;BytesToBstr(body,Cset)<br />&nbsp;&nbsp;dim&nbsp;objstream<br />&nbsp;&nbsp;set&nbsp;objstream&nbsp;=&nbsp;Server.CreateObject("adodb.stream")<br />&nbsp;&nbsp;objstream.Type&nbsp;=&nbsp;1<br />&nbsp;&nbsp;objstream.Mode&nbsp;=3<br />&nbsp;&nbsp;objstream.Open<br />&nbsp;&nbsp;objstream.Write&nbsp;body<br />&nbsp;&nbsp;objstream.Position&nbsp;=&nbsp;0<br />&nbsp;&nbsp;objstream.Type&nbsp;=&nbsp;2<br />&nbsp;&nbsp;objstream.Charset&nbsp;=&nbsp;Cset<br />&nbsp;&nbsp;BytesToBstr&nbsp;=&nbsp;objstream.ReadText&nbsp;<br />&nbsp;&nbsp;objstream.Close<br />&nbsp;&nbsp;set&nbsp;objstream&nbsp;=&nbsp;nothing<br />End&nbsp;Function&nbsp;<br /></div></div><br />所以，getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312")表示，将Http.responseBody的内容按GB2312编码转换一下，放到getHTTPPage变量中。<br />最后，你再对getHTTPPage变量进行分析，取出你想显示的数据就行了。<br /><br />需要注意的是,BytesToBstr函数中用到了adodb.stream组件，这需要你的服务器有执行它的权限。<br /><br />下面我们讲个实例，我们显示一下新浪的新闻。要想显示新浪的新闻，我们就要先找到新浪的新闻网址是什么。新浪有个动态新闻页网址：http://news.sina.com.cn/old1000/news1000_日期.shtml&nbsp;。比如，我们要显示6月18日的新闻，就输入<br />http://news.sina.com.cn/old1000/news1000_20050618.shtml&nbsp;，打开网页你会发现是一个新闻列表，下面我们就要分析一下它的结构，右键查看源代码。里面很乱，但你可以找到&lt;!--新闻开始--&gt;和&lt;!--新闻结束--&gt;，中间的内容就是列表的内容。好了，也就是我说，我们想显示6月18号的新闻，就这样调用：<br />dim&nbsp;http&nbsp;<br />set&nbsp;http=Server.createobject("Microsoft.XMLHTTP")&nbsp;<br />Http.open&nbsp;"GET","http://news.sina.com.cn/old1000/news1000_20050618.shtml",false&nbsp;<br />Http.send()&nbsp;<br />if&nbsp;Http.readystate&lt;&gt;4&nbsp;then<br />&nbsp;&nbsp;&nbsp;exit&nbsp;function&nbsp;<br />end&nbsp;if&nbsp;<br />getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312")<br />set&nbsp;http=nothing<br />start=Instr(wstr,"&lt;!--新闻开始--&gt;")<br />over=Instr(wstr,"&lt;!--新闻结束--&gt;")<br />wstr=mid(wstr,start+11,over-start-11)<br /><br />这样wstr就是新闻列表的内容。为什么start+11和over-start-11呢？因为&lt;!--新闻开始--&gt;和&lt;!--新闻结束--&gt;都是11的长度。wstr取出来后，还要进行分析,把它的网址链接替换成你的链接，把不必要的字符过滤掉，这个工作很烦琐，你可以用replace或者用正则表达式来替换,比如：<br />wstr=replace(wstr,"href=""","href=""show.asp?url=")<br />wstr=replace(wstr,"&lt;ul&gt;","")<br />wstr=trim(replace(wstr,"&lt;/ul&gt;",""))&nbsp;'完成对页面内容的截取加工<br />wstr=Replace(wstr,"http://news.sina.com.cn","NewsNews")<br />wstr=Replace(wstr,"http://tech.sina.com.cn","TechNews")<br />wstr=Replace(wstr,"http://sports.sina.com.cn","SportsNews")<br />wstr=Replace(wstr,"http://ent.sina.com.cn","EntNews")<br />wstr=Replace(wstr,"http://eladies.sina.com.cn","EladiesNews")<br />wstr=Replace(wstr,"http://jczs.sina.com.cn","jczs")<br />wstr=Replace(wstr,"http://auto.sina.com.cn","AutoNews")<br />wstr=Replace(wstr,"http://finance.sina.com.cn","FinanceNews")<br />wstr=Replace(wstr,"http://www.eladies.com.cn","wwwEladies")&nbsp;<br /><br /><br /><br /><br />]]>
      </summary>
      <category term="" label="AJAX" scheme="http://dev.mo.cn/cat_diary_2.html" />
   </entry>
   <entry>
      <title type="html">常用正则表达式集锦</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_90.html" />
      <updated>2008-7-20 18:41:27</updated>
      <published>2008-7-20 18:41:27</published>
      <id>http://dev.mo.cn/article_90.html</id>
      <summary type="html">
      <![CDATA[&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 />常用正则表达式集锦&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 />在使用RegularExpressionValidator验证控件时的验证功能及其验证表达式介绍如下:<br /><br /><br />只能输入数字：“^[0-9]*$”<br />只能输入n位的数字：“^\d{n}$”<br />只能输入至少n位数字：“^\d{n,}$”<br />只能输入m-n位的数字：“^\d{m,n}$”<br />只能输入零和非零开头的数字：“^(0|[1-9][0-9]*)$”<br />只能输入有两位小数的正实数：“^[0-9]+(.[0-9]{2})?$”<br />只能输入有1-3位小数的正实数：“^[0-9]+(.[0-9]{1,3})?$”<br />只能输入非零的正整数：“^\+?[1-9][0-9]*$”<br />只能输入非零的负整数：“^\-[1-9][0-9]*$”<br />只能输入长度为3的字符：“^.{3}$”<br />只能输入由26个英文字母组成的字符串：“^[A-Za-z]+$”<br />只能输入由26个大写英文字母组成的字符串：“^[A-Z]+$”<br />只能输入由26个小写英文字母组成的字符串：“^[a-z]+$”<br />只能输入由数字和26个英文字母组成的字符串：“^[A-Za-z0-9]+$”<br />只能输入由数字、26个英文字母或者下划线组成的字符串：“^\w+$”<br />验证用户密码:“^[a-zA-Z]\w{5,17}$”正确格式为：以字母开头，长度在6-18之间，<br /><br />只能包含字符、数字和下划线。<br />验证是否含有^%&',;=?$\"等字符：“[^%&',;=?$\x22]+”<br />只能输入汉字：“^[\u4e00-\u9fa5],{0,}$”<br />验证Email地址：“^\w+[-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$”<br />验证InternetURL：“^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$”<br />验证电话号码：“^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$”<br /><br />正确格式为：“XXXX-XXXXXXX”，“XXXX-XXXXXXXX”，“XXX-XXXXXXX”，<br /><br />“XXX-XXXXXXXX”，“XXXXXXX”，“XXXXXXXX”。<br />验证身份证号（15位或18位数字）：“^\d{15}|\d{}18$”<br />验证一年的12个月：“^(0?[1-9]|1[0-2])$”正确格式为：“01”-“09”和“1”“12”<br />验证一个月的31天：“^((0?[1-9])|((1|2)[0-9])|30|31)$”<br /><br />正确格式为：“01”“09”和“1”“31”。<br /><br /><br /><br />]]>
      </summary>
      <category term="" label="其他" scheme="http://dev.mo.cn/cat_diary_18.html" />
   </entry>
   <entry>
      <title type="html">突破WindowsXPHome版的限制安装IIS</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_88.html" />
      <updated>2008-7-19 22:04:35</updated>
      <published>2008-7-19 22:04:35</published>
      <id>http://dev.mo.cn/article_88.html</id>
      <summary type="html">
      <![CDATA[突破Windows&nbsp;XP&nbsp;Home版的限制安装IIS<br />　　常见的Windows&nbsp;XP有两个版本，Professional和Home版。这两个版本大体上是相同的，只是在细节方面，Professional版比Home版多了一些功能。例如Professional版的XP支持双CPU，多国&nbsp;语言，加入域，EFS文件加密，以及IIS（Internet&nbsp;Information&nbsp;Services）。很多人在买电脑的时候了解的不够清楚，买了预装Home版XP的电脑，而需要用到或者想学习IIS的时候才发现，原来Home版根本不能安装IIS或者PWS。如果按照一般的方法，你只能升级到Windows&nbsp;XP&nbsp;Professional或者使用Windows&nbsp;2000，不过仔细看看下文吧，你也可以在Windows&nbsp;XP&nbsp;Home上安装IIS了。&nbsp;<br /><br />　　首先需要说明一点，就是这种做法可能会有风险，因此在你实际操作之前，最好明确你的行为会带来什么后果。并且经过这样处理安装的IIS在运行上可能存在某种未知的缺陷。还有，同Professional版的XP一样，在Home版上运行的IIS也有10个并发连接的限制。在同一个时间内，最多只能有10个人使用你提供的IIS服务。如果你还想继续，那么就往下看吧。&nbsp;<br /><br />　　准备条件：一张Windows&nbsp;2000&nbsp;Professional的光盘（假设光驱是F盘）。&nbsp;<br /><br />　　首先在运行中输入"c:\windows\inf\sysoc.inf"，系统会自动使用记事本打开sysoc.inf这个文件。在sysoc.inf中找到"[Components]"这一段，并继续找到类似"iis=iis.dll,OcEntry,iis.inf,hide,7"的一行字,把这一行替换为"iis=iis2.dll,OcEntry,iis2.inf,,7"。之后保存并关闭。&nbsp;<br /><br />　　把Windows&nbsp;2000&nbsp;Professional的光盘插入光驱，同时按下Shift键禁止光驱的自动运行。在运行中输入"CMD"然后回车，打开命令行模式，在命令行下输入下列的两条命令，在每一行命令结束后回车：&nbsp;<br /><br />　　Expand&nbsp;d:\i386\iis.dl_&nbsp;c:\windows\system32\setup\iis2.dll&nbsp;<br />　　Expand&nbsp;d:\i386\iis.in_&nbsp;c:\windows\inf\iis2.inf&nbsp;<br /><br /><br />　　这时，打开你的控制面板，并点击"添加删除程序"图标，之后点击"添加删除Windows组件"，你应该可以看见图一的界面。请仔细看，在开始菜单中显示的操作系统是Windows&nbsp;XP&nbsp;Home，但是经过修改，已经有了添加IIS的选项了。&nbsp;<br /><br />图&nbsp;一&nbsp;<br /><br />　　然后你可以按照在Windows&nbsp;XP&nbsp;Professional或者Windows&nbsp;2000中的方法添加IIS，在本例中我们只安装了WWW服务。系统会开始复制文件，这需要一些时间。并且在这起见，请保持Windows&nbsp;2000&nbsp;Professional的光盘还在光驱中。&nbsp;<br /><br />　　在安装结束后，你可以打开控制面板－性能和选项－管理工具，"Internet信息服务管理"已经出现在那里（图二）。如果你想要验证IIS是否运行正常，而已打开IE，在地址栏中输入"http://localhost"然后回车，如果能看到图三的界面，那么你的IIS就全部正常运行了。&nbsp;<br /><br /><br />图&nbsp;三&nbsp;<br /><br />　　最后还有一点注意的：&nbsp;<br /><br />　　如果你在安装过程中，系统需要你插入Window&nbsp;Whistler&nbsp;CD或者需要你提供exch_adsiisex.dll这个文件，那是因为你按照默认的选项安装了IIS。要解决这个问题，只要在安装IIS的时候先点击"详细信息"，然后取消对SMTP的选择（即，不要安装SMTP服务器），那么复制文件的时候就不会需要那两个文件了。&nbsp;<br /><br />　　如果在你安装的到图一的位置后发现，已经显示了Internet信息服务（IIS）的安装项目，但是它们根本无法被选中，那很可能因为你使用的iis.dl_和iis.in_是从Windows&nbsp;XP&nbsp;Professional中取出的，只要换成Windows&nbsp;2000&nbsp;Professional中的就可以继续正常安装了。&nbsp;<br /><br />　　经过验证，WWW、FTP等几个服务经过这样的修改都可以在Windows&nbsp;XP&nbsp;Home上正常运行<br /><br />]]>
      </summary>
      <category term="" label="IIS配置相关" scheme="http://dev.mo.cn/cat_diary_7.html" />
   </entry>
   <entry>
      <title type="html">新手asp编程的基本法则</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_87.html" />
      <updated>2008-7-17 4:04:03</updated>
      <published>2008-7-17 4:04:03</published>
      <id>http://dev.mo.cn/article_87.html</id>
      <summary type="html">
      <![CDATA[新手asp编程的基本法则<br />一、新手常犯的错误<br />在论坛看到很多帖子代码中都有一个共同的基本错误，字段类型错误。<br />程序和数据库是紧紧相连的，数据库字段文本型或时间型的都使用单引号<br />比如下面这段修改语句：<br />conn.execute&nbsp;"update&nbsp;Counts&nbsp;set&nbsp;counts='"&counts&"'&nbsp;where&nbsp;num="&num&"&nbsp;and&nbsp;Atime='"&now()&"'"<br />等号左边都是字段名，等号右边是传值过来的变量名，counts&nbsp;字段是文本型，所以写入时必须前后加单引号，无论是写入还是查询都一样，后面的查寻语句中，num&nbsp;字段是数字型，所以前后就没有单引号了，Atime&nbsp;字段是时间型所以前后也要加单引号。<br />最重要的是以ID查询，ID字段是唯一的并且数字类型，很明显查询ID号时前后也不能有单引号<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">conn.execute&nbsp;"update&nbsp;Counts&nbsp;set&nbsp;counts='"&counts&"'&nbsp;where&nbsp;id='"&id&"'"&nbsp;&nbsp;'错误写法<br />conn.execute&nbsp;"update&nbsp;Counts&nbsp;set&nbsp;counts='"&counts&"'&nbsp;where&nbsp;id="&id&nbsp;&nbsp;'正确写法</div></div><br /><br />二、ACCESS&nbsp;数据库连接<br />通常数据库连接有两种方式，新手基本不知道用哪一种方式，或者在什么情况下用哪一种，又或者不知道两者的原理<br />①直接连接数据库文件<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />Set&nbsp;conn&nbsp;=&nbsp;Server.CreateObject("ADODB.Connection")<br />conn.Open&nbsp;"DRIVER={Microsoft&nbsp;Access&nbsp;Driver&nbsp;(*.mdb)};&nbsp;DBQ="&Server.MapPath("database/yanhang.mdb")<br /></div></div><br />②通过数据源来连接数据库文件<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />Set&nbsp;conn&nbsp;=&nbsp;Server.CreateObject("ADODB.Connection")<br />conn.Open&nbsp;"Provider=Microsoft.Jet.OLEDB.4.0;&nbsp;Data&nbsp;Source="&Server.MapPath("database/yanhang.mdb")<br /></div></div><br />那么，两者到底哪一个好呢，当然是第二种，因为第一种其实就是客户端浏览器直接读取数据库的，所以安全方面差很多，第二种通过数据源连接，是以服务器数据源工具连接的，与客户端没关系，所以数据库不会暴露给客户端，安全系数高很多。<br /><br />ACCESS&nbsp;数据库对应程序的应用：①直接连接数据库文件<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />conn.Open&nbsp;"DRIVER={Microsoft&nbsp;Access&nbsp;Driver&nbsp;(*.mdb)};&nbsp;DBQ="&Server.MapPath("database/yanhang.mdb")<br /></div></div><br />这样的数据库连接方式，添加语句：<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />set&nbsp;rs=server.createobject("adodb.recordset")&nbsp;&nbsp;&nbsp;'(正确写法)<br />rs.open&nbsp;"select&nbsp;*&nbsp;from&nbsp;dndj",conn,1,3<br />rs.addnew<br />rs("bh")&nbsp;=&nbsp;bh<br />rs("bm")&nbsp;=&nbsp;bm<br />rs("xm")&nbsp;=&nbsp;xm<br />rs("xsq")&nbsp;=&nbsp;xsq<br />rs.update<br />rs.close<br />set&nbsp;rs=nothing<br /><br />set&nbsp;rs=server.createobject("adodb.recordset")&nbsp;&nbsp;'(错误写法)<br />sql="insert&nbsp;into&nbsp;dndj(bh,bm,xm,xsq)&nbsp;values('bh','bm','xm','xsq')"<br />rs.open&nbsp;sql,conn,1,3<br /></div></div><br />ACCESS&nbsp;数据库对应程序的应用：②通过数据源来连接数据库文件<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />conn.Open&nbsp;"Provider=Microsoft.Jet.OLEDB.4.0;&nbsp;Data&nbsp;Source="&Server.MapPath("database/yanhang.mdb")<br /></div></div><br />这样的数据库连接方式，添加语句：<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />conn.execute&nbsp;"insert&nbsp;into&nbsp;dndj(bh,bm,xm,xsq)&nbsp;values('"&bh&"','"&bm&"','"&xm&"','"&xsq&"')"&nbsp;&nbsp;&nbsp;&nbsp;'(正确写法)<br /><br />set&nbsp;rs=server.createobject("adodb.recordset")&nbsp;&nbsp;'(错误写法)<br />sql="insert&nbsp;into&nbsp;dndj(bh,bm,xm,xsq)&nbsp;values('bh','bm','xm','xsq')"<br />rs.open&nbsp;sql,conn,1,3<br /></div></div><br />三、双引号的应用<br />通常我们写超级连接这样&nbsp;&lt;a&nbsp;href="abc.asp?id=&lt;%=rs("id")%&gt;"&gt;超级连接&lt;/a&gt;<br />但要是把这个超级连接编译进asp里面呢<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />response.write&nbsp;"&lt;a&nbsp;href=""abc.asp?id="&rs("id")&"""&gt;超级连接&lt;/a&gt;"&nbsp;&nbsp;&nbsp;'(正确写法)<br />response.write&nbsp;"&lt;a&nbsp;href='abc.asp?id="&rs("id")&"'&gt;超级连接&lt;/a&gt;"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'(正确写法)<br />response.write&nbsp;"&lt;a&nbsp;href=abc.asp?id="&rs("id")&"&gt;超级连接&lt;/a&gt;"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'(正确写法)<br /><br />response.write&nbsp;"&lt;a&nbsp;href="abc.asp?id=&lt;%=rs("id")%&gt;"&gt;超级连接&lt;/a&gt;"&nbsp;&nbsp;'(错误写法)<br />response.write&nbsp;"&lt;a&nbsp;href="abc.asp?id="&rs("id")&""&gt;超级连接&lt;/a&gt;"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'(错误写法)<br /></div></div><br />表单编译进asp里&nbsp;&nbsp;&lt;input&nbsp;type="text"&nbsp;name="id"&nbsp;value="&lt;%rs("id")%&gt;"&nbsp;/&gt;<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />response.write&nbsp;"&lt;input&nbsp;type=""text""&nbsp;name=""id""&nbsp;value="""&rs("id")&"""&nbsp;/&gt;"&nbsp;'(正确写法)&nbsp;注意：这里有三个双引号<br />response.write&nbsp;"&lt;input&nbsp;type='text'&nbsp;name='id'&nbsp;value='"&rs("id")&"'&nbsp;/&gt;"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'(正确写法)<br />response.write&nbsp;"&lt;input&nbsp;type=text&nbsp;name=id&nbsp;value="&rs("id")&"&nbsp;/&gt;"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'(正确写法)<br /><br />response.write&nbsp;"&lt;input&nbsp;type="text"&nbsp;name="id"&nbsp;value="&lt;%=rs("id")%&gt;"&nbsp;/&gt;"&nbsp;&nbsp;'(错误写法)<br />response.write&nbsp;"&lt;input&nbsp;type="text"&nbsp;name="id"&nbsp;value=""&rs("id")&""&nbsp;/&gt;"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'(错误写法)<br /></div></div><br />四、防止ACCESS数据库被下载的几个方法<br />很多动态站点大量应用了数据库，数据库理所当然成了一个站点的核心文件。一旦数据库被非法下载，极有可能被恶意人士破坏网站。或者窃取资料。<br /><br />下面提供的方法分别适用使用虚拟主机空间的用户和有IIS控制权的用户！&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;一：购买虚拟主机空间的，适合没有IIS控制权<br />1：发挥你的想象力&nbsp;修改数据库文件名<br />这个是最基本的。我想现在也没有多少连数据库文件名都懒得改的人吧？&nbsp;至于改成什么，你自己看着办，至少要保证文件名复杂，不可猜测性。当然这个时候你的数据库所在目录是不能开放目录浏览权限的！<br /><br />2：数据库名后缀改为ASA、ASP等<br />这个听说很流行，不过我测试了好多次，发现并不理想，如果真正要起到防止下载的作用，要进行一些二进制字段添加等设置，一句话，繁而复杂（如果你的数据库有很多的话，这个方法实在不是很好）<br /><br />3：数据库名前加“#”<br />只需要把数据库文件前名加上#、然后修改数据库连接文件（如conn.asp）中的数据库地址。原理是下载的时候只能识别&nbsp;#号前名的部分，对于后面的自动去掉，比如你要下载：<a href="http://bbs.bccn.net/date/#123.mdb" target="new">http://bbs.bccn.net/date/#123.mdb</a>(假设存在的话）。无论是IE还是FLASHGET等下到的都是<a href="http://bbs.bccn.net/date/index.htm" target="new">http://bbs.bccn.net/date/index.htm</a><br /><br />另外在数据库文件名中保留一些空格也起到类似作用，由于HTTP协议对地址解析的特殊性，空格会被编码为"%20",如<a href="http://bbs.bccn.net/date/123&nbsp;456.mdb" target="new">http://bbs.bccn.net/date/123&nbsp;456.mdb</a><br />下载时<a href="http://bbs.bccn.net/date/123%20456.mdb" target="new">http://bbs.bccn.net/date/123%20456.mdb</a>。而我们的目录就根本没有123%20456.mdb这个文件，所以下载也是无效的，即使你暴露了数据库地址，一般情况下别人也是无法下载，最好两种方法同时使用“#”+空格，例如&nbsp;<a href="http://bbs.bccn.net/date/#123&nbsp;456.mdb" target="new">http://bbs.bccn.net/date/#123&nbsp;456.mdb</a><br /><br />4：加密数据库<br />用ACCESS将你的数据库以独占方式打开后，在工具-安全-设置数据库密码，加密后要修改数据库连接页，&nbsp;如：<br />conn.open&nbsp;"driver={microsoft&nbsp;access&nbsp;driver&nbsp;(*.mdb)};uid=admin;pwd=数据库密码;dbq=数据库路径"<br />这样修改后，数据库即使被人下载了，别人也无法打开（前提是你的数据库连接页中的密码没有被泄露）<br />但值得注意的是，由于Access数据库的加密机制比较简单，即使设置了密码，解密也很容易。该数据库系统通过将用户输入的密码与某一固定密钥进行“异或”来形成一个加密串，并将其存储在*.mdb文件从地址“&H42”开始的区域内。所以一个好的程序员可以轻松制作一个几十行的小程序就可以轻松地获得任何Access数据库的密码。因此，只要数据库被下载，其安全依然是个未知数。&nbsp;<br /><br /><br />&nbsp;&nbsp;二：有主机控制权&nbsp;（当然虚拟空间的设置在这里依然可以用）<br />5:数据库放在WEB目录外<br />如你的WEB目录是e:\webroot，可以把数据库放到e:\data这个文件夹里，在e:\webroot里的数据库连接页中<br />修改数据库连接地址为："../data/#123&nbsp;456.mdb"&nbsp;的形式，这样数据库可以正常调用，但是无法下载的，因为它不在WEB目录里！这个方法一般也适合购买虚拟空间的用户。<br /><br />6:使用ODBC数据源。<br />在ASP等程序设计中，如果有条件，应尽量使用ODBC数据源，不要把数据库名写在程序中，否则，数据库名将随ASP源代码的失密而一同失密<br />例如：<br />conn.open&nbsp;"driver={Microsoft&nbsp;Access&nbsp;Driver&nbsp;(*.mdb)};dbq="&Server.MapPath("../123/abc/asfadf.mdb")<br />可见，即使数据库名字起得再怪异，隐藏的目录再深，ASP源代码失密后，也很容易被下载下来。<br />如果使用ODBC数据源，就不会存在这样的问题了：conn.open&nbsp;"ODBC-DSN名"&nbsp;,不过这样是比较烦的，目录移动的话又要重新设置数据源了！<br /><br />7：添加数据库名的如MDB的扩展映射<br />这个方法就是通过修改IIS设置来实现，适合有IIS控制权的朋友，不适合购买虚拟主机用户(除非管理员已经设置了）。这个方法我认为是目前最好的。只要修改一处，整个站点的数据库都可以防止被下载。无须修改代码即使暴露目标地址也可以防止下载。<br /><br />设置：<br />在&nbsp;IIS属性---主目录---配置---映射---应用程序扩展那里添加.mdb文件的应用解析。注意这里的选择的DLL（或EXE等）似乎也不是任意的，选择不当，这个MDB文件还是可以被下载的，&nbsp;&nbsp;注意最好不要选择选择asp.dll等。你可以自己多测试下<br />这样修改后下载数据库如：http://bbs.bccn.net/data/dvbbs6.mdb。就出现（404或500等错误）<br /><br />8：使用.net的优越性<br />动网的木鸟就写过一个防非法下载文件的“WBAL&nbsp;防盗链工具”。记得本论坛曾经也有位牛人也发表过数据库防下载的插件，是.dll的加载到IIS里的。<br />不过&nbsp;那个只实现了防止非本地下载的&nbsp;，没有起到真正的防下载数据库的功能。不过这个方法跟第5种差不多<br />可以通过修改.NET文件，实现本地也不能下载！<br /><br />这几个方法中，只有第7和8个是统一性改的，一次修改配置后，整个站点的数据库都可以防止下载，其他几个就要分别修改数据库名和连接文件，比较麻烦，不过对于虚拟主机的朋友也只能这样了！<br /><br />其实第6种方法应该是第5种方法的扩展，可以实现特殊的功能，但对于不支持.net的主机或者怕设置麻烦的话，还是直接用第5种方法了，而且默认情况下第6种方法，依然可以通过复制连接到同主机的论坛或留言本发表，然后就可以点击下载了（因为这样的引用页是来自同主机的）<br /><br />这几个方法各有长短，请自己选择性地使用。这些方法也不是绝对的安全，还需要网站管理员平时注意一些系统的安全，以及写ASP代码本身的安全&nbsp;，否则依然有可能被人下载或者修改数据库！<br /><br /><br /><br /><br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">VBScript下载文件</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_86.html" />
      <updated>2008-7-16 3:38:49</updated>
      <published>2008-7-16 3:38:49</published>
      <id>http://dev.mo.cn/article_86.html</id>
      <summary type="html">
      <![CDATA[把下面代码保存到一个文本文件,修改后缀为.vbs,然后运行,就能下载文件了，最好不要下载大文件，很耗时间的~<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />'函数名:WritFile<br />'作用:把指定二进制数据写入文件<br />'参数:byt--二进制数据,file--要写入的文件名<br />Function&nbsp;WritFile(byt,file)&nbsp;'写入文件函数<br />&nbsp;&nbsp;&nbsp;SavePath=file<br />&nbsp;&nbsp;&nbsp;Set&nbsp;objAso&nbsp;=&nbsp;CreateObject("ADODB.Stream")<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objAso.Type=1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objAso.Mode&nbsp;=&nbsp;3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objAso.Open&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objAso.Position&nbsp;=0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objAso.Write&nbsp;byt<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objAso.SaveToFile&nbsp;SavePath,2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objAso.Close<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;objAso=nothing<br />End&nbsp;Function<br /><br />'函数名:GetRes<br />'作用:下载文件<br />'参数:URL-要获取的URL<br />function&nbsp;GetRes(URL)<br />dim&nbsp;ResBody,ResStr,PageCode,ReturnStr<br />sPos=InStrRev(URL,"/")+1<br />sStr=mid(url,sPos)<br />Set&nbsp;Http=createobject("MiCROSOFT.XMLHTTP")&nbsp;<br />Http.open&nbsp;"GET",URL,False&nbsp;<br />Http.Send()&nbsp;<br />If&nbsp;Http.Readystate&nbsp;=4&nbsp;Then&nbsp;<br />&nbsp;&nbsp;If&nbsp;Http.status=200&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResBody=http.responseBody<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;head=Http.getResponseHeader("content-disposition")<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;head&lt;&gt;""&nbsp;then&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;startPos=instr(head,"=")+1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filename=mid(head,startPos)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elseif&nbsp;instr(sStr,".")&gt;0&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filename=sStr<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filename=getname()&".dat"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;if<br />&nbsp;&nbsp;&nbsp;&nbsp;WritFile&nbsp;ResBody,"c:\"&filename<br />&nbsp;&nbsp;&nbsp;&nbsp;GetRes=filename<br />&nbsp;&nbsp;End&nbsp;If&nbsp;<br />End&nbsp;If&nbsp;<br />End&nbsp;Function<br /><br />'函数名:getname<br />'作用:按日期获取随机数字<br />function&nbsp;getname()<br />&nbsp;&nbsp;&nbsp;&nbsp;newname=now()<br />&nbsp;&nbsp;&nbsp;&nbsp;newname=replace(newname,"&nbsp;","")<br />&nbsp;&nbsp;&nbsp;&nbsp;newname=replace(newname,".","")<br />&nbsp;&nbsp;&nbsp;&nbsp;newname=replace(newname,":","")<br />&nbsp;&nbsp;&nbsp;&nbsp;newname=replace(newname,"-","")&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;newname=replace(newname,"上午","am")<br />&nbsp;&nbsp;&nbsp;&nbsp;newname=replace(newname,"下午","pm")<br />&nbsp;&nbsp;&nbsp;&nbsp;Randomize()<br />&nbsp;&nbsp;&nbsp;&nbsp;newname=newname&cstr(int(Rnd()*10))<br />&nbsp;&nbsp;&nbsp;&nbsp;Randomize()<br />&nbsp;&nbsp;&nbsp;&nbsp;newname=newname&cstr(int(Rnd()*10))<br />&nbsp;&nbsp;&nbsp;&nbsp;getname=newname<br />end&nbsp;function<br /><br />dim&nbsp;str,time1,time2,tim,f_name,speed<br />str=""<br />time1=timer<br />f_name=GetRes("http://25.duote.org/Fetion2008.exe")<br />time2=timer<br />tim=formatnumber((time2-time1)*1000,2)<br />str=str&"文件"""&f_name&"""下载完毕,耗时"&tim&"MS!"&vbcrlf<br />str=str&"保存在C:\根目录下！"&vbcrlf<br />msgbox&nbsp;str,vbinformation,"下载完毕!"<br /></div></div><br /><br /><br /><br /><br /><br />]]>
      </summary>
      <category term="" label="AJAX" scheme="http://dev.mo.cn/cat_diary_2.html" />
   </entry>
   <entry>
      <title type="html">VBScript小偷</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_85.html" />
      <updated>2008-7-16 2:22:28</updated>
      <published>2008-7-16 2:22:28</published>
      <id>http://dev.mo.cn/article_85.html</id>
      <summary type="html">
      <![CDATA[把下面代码保存到一个文本文件,修改后缀为.vbs,然后运行,输入正确网址就可以"偷"别人的网页了~哈哈<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />time1=timer<br />dim&nbsp;reg,vUrl,VBody,code,time1,time2,title<br />vUrl=inputbox("请输入有效网址，必须以http://开头","请输入网址","http://blog.ii-home.cn")<br />path=left(Wscript.ScriptFullName,len(Wscript.ScriptFullName)-len(Wscript.ScriptName))&nbsp;<br />str=""<br />reg="\&lt;meta.+&nbsp;charset=&nbsp;{0,}([^\""&nbsp;\&gt;\/]*).+\/{0,1}\&gt;"<br />VBody=GetResStr(vUrl)<br />code=GetCode(VBody,reg)<br />title=GetCode(VBody,"\&lt;title\&gt;(.*)\&lt;\/title\&gt;")<br />time2=timer<br />tim=formatnumber((time2-time1)*1000,2)&"MS"<br />str=str&"页面标题:"&title&vbcrlf<br />str=str&"使用时间:"&tim&vbcrlf<br />fname=path&"\"&getname()&".html"<br />WritFile&nbsp;replaceStr(VBody),fname<br />'WritFile&nbsp;VBody,fname&nbsp;'若不清除img标签请使用这个<br />str=str&"文件已经成功保存到"&fname<br /><br />WScript.echo&nbsp;str<br /><br />Function&nbsp;WritFile(str,file)&nbsp;'写入文件函数<br />&nbsp;&nbsp;&nbsp;SavePath=file<br />&nbsp;&nbsp;&nbsp;Set&nbsp;objAso&nbsp;=&nbsp;CreateObject("ADODB.Stream")<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objAso.Type=2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objAso.Mode&nbsp;=&nbsp;3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objAso.Open&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objAso.Position&nbsp;=0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objAso.Writetext&nbsp;str<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objAso.SaveToFile&nbsp;SavePath,2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objAso.Close<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;objAso=nothing<br />End&nbsp;Function<br /><br />'函数名:GetResStr<br />'作用:获取指定URL的HTML代码<br />'参数:URL-要获取的URL<br />function&nbsp;GetResStr(URL)<br />err.clear<br />dim&nbsp;ResBody,ResStr,PageCode,ReturnStr<br />Set&nbsp;Http=createobject("MiCROSOFT.XMLHTTP")&nbsp;<br />Http.open&nbsp;"GET",URL,False&nbsp;<br />Http.Send()&nbsp;<br />If&nbsp;Http.Readystate&nbsp;=4&nbsp;Then&nbsp;<br />&nbsp;&nbsp;If&nbsp;Http.status=200&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;ResStr=http.responseText<br />&nbsp;&nbsp;&nbsp;&nbsp;ResBody=http.responseBody<br />&nbsp;&nbsp;&nbsp;&nbsp;PageCode=GetCode(ResStr,reg)<br />&nbsp;&nbsp;&nbsp;&nbsp;ReturnStr=BytesToBstr(http.responseBody,PageCode)<br />&nbsp;&nbsp;&nbsp;&nbsp;GetResStr=ReturnStr<br />&nbsp;&nbsp;End&nbsp;If&nbsp;<br />End&nbsp;If&nbsp;<br />End&nbsp;Function<br /><br />'函数名:BytesToBstr<br />'作用:转换二进制数据为字符<br />'参数:Body-二进制数据,Cset-文本编码方式<br />Function&nbsp;BytesToBstr(Body,Cset)&nbsp;<br />&nbsp;&nbsp;Dim&nbsp;Objstream&nbsp;<br />&nbsp;&nbsp;Set&nbsp;Objstream&nbsp;=&nbsp;CreateObject("adodb.stream")&nbsp;<br />&nbsp;&nbsp;objstream.Type&nbsp;=&nbsp;1&nbsp;<br />&nbsp;&nbsp;objstream.Mode&nbsp;=3&nbsp;<br />&nbsp;&nbsp;objstream.Open&nbsp;<br />&nbsp;&nbsp;objstream.Write&nbsp;body&nbsp;<br />&nbsp;&nbsp;objstream.Position&nbsp;=&nbsp;0&nbsp;<br />&nbsp;&nbsp;objstream.Type&nbsp;=&nbsp;2&nbsp;<br />&nbsp;&nbsp;objstream.Charset&nbsp;=Cset&nbsp;<br />&nbsp;&nbsp;BytesToBstr&nbsp;=&nbsp;objstream.ReadText&nbsp;<br />&nbsp;&nbsp;objstream.Close&nbsp;<br />&nbsp;&nbsp;set&nbsp;objstream&nbsp;=&nbsp;nothing&nbsp;<br />End&nbsp;Function<br />&nbsp;<br />'函数名:GetCode<br />'作用:转换二进制为字符<br />'参数:str-待查询字符串,regstr-正则表达式<br />Function&nbsp;GetCode(str,regstr)<br />Dim&nbsp;Reg,serStr<br />set&nbsp;Reg=&nbsp;new&nbsp;RegExp<br />Reg.IgnoreCase&nbsp;=&nbsp;True<br />Reg.MultiLine&nbsp;=&nbsp;True<br />Reg.Pattern&nbsp;=regstr<br />if&nbsp;Reg.test(str)&nbsp;then&nbsp;'若查询到匹配项<br />&nbsp;&nbsp;&nbsp;Set&nbsp;Cols&nbsp;=&nbsp;Reg.Execute(str)<br />&nbsp;&nbsp;&nbsp;serStr=Cols(0).SubMatches(0)&nbsp;'使用匹配到的第一个匹配项<br />else&nbsp;'否则给个默认值gb2312,有点省懒法，如果页面没给出编码格式，想知道确实有点麻烦<br />&nbsp;&nbsp;&nbsp;serStr="gb2312"<br />end&nbsp;if<br />GetCode=serStr<br />end&nbsp;function<br /><br />'函数名:getname<br />'作用:获得随机文件名<br />'参数:无<br />function&nbsp;getname()<br />&nbsp;&nbsp;&nbsp;&nbsp;dim&nbsp;y,m,d,h,mm,s,r<br />&nbsp;&nbsp;&nbsp;&nbsp;Randomize()<br />&nbsp;&nbsp;&nbsp;&nbsp;y=year(now)<br />&nbsp;&nbsp;&nbsp;&nbsp;m=month(now):if&nbsp;m&lt;10&nbsp;then&nbsp;m="0"&m<br />&nbsp;&nbsp;&nbsp;&nbsp;d=day(now):if&nbsp;d&lt;10&nbsp;then&nbsp;d="0"&d<br />&nbsp;&nbsp;&nbsp;&nbsp;h=hour(now):if&nbsp;h&lt;10&nbsp;then&nbsp;h="0"&h<br />&nbsp;&nbsp;&nbsp;&nbsp;mm=minute(now):if&nbsp;mm&lt;10&nbsp;then&nbsp;mm="0"&mm<br />&nbsp;&nbsp;&nbsp;&nbsp;s=second(now):if&nbsp;s&lt;10&nbsp;then&nbsp;s="0"&s<br />&nbsp;&nbsp;&nbsp;&nbsp;r=cint(rnd()*10):if&nbsp;r&lt;10&nbsp;then&nbsp;r="0"&r<br />&nbsp;&nbsp;&nbsp;&nbsp;getname=y&m&d&h&mm&s&r<br />end&nbsp;function<br /><br />'函数名:replaceStr<br />'作用:替换指定字符<br />'参数:strcontent-待替换字符串<br />Function&nbsp;replaceStr(strcontent)&nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; dim&nbsp;re<br />&nbsp; &nbsp; &nbsp; &nbsp; Set&nbsp;re=new&nbsp;RegExp<br />&nbsp; &nbsp; &nbsp; &nbsp; re.IgnoreCase&nbsp;=true<br />&nbsp; &nbsp; &nbsp; &nbsp; re.Global=True<br />&nbsp; &nbsp; &nbsp; &nbsp; re.pattern="\&lt;img[^\&lt;\&gt;\/].*(\/|)\&gt;"&nbsp;'祛除所有img标签<br />&nbsp; &nbsp; &nbsp; &nbsp; strcontent=re.replace(strcontent,"")<br />&nbsp; &nbsp; &nbsp; &nbsp; set&nbsp;re=Nothing<br />&nbsp; &nbsp; &nbsp; &nbsp; replaceStr=strcontent&nbsp;<br />End&nbsp;Function<br /></div></div><br /><br />]]>
      </summary>
      <category term="" label="AJAX" scheme="http://dev.mo.cn/cat_diary_2.html" />
   </entry>
   <entry>
      <title type="html">AJAX的POST方法传递数据</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_84.html" />
      <updated>2008-7-15 21:48:41</updated>
      <published>2008-7-15 21:48:41</published>
      <id>http://dev.mo.cn/article_84.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;AJAX的POST方法传递数据的示例代码，a.asp另存为utf-8格式；<br />a.asp的代码为：<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;%<br />for&nbsp;i=0&nbsp;to&nbsp;1000000<br />next<br />response.write&nbsp;request.form("say")&"&lt;br&nbsp;/&gt;"&request.form("content")<br />%&gt;<br /></div></div><br />test.asp的代码为：<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;meta&nbsp;http-equiv="Content-Language"&nbsp;content="zh-cn"&gt;<br />&lt;meta&nbsp;http-equiv="Content-Type"&nbsp;content="text/html;&nbsp;charset=gb2312"&gt;<br /><br />&lt;script&nbsp;type="text/javascript"&gt;<br />var&nbsp;oBao;<br />var&nbsp;obj;<br />//发送请求<br />function&nbsp;sxs()&nbsp;{<br />obj=document.getElementById("return");<br />&nbsp;if&nbsp;(window.ActiveXObject)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oBao=new&nbsp;ActiveXObject("Microsoft.XMLHTTP");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp;(window.XMLHttpRequest)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oBao=new&nbsp;XMLHttpRequest();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />var&nbsp;my_url='a.asp';<br />obj.innerHTML='请等待...';&nbsp;&nbsp;<br />oBao.onreadystatechange=changecontent;<br />oBao.open("post",my_url,true);<br />oBao.setRequestHeader("Content-Type","application/x-www-form-urlencoded");&nbsp;<br />oBao.send('say='+escape('我爱你')+'&content=anlige');&nbsp;<br />}<br />//发送请求<br />function&nbsp;changecontent(){<br />if(oBao.readyState==4){<br />&nbsp;&nbsp;&nbsp;if(oBao.status==200){&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.innerHTML='返回信息:&lt;br&nbsp;/&gt;'+oBao.responseText;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.innerHTML='返回信息:&lt;br&nbsp;/&gt;出现错误,错误代码为:'+oBao.status;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;}<br />}<br />&lt;/script&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;input&nbsp;onmouseover="this.focus();"&nbsp;type="button"&nbsp;value="测试"&nbsp;onclick="return&nbsp;sxs();"&nbsp;/&gt;&lt;br&nbsp;/&gt;&lt;br&nbsp;/&gt;<br />&lt;span&nbsp;id="return"&gt;&lt;/span&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br /></div></div><br />]]>
      </summary>
      <category term="" label="AJAX" scheme="http://dev.mo.cn/cat_diary_2.html" />
   </entry>
   <entry>
      <title type="html">ie和firefox兼容(CSS)</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_83.html" />
      <updated>2008-7-8 4:19:57</updated>
      <published>2008-7-8 4:19:57</published>
      <id>http://dev.mo.cn/article_83.html</id>
      <summary type="html">
      <![CDATA[&nbsp;DOCTYPE&nbsp;影响&nbsp;CSS&nbsp;处理<br />　　2.FF:&nbsp;div&nbsp;设置&nbsp;margin-left,&nbsp;margin-right&nbsp;为&nbsp;auto&nbsp;时已经居中,&nbsp;IE&nbsp;不行<br />　　3.FF:&nbsp;body&nbsp;设置&nbsp;text-align&nbsp;时,&nbsp;div&nbsp;需要设置&nbsp;margin:&nbsp;auto(主要是&nbsp;margin-left,margin-right)&nbsp;方可居中<br />　　4.FF:&nbsp;设置&nbsp;padding&nbsp;后,&nbsp;div&nbsp;会增加&nbsp;height&nbsp;和&nbsp;width,&nbsp;但&nbsp;IE&nbsp;不会,&nbsp;故需要用&nbsp;!important&nbsp;多设一个&nbsp;height&nbsp;和&nbsp;width<br />　　5.FF:&nbsp;支持&nbsp;!important,&nbsp;IE&nbsp;则忽略,&nbsp;可用&nbsp;!important&nbsp;为&nbsp;FF&nbsp;特别设置样式，值得注意的是，一定要将xxxx&nbsp;!important&nbsp;这句放置在另一句之上<br />　　6.div&nbsp;的垂直居中问题:&nbsp;vertical-align:middle;&nbsp;将行距增加到和整个DIV一样高&nbsp;line-height:200px;&nbsp;然后插入文字，就垂直居中了。缺点是要控制内容不要换行<br />　　7.cursor:&nbsp;pointer&nbsp;可以同时在&nbsp;IE&nbsp;FF&nbsp;中显示游标手指状，&nbsp;hand&nbsp;仅&nbsp;IE&nbsp;可以<br />　&nbsp;8.FF:&nbsp;链接加边框和背景色，需设置&nbsp;display:&nbsp;block,&nbsp;同时设置&nbsp;float:&nbsp;left&nbsp;保证不换行。参照&nbsp;menubar,&nbsp;给&nbsp;a&nbsp;和&nbsp;menubar&nbsp;设置高度是为了避免底边显示错位,&nbsp;若不设&nbsp;height,&nbsp;可以在&nbsp;menubar&nbsp;中插入一个空格。<br />　　9.在mozilla&nbsp;firefox和IE中的BOX模型解释不一致导致相差2px解决方法：div{margin:30px!important;margin:28px;}<br />　　注意这两个margin的顺序一定不能写反，据阿捷的说法!important这个属性IE不能识别，但别的浏览器可以识别。所以在IE下其实解释成这样：div{maring:30px;margin:28px}<br />　　重复定义的话按照最后一个来执行，所以不可以只写margin:XXpx!important;<br /><br />　　10.IE5&nbsp;和IE6的BOX解释不一致<br />　　IE5下div{width:300px;margin:0&nbsp;10px&nbsp;0&nbsp;10px;}<br />　　div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px，而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改div{width:300px!important;width&nbsp;/**/:340px;margin:0&nbsp;10px&nbsp;0&nbsp;10px}<br />　　关于这个/**/是什么我也不太明白，只知道IE5和firefox都支持但IE6不支持，如果有人理解的话，请告诉我一声，谢了！：）<br /><br />　　11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义ul{margin:0;padding:0;}<br />　　就能解决大部分问题<br /><br />　　<br />注意事项：<br /><br />　　1、float的div一定要闭合。<br /><br />　　例如：(其中floatA、floatB的属性已经设置为float:left;)&lt;#div&nbsp;id=\"floatA\"&nbsp;&gt;<br />&lt;#div&nbsp;id=\"floatB\"&nbsp;&gt;<br />&lt;#div&nbsp;id=\"NOTfloatC\"&nbsp;&gt;<br />　　这里的NOTfloatC并不希望继续平移，而是希望往下排。<br />　　这段代码在IE中毫无问题，问题出在FF。原因是NOTfloatC并非float标签，必须将float标签闭合。<br />　　在&lt;#div&nbsp;class=\"floatB\"&gt;<br />&lt;#div&nbsp;class=\"NOTfloatC\"&gt;<br />　　之间加上&lt;#div&nbsp;class=\"clear\"&gt;<br />　　这个div一定要注意声明位置，一定要放在最恰当的地方，而且必须与两个具有float属性的div同级，之间不能存在嵌套关系，否则会产生异常。<br />　　并且将clear这种样式定义为为如下即可：.clear{<br />clear:both;}<br />　　此外，为了让高度能自动适应，要在wrapper里面加上overflow:hidden;<br />　　当包含float的box的时候，高度自动适应在IE下无效，这时候应该触发IE的layout私有属性(万恶的IE啊！)用zoom:1;可以做到，这样就达到了兼容。<br />　　例如某一个wrapper如下定义：.colwrapper{<br />overflow:hidden;<br />zoom:1;<br />margin:5px&nbsp;auto;}<br /><br />　　2、margin加倍的问题。<br /><br />　　设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。<br />　　解决方案是在这个div里面加上display:inline;<br />例如：<br />&lt;#div&nbsp;id=\"imfloat\"&gt;<br /><br /><br />　　相应的css为<br />#IamFloat{<br />float:left;<br />margin:5px;/*IE下理解为10px*/<br />display:inline;/*IE下再理解为5px*/}<br /><br />　　3、关于容器的包涵关系<br /><br />　　很多时候，尤其是容器内有平行布局，例如两、三个float的div时，宽度很容易出现问题。在IE中，外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。<br /><br />　　4、关于高度的问题<br /><br />　　如果是动态地添加内容，高度最好不要定义。浏览器可以自动伸缩，然而如果是静态的内容，高度最好定好。（似乎有时候不会自动往下撑开，不知道具体怎么回事）<br /><br />　　5、最狠的手段&nbsp;-&nbsp;!important;<br /><br />　　如果实在没有办法解决一些细节问题,可以用这个方法.FF对于"!important"会自动优先解析,然而IE则会忽略.如下.tabd1{<br />background:url(/res/images/up/tab1.gif)&nbsp;no-repeat&nbsp;0px&nbsp;0px&nbsp;!important;&nbsp;/*Style&nbsp;for&nbsp;FF*/<br />background:url(/res/images/up/tab1.gif)&nbsp;no-repeat&nbsp;1px&nbsp;0px;&nbsp;/*&nbsp;Style&nbsp;for&nbsp;IE&nbsp;*/}<br />　　值得注意的是，一定要将xxxx&nbsp;!important&nbsp;这句放置在另一句之上，上面已经提过&nbsp;<br /><br /><br /><br />]]>
      </summary>
      <category term="" label="HTML/CSS" scheme="http://dev.mo.cn/cat_diary_8.html" />
   </entry>
   <entry>
      <title type="html">IE/Firefox兼容性汇总(JavaScript)</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_82.html" />
      <updated>2008-7-8 4:03:51</updated>
      <published>2008-7-8 4:03:51</published>
      <id>http://dev.mo.cn/article_82.html</id>
      <summary type="html">
      <![CDATA[以下以&nbsp;IE&nbsp;代替&nbsp;Internet&nbsp;Explorer，以&nbsp;MF&nbsp;代替&nbsp;Mozzila&nbsp;Firefox<br /><br />1.&nbsp;document.form.item&nbsp;问题<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1)现有问题：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;现有代码中存在许多&nbsp;document.formName.item("itemName")&nbsp;这样的语句，不能在&nbsp;MF&nbsp;下运行<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2)解决方法：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;改用&nbsp;document.formName.elements["elementName"]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(3)其它<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;参见&nbsp;2<br /><br />2.&nbsp;集合类对象问题<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1)现有问题：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;现有代码中许多集合类对象取用时使用&nbsp;()，IE&nbsp;能接受，MF&nbsp;不能。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2)解决方法：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;改用&nbsp;[]&nbsp;作为下标运算。如：document.forms("formName")&nbsp;改为&nbsp;document.forms["formName"]。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;又如：document.getElementsByName("inputName")(1)&nbsp;改为&nbsp;document.getElementsByName("inputName")[1]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(3)其它<br /><br />3.&nbsp;window.event<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1)现有问题：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用&nbsp;window.event&nbsp;无法在&nbsp;MF&nbsp;上运行<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2)解决方法：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MF&nbsp;的&nbsp;event&nbsp;只能在事件发生的现场使用，此问题暂无法解决。可以这样变通：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;原代码(可在IE中运行)：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input&nbsp;type="button"&nbsp;name="someButton"&nbsp;value="提交"&nbsp;onclick=""/&gt;<br />&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;&lt;script&nbsp;language="javascript"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;gotoSubmit()&nbsp;{<br />&nbsp;&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;alert(window.event);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;use&nbsp;window.event<br />&nbsp;&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;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/script&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;新代码(可在IE和MF中运行)：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input&nbsp;type="button"&nbsp;name="someButton"&nbsp;value="提交"&nbsp;onclick=""/&gt;<br />&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;&lt;script&nbsp;language="javascript"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;gotoSubmit(evt)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;evt&nbsp;=&nbsp;evt&nbsp;?&nbsp;evt&nbsp;:&nbsp;(window.event&nbsp;?&nbsp;window.event&nbsp;:&nbsp;null);<br />&nbsp;&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;alert(evt);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;use&nbsp;evt<br />&nbsp;&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;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/script&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;此外，如果新代码中第一行不改，与老代码一样的话(即&nbsp;gotoSubmit&nbsp;调用没有给参数)，则仍然只能在IE中运行，但不会出错。所以，这种方案&nbsp;tpl&nbsp;部分仍与老代码兼容。<br /><br />4.&nbsp;HTML&nbsp;对象的&nbsp;id&nbsp;作为对象名的问题<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1)现有问题<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在&nbsp;IE&nbsp;中，HTML&nbsp;对象的&nbsp;ID&nbsp;可以作为&nbsp;document&nbsp;的下属对象变量名直接使用。在&nbsp;MF&nbsp;中不能。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2)解决方法<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用&nbsp;getElementById("idName")&nbsp;代替&nbsp;idName&nbsp;作为对象变量使用。<br /><br />5.&nbsp;用idName字符串取得对象的问题<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1)现有问题<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在IE中，利用&nbsp;eval(idName)&nbsp;可以取得&nbsp;id&nbsp;为&nbsp;idName&nbsp;的&nbsp;HTML&nbsp;对象，在MF&nbsp;中不能。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2)解决方法<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用&nbsp;getElementById(idName)&nbsp;代替&nbsp;eval(idName)。<br /><br />6.&nbsp;变量名与某&nbsp;HTML&nbsp;对象&nbsp;id&nbsp;相同的问题<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1)现有问题<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在&nbsp;MF&nbsp;中，因为对象&nbsp;id&nbsp;不作为&nbsp;HTML&nbsp;对象的名称，所以可以使用与&nbsp;HTML&nbsp;对象&nbsp;id&nbsp;相同的变量名，IE&nbsp;中不能。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2)解决方法<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在声明变量时，一律加上&nbsp;var&nbsp;，以避免歧义，这样在&nbsp;IE&nbsp;中亦可正常运行。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;此外，最好不要取与&nbsp;HTML&nbsp;对象&nbsp;id&nbsp;相同的变量名，以减少错误。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(3)其它<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;参见&nbsp;问题4<br /><br />7.&nbsp;event.x&nbsp;与&nbsp;event.y&nbsp;问题<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1)现有问题<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在IE&nbsp;中，event&nbsp;对象有&nbsp;x,&nbsp;y&nbsp;属性，MF中没有。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2)解决方法<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在MF中，与event.x&nbsp;等效的是&nbsp;event.pageX。但event.pageX&nbsp;IE中没有。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;故采用&nbsp;event.clientX&nbsp;代替&nbsp;event.x。在IE&nbsp;中也有这个变量。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event.clientX&nbsp;与&nbsp;event.pageX&nbsp;有微妙的差别（当整个页面有滚动条的时候），不过大多数时候是等效的。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果要完全一样，可以稍麻烦些：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mX&nbsp;=&nbsp;event.x&nbsp;?&nbsp;event.x&nbsp;:&nbsp;event.pageX;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;然后用&nbsp;mX&nbsp;代替&nbsp;event.x<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(3)其它<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event.layerX&nbsp;在&nbsp;IE&nbsp;与&nbsp;MF&nbsp;中都有，具体意义有无差别尚未试验。<br /><br /><br />8.&nbsp;关于frame<br />&nbsp;&nbsp;&nbsp;&nbsp;(1)现有问题<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在&nbsp;IE中&nbsp;可以用window.testFrame取得该frame，mf中不行<br />&nbsp;&nbsp;&nbsp;&nbsp;(2)解决方法<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在frame的使用方面mf和ie的最主要的区别是：<br />如果在frame标签中书写了以下属性：<br />&lt;frame&nbsp;src="xx.htm"&nbsp;id="frameId"&nbsp;name="frameName"&nbsp;/&gt;<br />那么ie可以通过id或者name访问这个frame对应的window对象<br />而mf只可以通过name来访问这个frame对应的window对象<br />例如如果上述frame标签写在最上层的window里面的htm里面，那么可以这样访问<br />ie：&nbsp;window.top.frameId或者window.top.frameName来访问这个window对象<br />mf：&nbsp;只能这样window.top.frameName来访问这个window对象<br /><br />另外，在mf和ie中都可以使用window.top.document.getElementById("frameId")来访问frame标签<br />并且可以通过window.top.document.getElementById("testFrame").src&nbsp;=&nbsp;'xx.htm'来切换frame的内容<br />也都可以通过window.top.frameName.location&nbsp;=&nbsp;'xx.htm'来切换frame的内容<br />关于frame和window的描述可以参见bbs的‘window与frame’文章<br />以及/test/js/test_frame/目录下面的测试<br />----adun&nbsp;2004.12.09修改<br /><br />9.&nbsp;在mf中，自己定义的属性必须getAttribute()取得<br />10.在mf中没有&nbsp;&nbsp;&nbsp;parentElement&nbsp;parement.children&nbsp;&nbsp;&nbsp;而用<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parentNode&nbsp;parentNode.childNodes<br />&nbsp;&nbsp;&nbsp;&nbsp;childNodes的下标的含义在IE和MF中不同，MF使用DOM规范，childNodes中会插入空白文本节点。<br />&nbsp;&nbsp;&nbsp;一般可以通过node.getElementsByTagName()来回避这个问题。<br />&nbsp;&nbsp;&nbsp;&nbsp;当html中节点缺失时，IE和MF对parentNode的解释不同，例如<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;form&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;table&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/table&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/form&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;MF中input.parentNode的值为form,&nbsp;而IE中input.parentNode的值为空节点<br /><br />&nbsp;&nbsp;&nbsp;MF中节点没有removeNode方法，必须使用如下方法&nbsp;node.parentNode.removeChild(node)<br /><br />11.const&nbsp;问题<br />&nbsp;&nbsp;&nbsp;(1)现有问题:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在&nbsp;IE&nbsp;中不能使用&nbsp;const&nbsp;关键字。如&nbsp;const&nbsp;constVar&nbsp;=&nbsp;32;&nbsp;在IE中这是语法错误。<br />&nbsp;&nbsp;&nbsp;(2)解决方法:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不使用&nbsp;const&nbsp;，以&nbsp;var&nbsp;代替。<br /><br />12.&nbsp;body&nbsp;对象<br />&nbsp;&nbsp;&nbsp;&nbsp;MF的body在body标签没有被浏览器完全读入之前就存在，而IE则必须在body完全被读入之后才存在<br /><br />13.&nbsp;url&nbsp;encoding<br />在js中如果书写url就直接写&不要写&例如var&nbsp;url&nbsp;=&nbsp;'xx.jsp?objectName=xx&objectEvent=xxx';<br />frm.action&nbsp;=&nbsp;url那么很有可能url不会被正常显示以至于参数没有正确的传到服务器<br />一般会服务器报错参数没有找到<br />当然如果是在tpl中例外，因为tpl中符合xml规范，要求&书写为&<br />一般MF无法识别js中的&<br /><br /><br />14.&nbsp;nodeName&nbsp;和&nbsp;tagName&nbsp;问题<br />&nbsp;&nbsp;&nbsp;(1)现有问题：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在MF中，所有节点均有&nbsp;nodeName&nbsp;值，但&nbsp;textNode&nbsp;没有&nbsp;tagName&nbsp;值。在&nbsp;IE&nbsp;中，nodeName&nbsp;的使用好象<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有问题（具体情况没有测试，但我的IE已经死了好几次）。<br />&nbsp;&nbsp;&nbsp;(2)解决方法：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用&nbsp;tagName，但应检测其是否为空。<br /><br />15.&nbsp;元素属性<br />&nbsp;&nbsp;&nbsp;&nbsp;IE下&nbsp;input.type属性为只读，但是MF下可以修改<br /><br /><br />16.&nbsp;document.getElementsByName()&nbsp;和&nbsp;document.all[name]&nbsp;的问题<br />&nbsp;&nbsp;&nbsp;(1)现有问题：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在&nbsp;IE&nbsp;中，getElementsByName()、document.all[name]&nbsp;均不能用来取得&nbsp;div&nbsp;元素（是否还有其它不能取的元素还不知道）。<br /><br /><br />1,document.getElementById替代document.all（ie适用）<br />2,集合[]替代()（ie适用）<br />3,target替代srcElement;parentNode替代parentElement（parentNode&nbsp;ie适用）<br />4,node.parentNode.removeChild(node)替代removeNode(this)（ie适用）<br />5,有空白文本节点<br />6,无outerHTML属性<br />7,事件局部变量e替代事件全局变量event<br />8,e.button键值有别于event.button,只有3个键值而无组合键值<br />9,无ondrag事件<br />10,DOMMouseScroll替代onmousewheel;-e.detail替代event.wheelDelta<br />11,addEventListener替代attachEvent;removeEventListener替代detachEvent<br />12,e.preventDefault()替代event.returnValue=false;e.stopPropagation()替代event.cancelBubble=true<br />13,style.top、style.left等严格检查"px"单位（加"px"&nbsp;ie适用）<br />14,style="-moz-opacity:0.9"替代style="filter:alpha(opacity=90)";无其它filter<br />15,style.cursor="pointer"替代style.cursor="hand"（ie适用）<br />16,title替代alt（ie适用）<br />17,状态栏默认不可修改,需调整ff设置<br />18,内置绘图功能以canvas或者SVG替代vml<br />19,代码出错时经常不报错（想来也是ff的无奈之举吧,如果每个ie独有的表达方式换在它里面都报错的话,怕是报都报不过来吧）<br />20,对缓存的清理非常不好<br />注:标明“ie适用”者为通用性建议写法,未标明者在ie里不适用。&nbsp;<br /><br /><br /><br /><br />以下所有IE指IE6.0<br /><br />验证是否是IE浏览器(来之于google&nbsp;js)&nbsp;<br /><br />var&nbsp;agt=navigator.userAgent.toLowerCase();<br />var&nbsp;is_ie=(agt.indexOf("msie")!=-1&nbsp;&&&nbsp;document.all);<br />正式开始<br /><br />事件委托方法<br /><br />IE<br /><br />document.body.onload&nbsp;=&nbsp;inject;&nbsp;//Function&nbsp;inject()在这之前已被实现<br /><br />firefox<br /><br />document.body.onload&nbsp;=&nbsp;inject();<br /><br />有人说标准是：<br /><br />document.body.onload=new&nbsp;Function('inject()');<br /><br />在firefox无法取得event.srcElement<br /><br />通过其他方式传递对象<br /><br />if(isIE)<br />thistable.attachEvent("onmousedown",OnClickChangeTdBackColor);<br />//thistable.onmousedown=OnClickChangeTdBackColor;<br />else//deal&nbsp;firefox<br />{<br /><br /><br />for(var&nbsp;i=0;i&lt;thistable.rows.length;i++)<br />{<br />var&nbsp;rowObj&nbsp;=&nbsp;thistable.rows[i];<br />for(&nbsp;var&nbsp;j=0;j&lt;rowObj.cells.length;j++)<br />{<br />var&nbsp;cellObj&nbsp;=&nbsp;rowObj.cells[j];<br />cellObj.setAttribute("onmousedown","OnClickChangeTdBackColor(this)");<br />}<br />//alert(rowObj.cells[0].tagName);<br />}<br />}<br />这是来之&nbsp;http://blog.joycode.com/lostinet/archive/2005/02/27/44999.aspx<br /><br />在FireFox下编写事件处理函数是很麻烦的事.<br />因为FireFox并没有&nbsp;window.event&nbsp;.&nbsp;如果要得到&nbsp;event&nbsp;对象,就必须要声明时间处理函数的第一个参数为event.<br /><br />所以为了兼容IE与FireFox,一般的事件处理方法为:<br />btn.onclick=handle_btn_click;<br />function&nbsp;handle_btn_click(evt)<br />{<br />if(evt==null)evt=window.event;//IE<br />//处理事件.<br />}<br />对于简单的程序,这不算麻烦.<br /><br />但对于一些复杂的程序,某写函数根本就不是直接与事件挂钩的.如果要把event传进该参数,那么所有的方法都要把event传来传去..这简直就是噩梦.<br /><br />下面介绍一个解决这个麻烦事的方法,与原理.<br /><br />JScript中，函数的调用是有一个&nbsp;func.caller&nbsp;这个属性的.<br />例如&nbsp;<br />function&nbsp;A()<br />{<br />B();<br />}<br />function&nbsp;B()<br />{<br />alert(B.caller);<br />}<br />如果B被A调用,那么B.caller就是A<br /><br />另外,函数有一个arguments属性.&nbsp;这个属性可以遍历函数当前执行的参数:<br />function&nbsp;myalert()<br />{<br />var&nbsp;arr=[];<br />for(var&nbsp;i=0;i<br />arr[i]=myalert.arguments[i];<br />alert(arr.join("-"));<br />}<br />alert("hello","world",1,2,3)<br />就能显示&nbsp;hello-world-1-2-3<br />(arguments的个数与调用方有关,而与函数的参数定义没有任何关系)<br /><br />根据这两个属性,我们可以得到第一个函数的event对象:<br />btn.onclick=handle_click;<br />function&nbsp;handle_click()<br />{<br />showcontent();<br />}<br />function&nbsp;showcontent()<br />{<br />var&nbsp;evt=SearchEvent();<br />if(evt&&evt.shiftKey)//如果是基于事件的调用,并且shift被按下<br />window.open(global_helpurl);<br />else<br />location.href=global_helpurl;<br />}<br />function&nbsp;SearchEvent()<br />{<br />func=SearchEvent.caller;<br />while(func!=null)<br />{<br />var&nbsp;arg0=func.arguments[0];<br />if(arg0)<br />{<br />if(arg0.constructor==Event)&nbsp;//&nbsp;如果就是event&nbsp;对象<br />return&nbsp;arg0;<br />}<br />func=func.caller;<br />}<br />return&nbsp;null;<br />}<br />这个例子使用了SearchEvent来搜索event对象.&nbsp;其中&nbsp;'Event'&nbsp;是&nbsp;FireFox&nbsp;的&nbsp;event.constructor&nbsp;.<br />在该例子运行时,<br />SearchEvent.caller就是showcontent,但是showcontent.arguments[0]是空.所以&nbsp;func=func.caller&nbsp;时,func变为handle_click&nbsp;.<br />handle_click&nbsp;被&nbsp;FireFox&nbsp;调用,&nbsp;虽然没有定义参数,但是被调用时,第一个参数就是event,所以handle_click.arguments[0]就是event&nbsp;!<br /><br />针对上面的知识,我们可以结合&nbsp;prototype.__defineGetter__&nbsp;来实现&nbsp;window.event&nbsp;在&nbsp;FireFox&nbsp;下的实现:<br /><br />下面给出一个简单的代码..&nbsp;有兴趣的可以补充<br /><br />if(window.addEventListener)<br />{<br />FixPrototypeForGecko();<br />}<br />function&nbsp;FixPrototypeForGecko()<br />{<br />HTMLElement.prototype.__defineGetter__("runtimeStyle",element_prototype_get_runtimeStyle);<br />window.constructor.prototype.__defineGetter__("event",window_prototype_get_event);<br />Event.prototype.__defineGetter__("srcElement",event_prototype_get_srcElement);<br />}<br />function&nbsp;element_prototype_get_runtimeStyle()<br />{<br />//return&nbsp;style&nbsp;instead...<br />return&nbsp;this.style;<br />}<br />function&nbsp;window_prototype_get_event()<br />{<br />return&nbsp;SearchEvent();<br />}<br />function&nbsp;event_prototype_get_srcElement()<br />{<br />return&nbsp;this.target;<br />}<br /><br />function&nbsp;SearchEvent()<br />{<br />//IE<br />if(document.all)<br />return&nbsp;window.event;<br /><br />func=SearchEvent.caller;<br />while(func!=null)<br />{<br />var&nbsp;arg0=func.arguments[0];<br />if(arg0)<br />{<br />if(arg0.constructor==Event)<br />return&nbsp;arg0;<br />}<br />func=func.caller;<br />}<br />return&nbsp;null;<br />}<br />&lt;/body&gt;&lt;/html&gt;<br /><br /><br /><br />firefox与IE(parentElement)的父元素的区别<br /><br />因为firefox与IE都支持DOM,因此使用obj.parentNode是不错选择.<br /><br />IE<br />obj.parentElement<br />firefox<br />obj.parentNode<br /><br /><br />asp.net中UniqueID和clientID的区别<br /><br />要使用document.getElementById&nbsp;方法，则使用控件的时候要这样来作<br /><br />"javascript:OnSelectSubCatalog(\""+subCatalog_drp.ClientID+"\","+catalogIDX+","+catID.ToString()+")";<br /><br /><br />调用Select元素的区别<br /><br />移出一个选择项<br /><br /><br />--------------------------------------------------------------------------------<br /><br /><br />IE&nbsp;：sel.options.remove(sel.selectedIndex);&nbsp;<br />firefox&nbsp;：<br /><br />增加选择项：<br /><br /><br />--------------------------------------------------------------------------------<br /><br />IE:&nbsp;subCatalog.add(new&nbsp;Option(text,value));<br /><br />firefox:&nbsp;<br />var&nbsp;opnObj&nbsp;=&nbsp;document.createElement("OPTION");&nbsp;<br />//opnObj.id&nbsp;=&nbsp;optionID;<br />opnObj.value&nbsp;=&nbsp;value;&nbsp;<br />opnObj.text&nbsp;=&nbsp;text;&nbsp;<br />subCatalog.appendChild(opnObj);<br />&nbsp;<br /><br /><br /><br /><br />]]>
      </summary>
      <category term="" label="JavaScript/DOM" scheme="http://dev.mo.cn/cat_diary_9.html" />
   </entry>
   <entry>
      <title type="html">'操作必须使用一个可更新的查询'解决方法</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_81.html" />
      <updated>2008-7-7 23:01:41</updated>
      <published>2008-7-7 23:01:41</published>
      <id>http://dev.mo.cn/article_81.html</id>
      <summary type="html">
      <![CDATA[当我们用ASP执行修改数据库记录操作时常会遇到以下问题<br /><br />第一种情况:<br /><br /><span style="color:red;">错误类型：<br />Microsoft&nbsp;OLE&nbsp;DB&nbsp;Provider&nbsp;for&nbsp;ODBC&nbsp;Drivers&nbsp;(0x80004005)<br />[Microsoft][ODBC&nbsp;Microsoft&nbsp;Access&nbsp;Driver]&nbsp;操作必须使用一个可更新的查询。</span><br /><br />第二种情况:<br /><br /><span style="color:Red;">stream错误,<span style="color:Green;">无法写入文件</span></span><br /><br />第三种情况<br /><br /><span style="color:#FF0000;">rs.open&nbsp;sql,conn,1,1&nbsp;&nbsp;时出现"参数类型不正确"错误</span><br /><br />究其原因,是你没有对文件夹的写权限!下面是解决方法<br /><br />1.win2000中<br /><span style="color:Red;">在WIN2000中文件夹属性有个安全选项卡，右键点选数据库文件所在文件夹的属性选项并选择安全选项卡<br /><br />然后添加用户“Internet来宾帐号”（IUSR_计算机名）<br /><br />并为该用户的修改权上打上勾</span><br /><br />2.winxp中<br />&nbsp;&nbsp;<span style="color:Red;">a.若右键查看文件夹属性有"安全"选项卡，解决方法：选中"安全"选项卡---&gt;点"添加"---&gt;添加用户everyone---&gt;确定，返&nbsp;回"安全"选项卡---&gt;给刚才添加的everyone用户"修改"权限,或者直接把完全控制选中；<br /><br />&nbsp;&nbsp;b.若右键查看文件夹属性没有"安全"选项卡，解决方法：我的电脑---&gt;工具（菜单栏）---&gt;文件夹选项---&gt;查看---&gt;高级设置里面的"使用简单文件共享(推荐)"勾去---&gt;确定---&gt;返回步骤a操作<br /><br />&nbsp;&nbsp;c.若还没有发现"安全"选项卡，说明你的分区格式为fat，fat格式不支持权限，你可以设置下文件夹共享看看，fat好像很少出项上面提到的问题.</span><br /><br />在使用stream以及filesystemobject对象的时候要注意权限问题，反正要写或读硬盘文件的代码都要注意下~~]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">fso遍历文件夹内所有文件和子文件夹</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_78.html" />
      <updated>2008-7-6 22:02:01</updated>
      <published>2008-7-6 22:02:01</published>
      <id>http://dev.mo.cn/article_78.html</id>
      <summary type="html">
      <![CDATA[&nbsp;&nbsp;&nbsp;fso遍历文件夹内所有文件和子文件夹，递归调用，并计算所有文件总大小（这里当然可以直接用folder的size方法直接或得），新手可以看看~<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;%<br />response.charset="gb2312"<br />response.buffer=true<br />dim&nbsp;fso,fod,fil,o_c,f_c,siz,i<br />o_c=0:f_c=0:siz=0<br />set&nbsp;fso=server.createobject("scripting.filesystemobject")<br />pathStr=request.querystring("path")<br />if&nbsp;trim(pathStr)=""&nbsp;then<br />&nbsp;response.write&nbsp;"未指定path参数!"<br />&nbsp;response.end<br />end&nbsp;if<br />temp_path=server.mappath(pathStr)&nbsp;'要遍历的文件夹路径<br />if&nbsp;not&nbsp;fso.folderexists(temp_path)&nbsp;then<br />&nbsp;response.write&nbsp;temp_path&"&nbsp;不存在!"<br />&nbsp;response.end<br />end&nbsp;if<br />response.write&nbsp;temp_path&"(&lt;font&nbsp;color=red&gt;1&lt;/font&gt;)&lt;br&nbsp;/&gt;"<br />call&nbsp;getcount(temp_path,1)<br />response.write&nbsp;temp_path&",共有文件夹&nbsp;"&o_c&"&nbsp;个,文件&nbsp;"&f_c&"&nbsp;个,总大小为"&formatnumber(siz/1024/1024,2)&"MB!&lt;br&nbsp;/&gt;"<br /><br />'函数名getcount<br />'作用：遍历文件夹内的所有文件和子文件<br />'参数:path--要遍历的文件夹，i--文件/文件夹级数<br />function&nbsp;getcount(path,i)<br />t_path=path<br />set&nbsp;fod=fso.getfolder(t_path)<br />o_c=o_c+fod.subfolders.count<br />f_c=f_c+fod.files.count<br />'遍历文件夹中的文件<br />if&nbsp;fod.files.count&gt;0&nbsp;then<br />&nbsp;&nbsp;&nbsp;for&nbsp;each&nbsp;fi&nbsp;in&nbsp;fod.files<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;j=1&nbsp;to&nbsp;i<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;"-&nbsp;-&nbsp;"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;t_path&"\"&fi.name&"(&lt;font&nbsp;color=red&gt;"&i+1&"&lt;/font&gt;)&lt;br&nbsp;/&gt;"&vbcrlf&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;siz=siz+fi.size<br />&nbsp;&nbsp;&nbsp;next<br />end&nbsp;if<br />'遍历文件夹中的子文件夹，并回归调用<br />if&nbsp;fod.subfolders.count&gt;0&nbsp;then<br />&nbsp;&nbsp;&nbsp;for&nbsp;each&nbsp;ff&nbsp;in&nbsp;fod.subfolders<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;j=1&nbsp;to&nbsp;i<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;"-&nbsp;-&nbsp;"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.write&nbsp;t_path&"\"&ff.name&"(&lt;font&nbsp;color=red&gt;"&i+1&"&lt;/font&gt;)&lt;br&nbsp;/&gt;"&vbcrlf<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.flush&nbsp;'输出<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c_fod=t_path&"\"&ff.name<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call&nbsp;getcount(c_fod,i+1)<br />&nbsp;&nbsp;&nbsp;next<br />end&nbsp;if<br />end&nbsp;function<br />%&gt;</div></div><br /><br /><br /><br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">我如何爱你</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_76.html" />
      <updated>2008-7-6 0:46:24</updated>
      <published>2008-7-6 0:46:24</published>
      <id>http://dev.mo.cn/article_76.html</id>
      <summary type="html">
      <![CDATA[我能抽象出整个世界．．．&nbsp;<br />但是我不能抽象出你．．．&nbsp;<br />因为你在我心中是那么的具体．．．&nbsp;<br />所以我的世界并不完整．．．&nbsp;<br />我可以重载甚至覆盖这个世界里的任何一种方法．．．&nbsp;<br />但是我却不能重载对你的思念．．．&nbsp;<br />也许命中注定了&nbsp;你在我的世界里永远的烙上了静态的属性．．．&nbsp;<br />而我不慎调用了爱你这个方法．．．&nbsp;<br />当我义无返顾的把自己作为参数传进这个方法时．．．&nbsp;<br />我才发现爱上你是一个死循环．．．&nbsp;<br />它不停的返回对你的思念压入我心里的堆栈．．．&nbsp;<br />在这无尽的黑夜中．．．&nbsp;<br />我的内存里已经再也装不下别人．．．&nbsp;<br />我不停的向系统申请空间．．．&nbsp;<br />但却捕获一个异常－－－我爱的人不爱我．．．&nbsp;<br />为了解决这个异常．．．&nbsp;<br />我愿意虚拟出最后一点内存．．．&nbsp;<br />把所有我能实现的方法地址压入堆栈．．．&nbsp;<br />并且在栈尾压入最后一个方法－－－将字符串＂我爱你，你爱我吗？＂传递给你．．．&nbsp;<br />如果返回值为真－－我将用尽一生去爱你．．．&nbsp;<br />否则－－我将释放掉所有系统资源．．<br /><br /><br /><br />]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">自己博客终于完工了</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_75.html" />
      <updated>2008-7-5 1:47:31</updated>
      <published>2008-7-5 1:47:31</published>
      <id>http://dev.mo.cn/article_75.html</id>
      <summary type="html">
      <![CDATA[自己的博客终于完工了~~~<br />日志管理系统...<br />文件上传下载管理系统...<br />访问统计...<br />博客数据管理...<br />留言系统....<br />下步改着手我的知寻网了~~<br />呵呵~有点累但挺充实的，因为自己喜欢这个工作~<br />说实话，自己还从来没接过项目，一个是学习的原因，另一个就是有点不自信<br />给自己加油。。。&nbsp;<br /><br />----------------------------^_^大家一起学习^_^------------------------------<br /><a href="http://dev.mo.cn" target="new">艾恩ASP学习博客&nbsp;http://dev.mo.cn</a><br />Email:zhanghuiguoanlige@126.com&nbsp;&nbsp;&nbsp;QQ:417833272<br />免费提供各种ASP学习资源，组件、源代码、学习手册、技术文章...<br /><a href="http://dev.mo.cn/xml/xml_diary.asp?flag=xml" target="new">订阅我的BLOG文章</a><br /><a href="http://dev.mo.cn/detial.asp?id=144" target="new">十个DIV+CSS网页布局模版</a><br /><a href="http://dev.mo.cn/detial.asp?id=143" target="new">An-Upload无组件上传类8.7.28</a><br /><a href="http://dev.mo.cn/detial.asp?id=139" target="new">动网论坛(DvBBS)验证码</a><br />XXWBAITDACGKTC]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">AspJpeg生成水印、随机码、缩略图</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_70.html" />
      <updated>2008-7-1 23:48:05</updated>
      <published>2008-7-1 23:48:05</published>
      <id>http://dev.mo.cn/article_70.html</id>
      <summary type="html">
      <![CDATA[1、AspJpeg是一款功能强大的基于Microsoft&nbsp;IIS环境的图片处理组件，网络上对其进行详细和深入介绍的中文文章并不多，即使有一般也只是牵涉到图片缩略图和图片水印，这与其为英文版本有着密切的关系。<br />AspJpeg可以使用很少的代码在您的ASP/ASP.Net应用程序上动态的创建高质量的缩略图象，支持的图象格式有：JPEG,&nbsp;GIF,&nbsp;BMP,&nbsp;TIFF,&nbsp;PNG。<br /><br />AspJpeg主要可以做到：生成缩略图片、生成水印图片、图片合并、图片切割、数据库支持、安全码技术<br /><br />2、AspJpeg功能摘要<br />支持JPEG,&nbsp;GIF,&nbsp;BMP,&nbsp;TIFF&nbsp;和&nbsp;PNG&nbsp;格式图片.&nbsp;输出格式始终为&nbsp;JPEG<br />源图片可以来源于磁盘、内存、或者记录集（数据库）<br />缩略图片可以保存到磁盘、内存、或者HTTP流<br />支持三种更改大小方式:&nbsp;nearest-neighbor,&nbsp;bilinear,&nbsp;and&nbsp;bicubic.&nbsp;<br />可以在图片之上添加图片或者文字.&nbsp;<br />支持画中画<br />支持复制，反转，旋转，锐化，灰度调节.<br />可以调节压缩比率，以得到最佳输出效果和大小.&nbsp;<br />从Jpeg图片中抽取EXIF&nbsp;和&nbsp;IPTC数据.<br />CMYK-RGB转换<br />Read/write&nbsp;access&nbsp;to&nbsp;individual&nbsp;pixels&nbsp;of&nbsp;an&nbsp;image.&nbsp;（从图象中对任意象素进行读/写存取。）<br /><br />3、AspJpeg系统需求<br />Windows&nbsp;95/98/NT/2000/XP/2003,&nbsp;and&nbsp;<br />IIS&nbsp;4.0+&nbsp;and&nbsp;ASP/ASP.NET,&nbsp;or<br />Visual&nbsp;Basic&nbsp;5.0+,&nbsp;or<br />Visual&nbsp;C++&nbsp;5.0+,&nbsp;or<br />any&nbsp;development&nbsp;environment&nbsp;supporting&nbsp;COM.&nbsp;<br /><br />4、AspJpeg安装<br />全新安装：<br />在AspJpeg安装过程中输入序列号即可，如果安装位置磁盘格式为NTFS，则可能出现访问权限问题，需手工设置安装目录对Everyone有访问权限。<br /><br />更新安装：<br />如果之前有装过其它版本的AspJpeg组件，则需要先卸载原来的组件，再进行新版本的安装。<br />先停止IIS<br />Net&nbsp;Stop&nbsp;iisadmin&nbsp;/y<br />卸载旧版组件<br />regsvr32&nbsp;/u&nbsp;Path/aspjpeg.dl（Path为安装路径）<br />重启IIS<br />Net&nbsp;Start&nbsp;w3svc<br /><br />然后再进行全新安装或复制AspJpeg.dll文件到安装目录进行手工安装：<br />regsvr32&nbsp;Path/aspjpeg.dll（Path为安装路径）<br /><br />如果在正常安装过程中没有输入序列号或手工安装则必须在注册表中加入以下项，为方便起见您可以直接将以下代码保存为.reg文档并导入注册表：<br />Windows&nbsp;Registry&nbsp;Editor&nbsp;Version&nbsp;5.00<br /><br />[HKEY_LOCAL_MACHINE\SOFTWARE\Persits&nbsp;Software\AspUpload3\RegKey]<br />@="21764-40765-60456"<br />5、如何创建一个AspJpeg实例？<br />Set&nbsp;Jpeg&nbsp;=&nbsp;Server.CreateObject("Persits.Jpeg")<br /><br />6、如何查看到期时间（是否注册成功）？<br />Set&nbsp;Jpeg&nbsp;=&nbsp;Server.CreateObject("Persits.Jpeg")<br />Response.Write&nbsp;Jpeg.Expires<br />注册成功则到期时间为：9999-9-9<br />否则为：安装日期加1个月期限<br /><br />7、如何用AspJpeg组件生成图片缩略图？<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;%&nbsp;<br />Set&nbsp;Jpeg&nbsp;=&nbsp;Server.CreateObject("Persits.Jpeg")&nbsp;'创建实例<br />Path&nbsp;=&nbsp;Server.MapPath("../images/apple.jpg")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'处理图片路径<br />Jpeg.Open&nbsp;Path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'打开图片<br />'调整宽度和高度为原来的50%<br />Jpeg.Width&nbsp;=&nbsp;Jpeg.OriginalWidth&nbsp;/&nbsp;2<br />Jpeg.Height&nbsp;=&nbsp;Jpeg.OriginalHeight&nbsp;/&nbsp;2<br />Jpeg.Save&nbsp;Server.MapPath("apple_small.jpg")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'保存图片到磁盘<br />Jpeg.Close:Set&nbsp;Jpeg&nbsp;=&nbsp;Nothing<br />%&gt;&nbsp;<br /></div></div><br />8、如何用AspJpeg组件生成图片水印？<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;%&nbsp;<br />Set&nbsp;Jpeg&nbsp;=&nbsp;Server.CreateObject("Persits.Jpeg")&nbsp;<br />Jpeg.Open&nbsp;Server.MapPath("images/dodge_viper.jpg")&nbsp;<br />'开始写文字&nbsp;<br />Jpeg.Canvas.Font.Color&nbsp;=&nbsp;&000000&nbsp;''&nbsp;red&nbsp;颜色&nbsp;<br />Jpeg.Canvas.Font.Family&nbsp;=&nbsp;"Courier&nbsp;New"&nbsp;'字体&nbsp;<br />Jpeg.Canvas.Font.Bold&nbsp;=&nbsp;True&nbsp;'是否加粗&nbsp;<br />Jpeg.Canvas.Print&nbsp;10,&nbsp;10,&nbsp;"Copyright&nbsp;(c)&nbsp;XYZ,&nbsp;Inc."&nbsp;<br />'打印坐标x&nbsp;打印坐标y&nbsp;需要打印的字符&nbsp;<br />'以下是对图片进行边框处理&nbsp;<br />Jpeg.Canvas.Pen.Color&nbsp;=&nbsp;&H000000&nbsp;''&nbsp;black&nbsp;颜色&nbsp;<br />Jpeg.Canvas.Pen.Width&nbsp;=&nbsp;2&nbsp;'画笔宽度&nbsp;<br />Jpeg.Canvas.Brush.Solid&nbsp;=&nbsp;False&nbsp;'是否加粗处理&nbsp;<br />Jpeg.Canvas.Bar&nbsp;1,&nbsp;1,&nbsp;Jpeg.Width,&nbsp;Jpeg.Height&nbsp;<br />'起始X坐标&nbsp;起始Y坐标&nbsp;输入长度&nbsp;输入高度&nbsp;<br />Jpeg.Save&nbsp;Server.MapPath("images/dodge_viper_framed.jpg")&nbsp;'保存&nbsp;<br />%&gt;<br /></div></div><br />9、如何用AspJpeg组件进行图片合并？<br />AspJpeg&nbsp;1.3+&nbsp;enables&nbsp;you&nbsp;to&nbsp;place&nbsp;images&nbsp;on&nbsp;top&nbsp;of&nbsp;each&nbsp;other&nbsp;via&nbsp;the&nbsp;method&nbsp;DrawImage.&nbsp;To&nbsp;use&nbsp;this&nbsp;method,&nbsp;you&nbsp;must&nbsp;create&nbsp;two&nbsp;instances&nbsp;of&nbsp;the&nbsp;AspJpeg&nbsp;objects&nbsp;and&nbsp;populate&nbsp;both&nbsp;of&nbsp;them&nbsp;with&nbsp;images&nbsp;via&nbsp;calls&nbsp;to&nbsp;Open&nbsp;(or&nbsp;OpenBinary).&nbsp;When&nbsp;calling&nbsp;Canvas.DrawImage,&nbsp;the&nbsp;2nd&nbsp;instance&nbsp;of&nbsp;AspJpeg&nbsp;is&nbsp;passed&nbsp;as&nbsp;an&nbsp;argument&nbsp;to&nbsp;this&nbsp;method,&nbsp;along&nbsp;with&nbsp;the&nbsp;X&nbsp;and&nbsp;Y&nbsp;offsets&nbsp;(in&nbsp;pixels):&nbsp;<br />使用该方法，您必需创建两个AspJpeg实例对象<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;%<br />Set&nbsp;Jpeg1&nbsp;=&nbsp;Server.CreateObject("Persits.Jpeg")<br />Set&nbsp;Jpeg2&nbsp;=&nbsp;Server.CreateObject("Persits.Jpeg")<br />Jpeg1.Open&nbsp;Server.MapPath("t.jpg")<br />Jpeg2.Open&nbsp;Server.MapPath("t1.jpg")<br />Jpeg1.DrawImage&nbsp;10,&nbsp;10,&nbsp;Jpeg2&nbsp;'&nbsp;optional&nbsp;arguments&nbsp;omitted<br />jpeg1.save&nbsp;Server.mappath("tt.jpg")<br />%&gt;<br /></div></div><br />10、如何用AspJpeg组件进行图片切割？<br />AspJpeg&nbsp;1.1+&nbsp;is&nbsp;also&nbsp;capable&nbsp;of&nbsp;cutting&nbsp;off&nbsp;edges&nbsp;from,&nbsp;or&nbsp;cropping,&nbsp;the&nbsp;resultant&nbsp;thumbnails&nbsp;via&nbsp;the&nbsp;method&nbsp;Crop(x0,&nbsp;y0,&nbsp;x1,&nbsp;y1).&nbsp;The&nbsp;size&nbsp;of&nbsp;the&nbsp;cropped&nbsp;image&nbsp;is&nbsp;specified&nbsp;by&nbsp;the&nbsp;coordinates&nbsp;of&nbsp;the&nbsp;upper-left&nbsp;and&nbsp;lower-right&nbsp;corners&nbsp;within&nbsp;the&nbsp;resultant&nbsp;thumbnail,&nbsp;not&nbsp;the&nbsp;original&nbsp;large&nbsp;image.&nbsp;<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;%<br />Set&nbsp;Jpeg&nbsp;=&nbsp;Server.CreateObject("Persits.Jpeg")<br />Jpeg.Open&nbsp;Server.MapPath("t.jpg")<br />jpeg.Crop&nbsp;20,&nbsp;30,&nbsp;jpeg.Width&nbsp;-&nbsp;20,&nbsp;jpeg.Height&nbsp;-&nbsp;10&nbsp;<br />jpeg.save&nbsp;Server.mappath("tt.jpg")<br />Response.write("&lt;img&nbsp;src=tt.jpg&gt;")<br />%&gt;<br /></div></div><br />11、如何用AspJpeg组件创建安全码？<br />创建安全码原理上和创建水印差不多。<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;%<br />function&nbsp;make_randomize(max_len,w_n)&nbsp;'max_len&nbsp;生成长度，w_n：0&nbsp;可能包含字母，1：只为数字&nbsp;<br />randomize&nbsp;<br />for&nbsp;intcounter=1&nbsp;to&nbsp;max_len&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;whatnext=int((1-0+1)*rnd+w_n)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;whatnext=0&nbsp;then&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;upper=122&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lower=97&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;upper=57&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lower=48&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;if&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strnewpass=strnewpass&nbsp;&&nbsp;chr(int((upper-lower+1)*rnd)+lower)&nbsp;<br />next&nbsp;<br />make_randomize=strnewpass&nbsp;<br />end&nbsp;function&nbsp;<br /><br />'生成安全码的图片。<br />random_num=make_randomize(4,1)&nbsp;''生成4位数字的安全码&nbsp;<br />session("random_num")=random_num&nbsp;'为么调用session，没有session的安全码是完全没有意义的。呵呵&nbsp;.<br /><br />Set&nbsp;Jpeg&nbsp;=&nbsp;Server.CreateObject("Persits.Jpeg")&nbsp;'调用组件&nbsp;<br />Jpeg.Open&nbsp;Server.MapPath("t.jpg")&nbsp;'打开准备的图片&nbsp;<br />Jpeg.Canvas.Font.Color&nbsp;=&nbsp;&HFFFFFF&nbsp;<br />Jpeg.Canvas.Font.Family&nbsp;=&nbsp;"Arial&nbsp;Black"&nbsp;<br />Jpeg.Canvas.Font.Bold&nbsp;=&nbsp;false&nbsp;<br />Jpeg.Canvas.PrintText&nbsp;0,&nbsp;-2,&nbsp;random_num&nbsp;<br />jpeg.save&nbsp;Server.MapPath("tt.jpg")&nbsp;'保存&nbsp;<br />%&gt;&nbsp;<br />&lt;img&nbsp;src="tt.jpg"&nbsp;border="0"&nbsp;align="absmiddle"&gt;&nbsp;<br /></div></div><br />12、如何让AspJpeg组件支援数据库？<br />图片存进数据库只能以二进制数据保存，这里即利用AspJpeg的Binary方法，下面以两个AspJpeg用户手册上的代码为例，具体请参考AspJpeg用户手册：<br />Opening&nbsp;Images&nbsp;from&nbsp;Memory&nbsp;<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;%&nbsp;'&nbsp;Using&nbsp;ADO,&nbsp;open&nbsp;database&nbsp;with&nbsp;an&nbsp;image&nbsp;blob<br />strConnect&nbsp;=&nbsp;"DRIVER={Microsoft&nbsp;Access&nbsp;Driver&nbsp;(*.mdb)};DBQ="&nbsp;&&nbsp;Server.MapPath("../db/aspjpeg.mdb")<br />Set&nbsp;rs&nbsp;=&nbsp;Server.CreateObject("adodb.recordset")<br />SQL&nbsp;=&nbsp;"select&nbsp;image_blob&nbsp;from&nbsp;images2&nbsp;where&nbsp;id&nbsp;=&nbsp;"&nbsp;&&nbsp;Request("id")<br />rs.Open&nbsp;SQL,&nbsp;strConnect,&nbsp;1,&nbsp;3<br />Set&nbsp;Jpeg&nbsp;=&nbsp;Server.CreateObject("Persits.Jpeg")<br />'&nbsp;Open&nbsp;image&nbsp;directly&nbsp;from&nbsp;recordset<br />Jpeg.OpenBinary&nbsp;rs("image_blob").Value<br />'&nbsp;Resize<br />jpeg.Width&nbsp;=&nbsp;Request("Width")<br />'&nbsp;Set&nbsp;new&nbsp;height,&nbsp;preserve&nbsp;original&nbsp;aspect&nbsp;ratio<br />jpeg.Height&nbsp;=&nbsp;jpeg.OriginalHeight&nbsp;*&nbsp;jpeg.Width&nbsp;/&nbsp;jpeg.OriginalWidth<br />Jpeg.SendBinary<br />rs.Close<br />%&gt;&nbsp;<br />Output&nbsp;to&nbsp;Memory&nbsp;&nbsp;<br />&lt;%<br />...<br />Set&nbsp;rs&nbsp;=&nbsp;Server.CreateObject("adodb.recordset")<br />rs.Open&nbsp;"images",&nbsp;strConnect,&nbsp;1,&nbsp;3<br />rs.AddNew<br />rs("image_blob").Value&nbsp;=&nbsp;Jpeg.Binary<br />rs.Update<br />...<br />%&gt;<br /></div></div><br /><br /><br /><br /><br /><br />]]>
      </summary>
      <category term="" label="IIS外部组件" scheme="http://dev.mo.cn/cat_diary_4.html" />
   </entry>
   <entry>
      <title type="html">Persits.Jpeg(ASPJpeg)组件的使用说明</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_68.html" />
      <updated>2008-7-1 23:45:29</updated>
      <published>2008-7-1 23:45:29</published>
      <id>http://dev.mo.cn/article_68.html</id>
      <summary type="html">
      <![CDATA[一.缩略图<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;%<br />Dim&nbsp;tmStart,&nbsp;tmEnd,&nbsp;demo<br />tmStart&nbsp;=&nbsp;timer()<br />%&gt;<br />&lt;!DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN"&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;meta&nbsp;http-equiv="Content-Type"&nbsp;content="text/html;&nbsp;charset=gb2312"&gt;<br />&lt;title&gt;JSP家测试Persits.Jpeg组件&lt;/title&gt;<br />&lt;/head&gt;<br /><br />&lt;body&gt;<br />&lt;%<br />Dim&nbsp;Jpeg,Path<br />Set&nbsp;Jpeg&nbsp;=&nbsp;Server.CreateObject("Persits.Jpeg")<br />Path&nbsp;=&nbsp;Server.MapPath("images/sogou.gif")<br />Jpeg.Open&nbsp;Path<br /><br />'&nbsp;设置缩略图大小（这里比例设定为50%）<br />Jpeg.Width&nbsp;=&nbsp;Jpeg.OriginalWidth&nbsp;/&nbsp;2<br />Jpeg.Height&nbsp;=&nbsp;Jpeg.OriginalHeight&nbsp;/&nbsp;2<br /><br />'&nbsp;保存缩略图到指定文件夹下<br />Jpeg.Save&nbsp;Server.MapPath("images/sogou_small.jpg")<br /><br />Set&nbsp;Jpeg&nbsp;=&nbsp;Nothing<br />%&gt;<br /><br />&lt;IMG&nbsp;SRC="images/sogou.gif"&gt;<br />&lt;br&gt;缩略前的图片&lt;br&gt;<br />&lt;IMG&nbsp;SRC="images/sogou_small.jpg"&gt;<br />&lt;br&gt;<br />缩略后的图片<br />&lt;%<br />tmEnd&nbsp;=&nbsp;timer()<br />%&gt;<br />页面执行时间：&lt;font&nbsp;color=blue&gt;&nbsp;&lt;%=CStr(FormatNumber((tmEnd&nbsp;-&nbsp;tmStart),3)*1000)%&gt;&nbsp;&lt;/font&gt;&nbsp;毫秒<br /><br />&lt;/body&gt;<br />&lt;/html&gt;<br /></div></div><br /><br />二、图片水印<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;%<br />Dim&nbsp;tmStart,&nbsp;tmEnd,&nbsp;demo<br />tmStart&nbsp;=&nbsp;timer()<br />%&gt;<br />&lt;!DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN"&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;meta&nbsp;http-equiv="Content-Type"&nbsp;content="text/html;&nbsp;charset=gb2312"&gt;<br />&lt;title&gt;图片水印&lt;/title&gt;<br />&lt;/head&gt;<br /><br />&lt;body&gt;<br />&lt;%<br />Dim&nbsp;Jpeg,Path<br />Set&nbsp;Jpeg&nbsp;=&nbsp;Server.CreateObject("Persits.Jpeg")<br />Path&nbsp;=&nbsp;Server.MapPath("images/google.jpg")<br />Jpeg.Open&nbsp;Path<br /><br />'&nbsp;添加文字水印<br />Jpeg.Canvas.Font.Color&nbsp;=&nbsp;&HFF0000&nbsp;'颜色<br />Jpeg.Canvas.Font.Family&nbsp;=&nbsp;"arial"&nbsp;'字体<br />Jpeg.Canvas.Font.Bold&nbsp;=&nbsp;True&nbsp;'是否加粗<br />Jpeg.Canvas.Print&nbsp;10,&nbsp;10,&nbsp;"Copyright&nbsp;?&nbsp;JspJia.Com"&nbsp;'打印坐标x,打印坐标y,需要打印的字符<br /><br />'图片片框处理<br />Jpeg.Canvas.Pen.Color&nbsp;=&nbsp;&H000000&nbsp;'颜色&nbsp;<br />Jpeg.Canvas.Pen.Width&nbsp;=&nbsp;2&nbsp;'画笔宽度&nbsp;<br />Jpeg.Canvas.Brush.Solid&nbsp;=&nbsp;False&nbsp;'是否加粗处理&nbsp;<br />Jpeg.Canvas.Bar&nbsp;1,&nbsp;1,&nbsp;Jpeg.Width,&nbsp;Jpeg.Height&nbsp;'起始X坐标&nbsp;起始Y坐标&nbsp;输入长度&nbsp;输入高度<br /><br />Jpeg.Save&nbsp;Server.MapPath("images/googlewater.jpg")<br /><br />Set&nbsp;Jpeg&nbsp;=&nbsp;Nothing<br />%&gt;<br /><br />&lt;IMG&nbsp;SRC="images/google.jpg"&gt;&lt;br&gt;水印前&lt;br&gt;<br />&lt;IMG&nbsp;SRC="images/googlewater.jpg"&gt;&lt;br&gt;水印后&lt;br&gt;<br />&lt;%<br />tmEnd&nbsp;=&nbsp;timer()<br />%&gt;<br />页面执行时间：&lt;font&nbsp;color=blue&gt;&nbsp;&lt;%=CStr(FormatNumber((tmEnd&nbsp;-&nbsp;tmStart),3)*1000)%&gt;&nbsp;&lt;/font&gt;&nbsp;毫<br /><br />秒<br /><br />&lt;/body&gt;<br />&lt;/html&gt;<br /></div></div><br /><br />三、安全码<br /><br />安全玛的道理和加水印差不多&nbsp;<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;%&nbsp;<br />生成安全码的函数&nbsp;<br />function&nbsp;make_randomize(max_len,w_n)&nbsp;max_len&nbsp;生成长度，w_n：0&nbsp;可能包含字母，1：只为数字&nbsp;<br />randomize&nbsp;<br />for&nbsp;intcounter=1&nbsp;to&nbsp;max_len&nbsp;<br />whatnext=int((1-0+1)*rnd+w_n)&nbsp;<br />if&nbsp;whatnext=0&nbsp;then&nbsp;<br />upper=122&nbsp;<br />lower=97&nbsp;<br />else&nbsp;<br />upper=57&nbsp;<br />lower=48&nbsp;<br />end&nbsp;if&nbsp;<br />strnewpass=strnewpass&nbsp;&&nbsp;chr(int((upper-lower+1)*rnd)+lower)&nbsp;<br />next&nbsp;<br />make_randomize=strnewpass&nbsp;<br />end&nbsp;function&nbsp;<br />%&gt;<br />生成安全码的图片。当然你要预先准备一张背景图哦<br /><br />&lt;%random_num=make_randomize(4,1)&nbsp;生成4位数字的安全码&nbsp;<br />session("random_num")=random_num&nbsp;为什么调用session，没有session的安全码是完全没有意义的。<br /><br />Set&nbsp;Jpeg&nbsp;=&nbsp;Server.CreateObject("Persits.Jpeg")&nbsp;调用组件&nbsp;<br />Jpeg.Open&nbsp;Server.MapPath("infos/random_pic/random_index.gif")&nbsp;打开准备的图片&nbsp;<br />Jpeg.Canvas.Font.Color&nbsp;=&nbsp;&H006699<br /><br />Jpeg.Canvas.Font.Family&nbsp;=&nbsp;"Arial&nbsp;Black"&nbsp;<br />Jpeg.Canvas.Font.Bold&nbsp;=&nbsp;false&nbsp;<br />Jpeg.Canvas.PrintText&nbsp;0,&nbsp;-2,&nbsp;random_num&nbsp;<br />jpeg.save&nbsp;Server.MapPath("infos/random_pic/random_index.bmp")&nbsp;保存&nbsp;<br />%&gt;&nbsp;&lt;img&nbsp;src="/infos/random_pic/random_index.bmp"&nbsp;border="0"&nbsp;align="absmiddle"&gt;<br /></div></div><br /><br />四、图片切割<br /><br />一直以来，对aspjpeg不了解的人以为是无法用它来进行切割的。&nbsp;<br />其实有这样的一个方法的&nbsp;<br />crop&nbsp;x1,y1,x2,y2&nbsp;<br />切割长方型左上角x坐标，y坐标&nbsp;右下角x坐标&nbsp;y坐标&nbsp;<br />下面我就做一个演示哈&nbsp;<br />Set&nbsp;Jpeg&nbsp;=&nbsp;Server.CreateObject("Persits.Jpeg")&nbsp;<br />jpeg.open&nbsp;server.MapPath("/pic/1.gif")&nbsp;<br />jpeg.width=70&nbsp;<br />Jpeg.Height&nbsp;=&nbsp;Jpeg.OriginalHeight*70&nbsp;/&nbsp;jpeg.Originawidth&nbsp;<br />jpeg.crop&nbsp;0,0,70,52&nbsp;开始切割其实是把超过52象素的下部分去掉&nbsp;<br />jpeg.save&nbsp;server.MapPath("/temp_pic/small_1.gif")&nbsp;保存<br /><br /><br />五、图片合并<br /><br />我们这里是要把logo图片加到dodge_viper.jpg图片上去&nbsp;<br />其实，图片合并的方法也可以用来动态打水印哦&nbsp;<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />Set&nbsp;Photo&nbsp;=&nbsp;Server.CreateObject("Persits.Jpeg")&nbsp;<br />PhotoPath&nbsp;=&nbsp;Server.MapPath("images")&nbsp;&&nbsp;"\dodge_viper.jpg"&nbsp;<br />Photo.Open&nbsp;PhotoPath&nbsp;<br />Set&nbsp;Logo&nbsp;=&nbsp;Server.CreateObject("Persits.Jpeg")&nbsp;<br />LogoPath&nbsp;=&nbsp;Server.MapPath("images")&nbsp;&&nbsp;"\clock.jpg"&nbsp;<br />Logo.Open&nbsp;LogoPath<br /><br />Logo.Width&nbsp;=&nbsp;70&nbsp;<br />Logo.Height&nbsp;=&nbsp;Logo.Width&nbsp;*&nbsp;Logo.OriginalHeight&nbsp;/&nbsp;Logo.OriginalWidth<br /><br />Photo.DrawImage&nbsp;0,&nbsp;0,&nbsp;Logo<br />Photo.SendBinary<br /></div></div><br />&nbsp;这里用了sendBinary的输出方法。当然，你也可以先保存更改后的dodge_viper.jpg，再输入也可以。我个人不大喜欢用sendBinary方法，在网速慢的时候容易出错。在速度方面也不怎样。<br />七、更多方法介绍<br /><br />Canvas.Line(Left,&nbsp;Top,&nbsp;Right,&nbsp;Bottom)&nbsp;<br />画一条直线&nbsp;<br />Canvas.Ellipse(Left,&nbsp;Top,&nbsp;Right,&nbsp;Bottom)&nbsp;<br />画出一个椭圆&nbsp;<br />Canvas.Circle(X,&nbsp;Y,&nbsp;Radius)&nbsp;<br />画出一个圆&nbsp;<br />Canvas.Bar(Left,&nbsp;Top,&nbsp;Right,&nbsp;Bottom)&nbsp;<br />画出一个长方形，上面有代码介绍了&nbsp;<br />Canvas.Font.ShadowColor&nbsp;<br />文字阴影颜色&nbsp;<br />Canvas.Font.ShadowXOffset&nbsp;As&nbsp;Long&nbsp;<br />阴影X坐标设定&nbsp;<br />Canvas.Font.ShadowYOffset&nbsp;As&nbsp;Long&nbsp;<br />Y坐标设定&nbsp;<br />Canvas.Font.BkMode&nbsp;As&nbsp;String&nbsp;<br />文字背景&nbsp;<br /><br /><br /><br />]]>
      </summary>
      <category term="" label="IIS外部组件" scheme="http://dev.mo.cn/cat_diary_4.html" />
   </entry>
   <entry>
      <title type="html">MD5加密(VBScript代码)</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_67.html" />
      <updated>2008-6-29 0:57:15</updated>
      <published>2008-6-29 0:57:15</published>
      <id>http://dev.mo.cn/article_67.html</id>
      <summary type="html">
      <![CDATA[将此代码包含进需要加密的asp文件，在需要的地方调用&nbsp;MD5(你要加密的字串)<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;%<br />Private&nbsp;Const&nbsp;BITS_TO_A_BYTE&nbsp;=&nbsp;8<br />Private&nbsp;Const&nbsp;BYTES_TO_A_WORD&nbsp;=&nbsp;4<br />Private&nbsp;Const&nbsp;BITS_TO_A_WORD&nbsp;=&nbsp;32<br /><br />Private&nbsp;m_lOnBits(30)<br />Private&nbsp;m_l2Power(30)<br />&nbsp;<br />Public&nbsp;Function&nbsp;MD5(sMessage)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(0)&nbsp;=&nbsp;CLng(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(1)&nbsp;=&nbsp;CLng(3)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(2)&nbsp;=&nbsp;CLng(7)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(3)&nbsp;=&nbsp;CLng(15)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(4)&nbsp;=&nbsp;CLng(31)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(5)&nbsp;=&nbsp;CLng(63)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(6)&nbsp;=&nbsp;CLng(127)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(7)&nbsp;=&nbsp;CLng(255)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(8)&nbsp;=&nbsp;CLng(511)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(9)&nbsp;=&nbsp;CLng(1023)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(10)&nbsp;=&nbsp;CLng(2047)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(11)&nbsp;=&nbsp;CLng(4095)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(12)&nbsp;=&nbsp;CLng(8191)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(13)&nbsp;=&nbsp;CLng(16383)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(14)&nbsp;=&nbsp;CLng(32767)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(15)&nbsp;=&nbsp;CLng(65535)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(16)&nbsp;=&nbsp;CLng(131071)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(17)&nbsp;=&nbsp;CLng(262143)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(18)&nbsp;=&nbsp;CLng(524287)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(19)&nbsp;=&nbsp;CLng(1048575)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(20)&nbsp;=&nbsp;CLng(2097151)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(21)&nbsp;=&nbsp;CLng(4194303)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(22)&nbsp;=&nbsp;CLng(8388607)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(23)&nbsp;=&nbsp;CLng(16777215)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(24)&nbsp;=&nbsp;CLng(33554431)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(25)&nbsp;=&nbsp;CLng(67108863)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(26)&nbsp;=&nbsp;CLng(134217727)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(27)&nbsp;=&nbsp;CLng(268435455)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(28)&nbsp;=&nbsp;CLng(536870911)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(29)&nbsp;=&nbsp;CLng(1073741823)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_lOnBits(30)&nbsp;=&nbsp;CLng(2147483647)<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(0)&nbsp;=&nbsp;CLng(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(1)&nbsp;=&nbsp;CLng(2)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(2)&nbsp;=&nbsp;CLng(4)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(3)&nbsp;=&nbsp;CLng(8)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(4)&nbsp;=&nbsp;CLng(16)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(5)&nbsp;=&nbsp;CLng(32)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(6)&nbsp;=&nbsp;CLng(64)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(7)&nbsp;=&nbsp;CLng(128)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(8)&nbsp;=&nbsp;CLng(256)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(9)&nbsp;=&nbsp;CLng(512)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(10)&nbsp;=&nbsp;CLng(1024)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(11)&nbsp;=&nbsp;CLng(2048)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(12)&nbsp;=&nbsp;CLng(4096)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(13)&nbsp;=&nbsp;CLng(8192)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(14)&nbsp;=&nbsp;CLng(16384)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(15)&nbsp;=&nbsp;CLng(32768)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(16)&nbsp;=&nbsp;CLng(65536)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(17)&nbsp;=&nbsp;CLng(131072)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(18)&nbsp;=&nbsp;CLng(262144)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(19)&nbsp;=&nbsp;CLng(524288)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(20)&nbsp;=&nbsp;CLng(1048576)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(21)&nbsp;=&nbsp;CLng(2097152)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(22)&nbsp;=&nbsp;CLng(4194304)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(23)&nbsp;=&nbsp;CLng(8388608)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(24)&nbsp;=&nbsp;CLng(16777216)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(25)&nbsp;=&nbsp;CLng(33554432)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(26)&nbsp;=&nbsp;CLng(67108864)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(27)&nbsp;=&nbsp;CLng(134217728)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(28)&nbsp;=&nbsp;CLng(268435456)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(29)&nbsp;=&nbsp;CLng(536870912)<br />&nbsp;&nbsp;&nbsp;&nbsp;m_l2Power(30)&nbsp;=&nbsp;CLng(1073741824)<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;x<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;k<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;AA<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;BB<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;CC<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;DD<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;a<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;b<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;c<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;d<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S11&nbsp;=&nbsp;7<br />&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S12&nbsp;=&nbsp;12<br />&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S13&nbsp;=&nbsp;17<br />&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S14&nbsp;=&nbsp;22<br />&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S21&nbsp;=&nbsp;5<br />&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S22&nbsp;=&nbsp;9<br />&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S23&nbsp;=&nbsp;14<br />&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S24&nbsp;=&nbsp;20<br />&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S31&nbsp;=&nbsp;4<br />&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S32&nbsp;=&nbsp;11<br />&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S33&nbsp;=&nbsp;16<br />&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S34&nbsp;=&nbsp;23<br />&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S41&nbsp;=&nbsp;6<br />&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S42&nbsp;=&nbsp;10<br />&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S43&nbsp;=&nbsp;15<br />&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;S44&nbsp;=&nbsp;21<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;=&nbsp;ConvertToWordArray(sMessage)<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;&H67452301<br />&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;=&nbsp;&HEFCDAB89<br />&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;=&nbsp;&H98BADCFE<br />&nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;=&nbsp;&H10325476<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;k&nbsp;=&nbsp;0&nbsp;To&nbsp;UBound(x)&nbsp;Step&nbsp;16<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AA&nbsp;=&nbsp;a<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BB&nbsp;=&nbsp;b<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CC&nbsp;=&nbsp;c<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DD&nbsp;=&nbsp;d<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;0),&nbsp;S11,&nbsp;&HD76AA478<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;1),&nbsp;S12,&nbsp;&HE8C7B756<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;2),&nbsp;S13,&nbsp;&H242070DB<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;3),&nbsp;S14,&nbsp;&HC1BDCEEE<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;4),&nbsp;S11,&nbsp;&HF57C0FAF<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;5),&nbsp;S12,&nbsp;&H4787C62A<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;6),&nbsp;S13,&nbsp;&HA8304613<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;7),&nbsp;S14,&nbsp;&HFD469501<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;8),&nbsp;S11,&nbsp;&H698098D8<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;9),&nbsp;S12,&nbsp;&H8B44F7AF<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;10),&nbsp;S13,&nbsp;&HFFFF5BB1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;11),&nbsp;S14,&nbsp;&H895CD7BE<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;12),&nbsp;S11,&nbsp;&H6B901122<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;13),&nbsp;S12,&nbsp;&HFD987193<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;14),&nbsp;S13,&nbsp;&HA679438E<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_FF&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;15),&nbsp;S14,&nbsp;&H49B40821<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;1),&nbsp;S21,&nbsp;&HF61E2562<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;6),&nbsp;S22,&nbsp;&HC040B340<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;11),&nbsp;S23,&nbsp;&H265E5A51<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;0),&nbsp;S24,&nbsp;&HE9B6C7AA<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;5),&nbsp;S21,&nbsp;&HD62F105D<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;10),&nbsp;S22,&nbsp;&H2441453<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;15),&nbsp;S23,&nbsp;&HD8A1E681<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;4),&nbsp;S24,&nbsp;&HE7D3FBC8<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;9),&nbsp;S21,&nbsp;&H21E1CDE6<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;14),&nbsp;S22,&nbsp;&HC33707D6<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;3),&nbsp;S23,&nbsp;&HF4D50D87<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;8),&nbsp;S24,&nbsp;&H455A14ED<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;13),&nbsp;S21,&nbsp;&HA9E3E905<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;2),&nbsp;S22,&nbsp;&HFCEFA3F8<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;7),&nbsp;S23,&nbsp;&H676F02D9<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_GG&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;12),&nbsp;S24,&nbsp;&H8D2A4C8A<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;5),&nbsp;S31,&nbsp;&HFFFA3942<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;8),&nbsp;S32,&nbsp;&H8771F681<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;11),&nbsp;S33,&nbsp;&H6D9D6122<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;14),&nbsp;S34,&nbsp;&HFDE5380C<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;1),&nbsp;S31,&nbsp;&HA4BEEA44<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;4),&nbsp;S32,&nbsp;&H4BDECFA9<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;7),&nbsp;S33,&nbsp;&HF6BB4B60<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;10),&nbsp;S34,&nbsp;&HBEBFBC70<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;13),&nbsp;S31,&nbsp;&H289B7EC6<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;0),&nbsp;S32,&nbsp;&HEAA127FA<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;3),&nbsp;S33,&nbsp;&HD4EF3085<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;6),&nbsp;S34,&nbsp;&H4881D05<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;9),&nbsp;S31,&nbsp;&HD9D4D039<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;12),&nbsp;S32,&nbsp;&HE6DB99E5<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;15),&nbsp;S33,&nbsp;&H1FA27CF8<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_HH&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;2),&nbsp;S34,&nbsp;&HC4AC5665<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;0),&nbsp;S41,&nbsp;&HF4292244<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;7),&nbsp;S42,&nbsp;&H432AFF97<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;14),&nbsp;S43,&nbsp;&HAB9423A7<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;5),&nbsp;S44,&nbsp;&HFC93A039<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;12),&nbsp;S41,&nbsp;&H655B59C3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;3),&nbsp;S42,&nbsp;&H8F0CCC92<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;10),&nbsp;S43,&nbsp;&HFFEFF47D<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;1),&nbsp;S44,&nbsp;&H85845DD1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;8),&nbsp;S41,&nbsp;&H6FA87E4F<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;15),&nbsp;S42,&nbsp;&HFE2CE6E0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;6),&nbsp;S43,&nbsp;&HA3014314<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;13),&nbsp;S44,&nbsp;&H4E0811A1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x(k&nbsp;+&nbsp;4),&nbsp;S41,&nbsp;&HF7537E82<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;x(k&nbsp;+&nbsp;11),&nbsp;S42,&nbsp;&HBD3AF235<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;b,&nbsp;x(k&nbsp;+&nbsp;2),&nbsp;S43,&nbsp;&H2AD7D2BB<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md5_II&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;a,&nbsp;x(k&nbsp;+&nbsp;9),&nbsp;S44,&nbsp;&HEB86D391<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;AddUnsigned(a,&nbsp;AA)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;=&nbsp;AddUnsigned(b,&nbsp;BB)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;=&nbsp;AddUnsigned(c,&nbsp;CC)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;=&nbsp;AddUnsigned(d,&nbsp;DD)<br />&nbsp;&nbsp;&nbsp;&nbsp;Next<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MD5&nbsp;=&nbsp;LCase(WordToHex(c)&nbsp;&&nbsp;WordToHex(a)&nbsp;&&nbsp;WordToHex(b)&nbsp;&&nbsp;WordToHex(c)&nbsp;&&nbsp;WordToHex(d))<br />End&nbsp;Function<br /><br />Private&nbsp;Function&nbsp;LShift(lValue,&nbsp;iShiftBits)<br />&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;iShiftBits&nbsp;=&nbsp;0&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LShift&nbsp;=&nbsp;lValue<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit&nbsp;Function<br />&nbsp;&nbsp;&nbsp;&nbsp;ElseIf&nbsp;iShiftBits&nbsp;=&nbsp;31&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;lValue&nbsp;And&nbsp;1&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LShift&nbsp;=&nbsp;&H80000000<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LShift&nbsp;=&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit&nbsp;Function<br />&nbsp;&nbsp;&nbsp;&nbsp;ElseIf&nbsp;iShiftBits&nbsp;&lt;&nbsp;0&nbsp;Or&nbsp;iShiftBits&nbsp;&gt;&nbsp;31&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Err.Raise&nbsp;6<br />&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;(lValue&nbsp;And&nbsp;m_l2Power(31&nbsp;-&nbsp;iShiftBits))&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LShift&nbsp;=&nbsp;((lValue&nbsp;And&nbsp;m_lOnBits(31&nbsp;-&nbsp;(iShiftBits&nbsp;+&nbsp;1)))&nbsp;*&nbsp;m_l2Power(iShiftBits))&nbsp;Or&nbsp;&H80000000<br />&nbsp;&nbsp;&nbsp;&nbsp;Else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LShift&nbsp;=&nbsp;((lValue&nbsp;And&nbsp;m_lOnBits(31&nbsp;-&nbsp;iShiftBits))&nbsp;*&nbsp;m_l2Power(iShiftBits))<br />&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br />End&nbsp;Function<br /><br />Private&nbsp;Function&nbsp;RShift(lValue,&nbsp;iShiftBits)<br />&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;iShiftBits&nbsp;=&nbsp;0&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RShift&nbsp;=&nbsp;lValue<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit&nbsp;Function<br />&nbsp;&nbsp;&nbsp;&nbsp;ElseIf&nbsp;iShiftBits&nbsp;=&nbsp;31&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;lValue&nbsp;And&nbsp;&H80000000&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RShift&nbsp;=&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RShift&nbsp;=&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit&nbsp;Function<br />&nbsp;&nbsp;&nbsp;&nbsp;ElseIf&nbsp;iShiftBits&nbsp;&lt;&nbsp;0&nbsp;Or&nbsp;iShiftBits&nbsp;&gt;&nbsp;31&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Err.Raise&nbsp;6<br />&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;RShift&nbsp;=&nbsp;(lValue&nbsp;And&nbsp;&H7FFFFFFE)&nbsp;\&nbsp;m_l2Power(iShiftBits)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;(lValue&nbsp;And&nbsp;&H80000000)&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RShift&nbsp;=&nbsp;(RShift&nbsp;Or&nbsp;(&H40000000&nbsp;\&nbsp;m_l2Power(iShiftBits&nbsp;-&nbsp;1)))<br />&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br />End&nbsp;Function<br /><br />Private&nbsp;Function&nbsp;RotateLeft(lValue,&nbsp;iShiftBits)<br />&nbsp;&nbsp;&nbsp;&nbsp;RotateLeft&nbsp;=&nbsp;LShift(lValue,&nbsp;iShiftBits)&nbsp;Or&nbsp;RShift(lValue,&nbsp;(32&nbsp;-&nbsp;iShiftBits))<br />End&nbsp;Function<br /><br />Private&nbsp;Function&nbsp;AddUnsigned(lX,&nbsp;lY)<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;lX4<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;lY4<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;lX8<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;lY8<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;lResult<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;lX8&nbsp;=&nbsp;lX&nbsp;And&nbsp;&H80000000<br />&nbsp;&nbsp;&nbsp;&nbsp;lY8&nbsp;=&nbsp;lY&nbsp;And&nbsp;&H80000000<br />&nbsp;&nbsp;&nbsp;&nbsp;lX4&nbsp;=&nbsp;lX&nbsp;And&nbsp;&H40000000<br />&nbsp;&nbsp;&nbsp;&nbsp;lY4&nbsp;=&nbsp;lY&nbsp;And&nbsp;&H40000000<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;lResult&nbsp;=&nbsp;(lX&nbsp;And&nbsp;&H3FFFFFFF)&nbsp;+&nbsp;(lY&nbsp;And&nbsp;&H3FFFFFFF)<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;lX4&nbsp;And&nbsp;lY4&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lResult&nbsp;=&nbsp;lResult&nbsp;Xor&nbsp;&H80000000&nbsp;Xor&nbsp;lX8&nbsp;Xor&nbsp;lY8<br />&nbsp;&nbsp;&nbsp;&nbsp;ElseIf&nbsp;lX4&nbsp;Or&nbsp;lY4&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;lResult&nbsp;And&nbsp;&H40000000&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lResult&nbsp;=&nbsp;lResult&nbsp;Xor&nbsp;&HC0000000&nbsp;Xor&nbsp;lX8&nbsp;Xor&nbsp;lY8<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lResult&nbsp;=&nbsp;lResult&nbsp;Xor&nbsp;&H40000000&nbsp;Xor&nbsp;lX8&nbsp;Xor&nbsp;lY8<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br />&nbsp;&nbsp;&nbsp;&nbsp;Else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lResult&nbsp;=&nbsp;lResult&nbsp;Xor&nbsp;lX8&nbsp;Xor&nbsp;lY8<br />&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;AddUnsigned&nbsp;=&nbsp;lResult<br />End&nbsp;Function<br /><br />Private&nbsp;Function&nbsp;md5_F(x,&nbsp;y,&nbsp;z)<br />&nbsp;&nbsp;&nbsp;&nbsp;md5_F&nbsp;=&nbsp;(x&nbsp;And&nbsp;y)&nbsp;Or&nbsp;((Not&nbsp;x)&nbsp;And&nbsp;z)<br />End&nbsp;Function<br /><br />Private&nbsp;Function&nbsp;md5_G(x,&nbsp;y,&nbsp;z)<br />&nbsp;&nbsp;&nbsp;&nbsp;md5_G&nbsp;=&nbsp;(x&nbsp;And&nbsp;z)&nbsp;Or&nbsp;(y&nbsp;And&nbsp;(Not&nbsp;z))<br />End&nbsp;Function<br /><br />Private&nbsp;Function&nbsp;md5_H(x,&nbsp;y,&nbsp;z)<br />&nbsp;&nbsp;&nbsp;&nbsp;md5_H&nbsp;=&nbsp;(x&nbsp;Xor&nbsp;y&nbsp;Xor&nbsp;z)<br />End&nbsp;Function<br /><br />Private&nbsp;Function&nbsp;md5_I(x,&nbsp;y,&nbsp;z)<br />&nbsp;&nbsp;&nbsp;&nbsp;md5_I&nbsp;=&nbsp;(y&nbsp;Xor&nbsp;(x&nbsp;Or&nbsp;(Not&nbsp;z)))<br />End&nbsp;Function<br /><br />Private&nbsp;Sub&nbsp;md5_FF(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x,&nbsp;s,&nbsp;ac)<br />&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;AddUnsigned(a,&nbsp;AddUnsigned(AddUnsigned(md5_F(b,&nbsp;c,&nbsp;d),&nbsp;x),&nbsp;ac))<br />&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;RotateLeft(a,&nbsp;s)<br />&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;AddUnsigned(a,&nbsp;b)<br />End&nbsp;Sub<br /><br />Private&nbsp;Sub&nbsp;md5_GG(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x,&nbsp;s,&nbsp;ac)<br />&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;AddUnsigned(a,&nbsp;AddUnsigned(AddUnsigned(md5_G(b,&nbsp;c,&nbsp;d),&nbsp;x),&nbsp;ac))<br />&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;RotateLeft(a,&nbsp;s)<br />&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;AddUnsigned(a,&nbsp;b)<br />End&nbsp;Sub<br /><br />Private&nbsp;Sub&nbsp;md5_HH(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x,&nbsp;s,&nbsp;ac)<br />&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;AddUnsigned(a,&nbsp;AddUnsigned(AddUnsigned(md5_H(b,&nbsp;c,&nbsp;d),&nbsp;x),&nbsp;ac))<br />&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;RotateLeft(a,&nbsp;s)<br />&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;AddUnsigned(a,&nbsp;b)<br />End&nbsp;Sub<br /><br />Private&nbsp;Sub&nbsp;md5_II(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;x,&nbsp;s,&nbsp;ac)<br />&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;AddUnsigned(a,&nbsp;AddUnsigned(AddUnsigned(md5_I(b,&nbsp;c,&nbsp;d),&nbsp;x),&nbsp;ac))<br />&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;RotateLeft(a,&nbsp;s)<br />&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;=&nbsp;AddUnsigned(a,&nbsp;b)<br />End&nbsp;Sub<br /><br />Private&nbsp;Function&nbsp;ConvertToWordArray(sMessage)<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;lMessageLength<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;lNumberOfWords<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;lWordArray()<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;lBytePosition<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;lByteCount<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;lWordCount<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;MODULUS_BITS&nbsp;=&nbsp;512<br />&nbsp;&nbsp;&nbsp;&nbsp;Const&nbsp;CONGRUENT_BITS&nbsp;=&nbsp;448<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;lMessageLength&nbsp;=&nbsp;Len(sMessage)<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;lNumberOfWords&nbsp;=&nbsp;(((lMessageLength&nbsp;+&nbsp;((MODULUS_BITS&nbsp;-&nbsp;CONGRUENT_BITS)&nbsp;\&nbsp;BITS_TO_A_BYTE))&nbsp;\&nbsp;(MODULUS_BITS&nbsp;\&nbsp;BITS_TO_A_BYTE))&nbsp;+&nbsp;1)&nbsp;*&nbsp;(MODULUS_BITS&nbsp;\&nbsp;BITS_TO_A_WORD)<br />&nbsp;&nbsp;&nbsp;&nbsp;ReDim&nbsp;lWordArray(lNumberOfWords&nbsp;-&nbsp;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;lBytePosition&nbsp;=&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;lByteCount&nbsp;=&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;Do&nbsp;Until&nbsp;lByteCount&nbsp;&gt;=&nbsp;lMessageLength<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lWordCount&nbsp;=&nbsp;lByteCount&nbsp;\&nbsp;BYTES_TO_A_WORD<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lBytePosition&nbsp;=&nbsp;(lByteCount&nbsp;Mod&nbsp;BYTES_TO_A_WORD)&nbsp;*&nbsp;BITS_TO_A_BYTE<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lWordArray(lWordCount)&nbsp;=&nbsp;lWordArray(lWordCount)&nbsp;Or&nbsp;LShift(Asc(Mid(sMessage,&nbsp;lByteCount&nbsp;+&nbsp;1,&nbsp;1)),&nbsp;lBytePosition)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lByteCount&nbsp;=&nbsp;lByteCount&nbsp;+&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;Loop<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;lWordCount&nbsp;=&nbsp;lByteCount&nbsp;\&nbsp;BYTES_TO_A_WORD<br />&nbsp;&nbsp;&nbsp;&nbsp;lBytePosition&nbsp;=&nbsp;(lByteCount&nbsp;Mod&nbsp;BYTES_TO_A_WORD)&nbsp;*&nbsp;BITS_TO_A_BYTE<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;lWordArray(lWordCount)&nbsp;=&nbsp;lWordArray(lWordCount)&nbsp;Or&nbsp;LShift(&H80,&nbsp;lBytePosition)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;lWordArray(lNumberOfWords&nbsp;-&nbsp;2)&nbsp;=&nbsp;LShift(lMessageLength,&nbsp;3)<br />&nbsp;&nbsp;&nbsp;&nbsp;lWordArray(lNumberOfWords&nbsp;-&nbsp;1)&nbsp;=&nbsp;RShift(lMessageLength,&nbsp;29)<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ConvertToWordArray&nbsp;=&nbsp;lWordArray<br />End&nbsp;Function<br /><br />Private&nbsp;Function&nbsp;WordToHex(lValue)<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;lByte<br />&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;lCount<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;lCount&nbsp;=&nbsp;0&nbsp;To&nbsp;3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lByte&nbsp;=&nbsp;RShift(lValue,&nbsp;lCount&nbsp;*&nbsp;BITS_TO_A_BYTE)&nbsp;And&nbsp;m_lOnBits(BITS_TO_A_BYTE&nbsp;-&nbsp;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WordToHex&nbsp;=&nbsp;WordToHex&nbsp;&&nbsp;Right("0"&nbsp;&&nbsp;Hex(lByte),&nbsp;2)<br />&nbsp;&nbsp;&nbsp;&nbsp;Next<br />End&nbsp;Function<br />%&gt;<br /></div></div><br /><br /><br /><br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">DIV提示信息框(置于窗口最上面)</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_66.html" />
      <updated>2008-6-27 12:33:49</updated>
      <published>2008-6-27 12:33:49</published>
      <id>http://dev.mo.cn/article_66.html</id>
      <summary type="html">
      <![CDATA[<div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;head&gt;<br />&lt;meta&nbsp;http-equiv="Content-Type"&nbsp;content="text/html;&nbsp;charset=gb2312"&nbsp;/&gt;<br />&lt;title&gt;提示信息框&lt;/title&gt;<br />&lt;style&nbsp;type="text/css"&gt;<br />a{&nbsp;color:#000;&nbsp;font-size:12px;text-decoration:none}<br />a:hover{&nbsp;color:#900;&nbsp;text-decoration:underline}<br />body{background:;filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#ffffff,endColorStr=#003366);&nbsp;overflow:hidden}<br />#massage_box{&nbsp;position:absolute;&nbsp;&nbsp;left:expression((body.clientWidth-350)/2);&nbsp;top:expression((body.clientHeight-200)/2);&nbsp;width:350px;&nbsp;height:200px;filter:dropshadow(color=#666666,offx=3,offy=3,positive=2);&nbsp;z-index:2;&nbsp;visibility:hidden}<br />#mask{&nbsp;position:absolute;&nbsp;top:0;&nbsp;left:0;&nbsp;width:expression(body.scrollWidth);&nbsp;height:expression(body.scrollHeight);&nbsp;background:#666;&nbsp;filter:ALPHA(opacity=60);&nbsp;z-index:1;&nbsp;visibility:hidden}<br />.massage{border:#036&nbsp;solid;&nbsp;border-width:1&nbsp;1&nbsp;3&nbsp;1;&nbsp;width:95%;&nbsp;height:95%;&nbsp;background:#fff;&nbsp;color:#036;&nbsp;font-size:12px;&nbsp;line-height:150%}<br />.header{background:#036;&nbsp;height:10%;&nbsp;font-family:Verdana,&nbsp;Arial,&nbsp;Helvetica,&nbsp;sans-serif;&nbsp;font-size:12px;&nbsp;padding:3&nbsp;5&nbsp;0&nbsp;5;&nbsp;color:#fff}<br />&lt;/style&gt;<br />&lt;!--实现层移动--&gt;<br />&lt;script&nbsp;language="javascript"&gt;<br />var&nbsp;Obj=''<br />document.onmouseup=MUp<br />document.onmousemove=MMove<br />function&nbsp;MDown(Object){<br />Obj=Object.id<br />document.all(Obj).setCapture()<br />pX=event.x-document.all(Obj).style.pixelLeft;<br />pY=event.y-document.all(Obj).style.pixelTop;<br />}<br />function&nbsp;MMove(){<br />if(Obj!=''){<br />&nbsp;&nbsp;&nbsp;&nbsp;document.all(Obj).style.left=event.x-pX;<br />&nbsp;&nbsp;&nbsp;&nbsp;document.all(Obj).style.top=event.y-pY;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />function&nbsp;MUp(){<br />if(Obj!=''){<br />&nbsp;&nbsp;&nbsp;&nbsp;document.all(Obj).releaseCapture();<br />&nbsp;&nbsp;&nbsp;&nbsp;Obj='';<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />&lt;/script&gt;<br />&lt;/head&gt;&lt;body&gt;<br />&lt;div&nbsp;id="massage_box"&gt;&lt;div&nbsp;class="massage"&gt;<br />&lt;div&nbsp;class="header"&nbsp;onmousedown=MDown(massage_box)&gt;&lt;div&nbsp;style="display:inline;&nbsp;width:150px;&nbsp;position:absolute"&gt;本站提示信息&lt;/div&gt;<br />&lt;span&nbsp;onClick="massage_box.style.visibility='hidden';&nbsp;mask.style.visibility='hidden'"&nbsp;style="float:right;&nbsp;display:inline;&nbsp;cursor:hand"&gt;×&lt;/span&gt;&lt;/div&gt;<br />&lt;ul&nbsp;style="margin-right:25"&gt;&lt;li&gt;<br />本人申明此博客所有文章（包括文章插图）均为原创，如需引用或转载请注明出处。&nbsp;<br />&lt;/li&gt;&lt;li&gt;欢迎大家对博文中观点留言评述，谢绝无聊人士无素质无观点的灌水漫骂。&lt;/li&gt;&lt;li&gt;本站已设背景音乐，听音乐盒中收集的音乐时请先到页面底部关闭背景音乐。&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;<br />&lt;div&nbsp;id="mask"&gt;&lt;/div&gt;<br />&lt;span&nbsp;onClick="mask.style.visibility='visible';massage_box.style.visibility='visible'"&nbsp;style="cursor:hand"&gt;&lt;a&nbsp;href="#"&gt;显示提示信息&lt;/a&gt;&lt;/span&gt;<br />&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;bottom&nbsp;here<br />&lt;/body&gt;<br />&lt;/html&gt;<br /></div></div><br /><br />]]>
      </summary>
      <category term="" label="HTML/CSS" scheme="http://dev.mo.cn/cat_diary_8.html" />
   </entry>
   <entry>
      <title type="html">开发者版本：你属于哪个版本的web程序员？</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_65.html" />
      <updated>2008-6-27 6:39:15</updated>
      <published>2008-6-27 6:39:15</published>
      <id>http://dev.mo.cn/article_65.html</id>
      <summary type="html">
      <![CDATA[国外开发者博客中有一篇有趣的文章，将程序员按水平像软件版本号那样划分为不同的版本。相对于在招聘时分为初级，中级，高级程序员，直接表明需要某种语言N版本的程序员或许更方便直接。根据作者的观点，可将WEB开发者大致分为以下几个版本：&nbsp;<br /><br />Alpha：阅读过一些专业书籍，大多数能用Dreamweaver或者FrontPage帮朋友制作一些Web页面。但在他们熟练掌握HTML代码以前，你大概不会雇佣他们成为职业的WEB制作人员。&nbsp;<br /><br />Beta：已经比较擅长整合站点页面了，在HTML技巧方面也有一定造诣，但还是用Tables来制作页面，不了解CSS，在面对动态页面或数据库连接时还是底气不足。&nbsp;<br /><br />Pre&nbsp;Version&nbsp;1&nbsp;(0.1)：比Beta版的开发者水平要高。熟悉HTML，开始了解CSS是如何运作的，懂一点JavaScript，但还是基于业余水准，逐步开始关心动态站点搭建和数据库连接的知识。这个版本的WEB开发人员还远不能成为雇主眼中的香饽饽。&nbsp;<br /><br />1.0:&nbsp;能够基本把控整个站点开发，针对每个问题尽可能的找到最直接的解决办法。但对可测性，可扩展性以及在不同(层)框架下如何选择最合适的WEB设计工具尚无概念。这个版本的WEB开发者有良好的技术基础，需要有进一步的帮助和指导。&nbsp;<br /><br />2.0：懂面向对象的编程语言，理解分层开发的必要性，关注代码分离，对问题寻找更完美的解决方法，偶然也会考虑设计模式的问题，但对此仍然概念不清。属于优秀的初级开发者，能完成较松散的代码开发(相对大型严谨的站点开发而言)，在面对较复杂问题寻找解决办法时需要周边人的帮助。&nbsp;<br /><br />3.0：开始较为深入的理解面向对象编程和设计模式，了解他们的用途，当看到好的设计模式时能看透其本质，逐步关注分层的架构解决办法和可测试性。理解不同的开发语言并能说出他们的异同(例如各自的优势)。属于优秀的中级别开发者，雇主也确信他们最终能找到问题的解决办法，这个版本的人可以给1.0和2.0的开发者以指导。但他们对架构的理解仍然不够清晰，值得一提的是，只要给予一些指导，他们能很快理解并熟记做出的决定，以及选定方案的优势所在。&nbsp;<br /><br />4.0：理解模式，重视用户的反馈。着手研究方法论，架构设计和软件开发的最佳入口。头脑中已经形成了超越开发语言，技术架构的整体方案，可根据需求解构程序。能从理论的角度，不同模式如何融合成最佳形态，将多种X-驱动的模式应用到不同的方案中。是精通多语言的高手，理解不同系统和方法论的细微差别，属于高级程序员。这个级别的人能够轻易的辅导2.0和3.0的程序员，将他们推向更高的级别。&nbsp;<br /><br />5.0：从系统的角度考虑问题。对各种系统结构有深入研究，能对整个代码架构中的问题进行改进。在团队粘合性以及代码安全性方面有杰出贡献。对1.0到4.0版本的开发人员出现的问题能及时察觉，让整个团队保持积极性且保持兴奋的状态创建软件解决办法。举例来说，他们总是对新的技术和信息保持饥渴状态，试图用最简便的方案解决开发任务。在整个IT团队中获得信任，属于高级程序员和架构师。&nbsp;<br /><br />那么，您属于哪个版本的程序员呢？&nbsp;]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">简单的单文件上传示例及详细说明</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_63.html" />
      <updated>2008-6-27 3:21:02</updated>
      <published>2008-6-27 3:21:02</published>
      <id>http://dev.mo.cn/article_63.html</id>
      <summary type="html">
      <![CDATA[<div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;简单的文件上传示例及详细说明&lt;/title&gt;<br />&lt;style&gt;<br />BODY&nbsp;{font-size:12px;}<br />INPUT&nbsp;{font-size:12px;border:1px&nbsp;#dddddd&nbsp;solid;}<br />.f&nbsp;{font-size:12px;border:1px&nbsp;#dddddd&nbsp;solid;width:300px}<br />IMG&nbsp;{border:0px;}<br />&lt;/style&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;h3&gt;简单的文件上传示例及详细说明&lt;/h3&gt;<br />&lt;a&nbsp;href="http://blog.ii-home.cn"&gt;&lt;img&nbsp;src="http://blog.ii-home.cn/img/myblog.jpg"&nbsp;/&gt;&lt;/a&gt;<br />本示例由Anlige制作，QQ417833272，Email:zhanghuiguoanlige@126.com&nbsp;&nbsp;<br />&lt;hr&nbsp;/&gt;<br />&lt;form&nbsp;name="form1"&nbsp;action="?act=upload"&nbsp;method="post"&nbsp;enctype="multipart/form-data"&gt;<br />选择本地文件:&nbsp;&lt;input&nbsp;class="f"&nbsp;type="file"&nbsp;name="file1"&nbsp;/&gt;&nbsp;&lt;input&nbsp;type="submit"&nbsp;value="提交"&nbsp;/&gt;<br />&lt;/form&gt;<br />&lt;%<br />if&nbsp;request.querystring("act")="upload"&nbsp;then<br />dim&nbsp;t_stream,FormName,localname,servername,tdata&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'定义变量<br />tdata=request.binaryread(request.totalbytes)<br />call&nbsp;getdata(tdata)&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 />response.write&nbsp;"&lt;b&gt;成功上传文件到服务器!&lt;/b&gt;&lt;br&nbsp;/&gt;"<br />response.write&nbsp;"表单名:&lt;font&nbsp;color=green&gt;"&FormName&"&lt;/font&gt;&lt;br&nbsp;/&gt;"<br />response.write&nbsp;"本地文件名:&lt;font&nbsp;color=green&gt;"&localname&"&lt;/font&gt;&lt;br&nbsp;/&gt;"<br />response.write&nbsp;"服务器文件名:&lt;font&nbsp;color=green&gt;"&server.mappath(servername)&"&lt;/font&gt;&lt;br&nbsp;/&gt;"<br />response.write&nbsp;"&lt;a&nbsp;href="""&servername&"""&gt;打开文件&lt;/a&gt;"<br />end&nbsp;if<br />%&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br /><br />&lt;%<br />'函数名:getdata<br />'参数:tempdata-待处理的二进制数据,由客户端提交得到<br />'作用:处理客户端提交来的数据<br />Function&nbsp;getdata(tempdata)<br />&nbsp;&nbsp;set&nbsp;t_stream=server.createobject("adodb.stream")&nbsp;&nbsp;&nbsp;'初始化stream对象<br />&nbsp;&nbsp;t_stream.type=1&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 />&nbsp;&nbsp;t_stream.mode=3&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 />&nbsp;&nbsp;t_stream.open&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;'打开stream对象<br />&nbsp;&nbsp;t_stream.write&nbsp;tempdata&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 />&nbsp;&nbsp;bcrlf=chrb(13)&chrb(10)&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 />&nbsp;&nbsp;fpos=instrb(1,tempdata,bcrlf)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'找到第一个换行符位置<br />&nbsp;&nbsp;sSplit=midb(tempdata,1,fpos-1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'得到数据分割标志<br />&nbsp;&nbsp;slen=lenb(ssplit)&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 />&nbsp;&nbsp;istart=slen+2&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 />&nbsp;&nbsp;formend=instrb(istart,tempdata,bcrlf&bcrlf)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'获得表单的结束位置<br />&nbsp;&nbsp;formhead=midb(tempdata,istart,formend-istart)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'获得表单相关的文本内容<br />&nbsp;&nbsp;str=bytes2str(formhead)&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 />&nbsp;&nbsp;startpos=instr(str,"name=""")+6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'查找表单名的开始位置，为什么要+6?name="正好6个字符长<br />&nbsp;&nbsp;endpos=instr(startpos,str,"""")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'查找表单名的结束位置<br />&nbsp;&nbsp;FormName=mid(str,startpos,endpos-startpos)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'获得表单名<br />&nbsp;&nbsp;startpos=instr(str,"filename=""")+10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'获得本地文件路径的开始位置，+10和上面原理一样<br />&nbsp;&nbsp;endpos=instr(startpos,str,"""")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'获得本地文件路径的结束位置<br />&nbsp;&nbsp;filename=mid(str,startpos,endpos-startpos)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'获得本地文件路径<br />&nbsp;&nbsp;localname=filename&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 />&nbsp;&nbsp;filename=mid(filename,instrrev(filename,"\")+1)&nbsp;&nbsp;&nbsp;&nbsp;'获得本地文件名<br />&nbsp;&nbsp;fileExe=split(filename,".")(ubound(split(filename,".")))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'获地文件后缀<br />&nbsp;&nbsp;valueend=instrb(formend+3,tempdata,sSplit)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'获得文件数据的结束位置<br />&nbsp;&nbsp;newname=getRndName()&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 />&nbsp;&nbsp;newname=newname&"."&fileExe&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 />&nbsp;&nbsp;servername=newname&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 />&nbsp;&nbsp;call&nbsp;savf(newname,formend+3,valueend-formend-6)&nbsp;&nbsp;&nbsp;&nbsp;'调用函数保存文件<br />&nbsp;&nbsp;t_stream.close&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;'关闭stream对象<br />&nbsp;&nbsp;set&nbsp;t_stream=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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'销毁stream对象<br />End&nbsp;Function<br /><br />'函数名:savf<br />'参数:fname-以本参数为文件名保存到服务器，pos-要保存文件内容在流内的位置,siz-要保存的流大小(也就是文件大小)<br />'作用:保存文件<br />Function&nbsp;savf(fname,pos,siz)<br />&nbsp;&nbsp;&nbsp;&nbsp;dim&nbsp;mystream<br />&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;mystream=server.createobject("adodb.stream")<br />&nbsp;&nbsp;&nbsp;&nbsp;mystream.type=1<br />&nbsp;&nbsp;&nbsp;&nbsp;mystream.mode=3<br />&nbsp;&nbsp;&nbsp;&nbsp;mystream.open<br />&nbsp;&nbsp;&nbsp;&nbsp;t_stream.position=Pos<br />&nbsp;&nbsp;&nbsp;&nbsp;t_stream.CopyTo&nbsp;mystream,siz<br />&nbsp;&nbsp;&nbsp;&nbsp;mystream.savetofile&nbsp;server.mappath(fname)<br />&nbsp;&nbsp;&nbsp;&nbsp;mystream.close<br />&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;mystream=nothing<br />End&nbsp;Function<br /><br />'函数名:bytes2str<br />'参数:byt-待转换的二进制数据<br />'作用:将二进制数据转换为文本<br />Function&nbsp;bytes2str(byt)<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;lenb(byt)=0&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;bytes2str=""<br />&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;function<br />&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;if<br />&nbsp;&nbsp;&nbsp;&nbsp;dim&nbsp;mystream<br />&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;mystream=server.createobject("adodb.stream")<br />&nbsp;&nbsp;&nbsp;&nbsp;mystream.type=2<br />&nbsp;&nbsp;&nbsp;&nbsp;mystream.mode=3<br />&nbsp;&nbsp;&nbsp;&nbsp;mystream.open<br />&nbsp;&nbsp;&nbsp;&nbsp;mystream.writetext&nbsp;byt<br />&nbsp;&nbsp;&nbsp;&nbsp;mystream.position=0<br />&nbsp;&nbsp;&nbsp;&nbsp;mystream.charset="gb2312"<br />&nbsp;&nbsp;&nbsp;&nbsp;mystream.position=2<br />&nbsp;&nbsp;&nbsp;&nbsp;bstr=mystream.readtext()<br />&nbsp;&nbsp;&nbsp;&nbsp;mystream.close<br />&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;mystream=nothing<br />&nbsp;&nbsp;&nbsp;&nbsp;bytes2str=bstr<br />End&nbsp;Function<br /><br />'函数名:getRndName<br />'参数:无<br />'作用:根据时间获得一个随即字串<br />&nbsp;Function&nbsp;getRndName()<br />&nbsp;&nbsp;&nbsp;&nbsp;dim&nbsp;y,m,d,h,mm,s,r<br />&nbsp;&nbsp;&nbsp;&nbsp;Randomize()<br />&nbsp;&nbsp;&nbsp;&nbsp;y=year(now)<br />&nbsp;&nbsp;&nbsp;&nbsp;m=month(now):if&nbsp;m&lt;10&nbsp;then&nbsp;m="0"&m<br />&nbsp;&nbsp;&nbsp;&nbsp;d=day(now):if&nbsp;d&lt;10&nbsp;then&nbsp;d="0"&d<br />&nbsp;&nbsp;&nbsp;&nbsp;h=hour(now):if&nbsp;h&lt;10&nbsp;then&nbsp;h="0"&h<br />&nbsp;&nbsp;&nbsp;&nbsp;mm=minute(now):if&nbsp;mm&lt;10&nbsp;then&nbsp;mm="0"&mm<br />&nbsp;&nbsp;&nbsp;&nbsp;s=second(now):if&nbsp;s&lt;10&nbsp;then&nbsp;s="0"&s<br />&nbsp;&nbsp;&nbsp;&nbsp;r=cint(rnd()*10):if&nbsp;r&lt;10&nbsp;then&nbsp;r="0"&r<br />&nbsp;&nbsp;&nbsp;&nbsp;getRndName=y&m&d&h&mm&s&r<br />&nbsp;End&nbsp;Function<br />%&gt;</div></div><br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">用CE查找武林外传基础地址</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_62.html" />
      <updated>2008-6-26 3:20:17</updated>
      <published>2008-6-26 3:20:17</published>
      <id>http://dev.mo.cn/article_62.html</id>
      <summary type="html">
      <![CDATA[需要工具:<br /><br />CE（英文或汉化）&nbsp;<br /><br />一,打开游戏和CE用CE载入游戏<br /><br />二,让你的血量回到最满状态,记住血量值<br /><br />如上图,我的是1312点血,好的,用CE搜"1312",.用"Exact&nbsp;value"方式,4字节<br /><br />搜到N个址,好,再回到游戏里,我们让人物掉点血(打怪什么的,最好多掉点,这样方便后面来查数),<br /><br />再用"Decreased&nbsp;value"(减少了的数)来搜,这样掉点血,搜一次,搜点血搜一次,几次下来,<br /><br />好的,找到的地址就只剩四个了(我是两次就找到只剩四个了,电脑不同,可能找的次数也不同,不过方法是一样的,先找最大血量值,然后,再掉点血,再用减少的搜,如此循环几次就OK了)<br /><br />记下第一个地址(为什么用第一个地址,CE的教程里说,一般如果找到少量的地址后,正确的一般在第一个,如果你不确定,你可以让人物自动回血,就可以看到,第一个地址的数也在跟着增加~)&nbsp;<br /><br />接着,把第一个地址双击,加入下面的栏里,再在地址上单击右键,<br /><br />弹出菜单中选"Find&nbsp;out&nbsp;what&nbsp;writes&nbsp;to&nbsp;this&nbsp;address"(谁在改定这个地址),调出监视窗口,再回到游戏,掉点血,就可以看到监视窗口里己经有改写该地址的命令了~<br /><br />选中该命令,点"Mor&nbsp;information",得到如下图<br /><br />mov&nbsp;[esi+00000254],ecx&nbsp;红色加亮的这句,(+00000254也就是血量的偏移量了)<br /><br />可以看到,是把ECX的值写入ESI+00000254这个内存地址中,所以,我们记下下面的ESI地址:ESI=046acf68,再回到CE主界面,搜"05C0B548"这个数(选中HEX,用十六进制四字节方式搜)<br /><br />得到26个地址都含有这个数,好的,把最前面的三个数保存到下栏里,然后,小退一下(回到人物选择界面,再进入游戏),<br /><br />就可以看到,三个地址的数值都有变化了.好,再重新找血量地址,<br /><br />然后再"Find&nbsp;out&nbsp;what&nbsp;writes&nbsp;to&nbsp;this&nbsp;address"(谁在改定这个地址)这个地址,得到ESI的值,记下来,<br /><br />对比刚保存&nbsp;下来的三个地址内的数,呵呵,发现010AEAE4里的值刚好等于ESI,这就可以肯定,010AEAE4一定二级基址了,<br /><br />好,我们监视010AEAE4,"Find&nbsp;out&nbsp;what&nbsp;writes&nbsp;to&nbsp;this&nbsp;address".好,再次小退一下,再进入游戏,这时监视窗口有东东了,<br /><br />如下图得到:mov&nbsp;[esi+24],0000000<br /><br />记下ESI的值,010AEAC0,再回到CE主界面,用十六进制的方法找010AEACO<br /><br />得到N个数,反复搜几次,好,得到下图<br /><br />按CE教程说的,一般最是地址最小的就是正确的,呵呵,有点那个啊,~~~~~~~~~~~~<br /><br />选第一个008BE594,加到下面的栏里,完全退出游戏,再进入游戏<br /><br />重复,最后还是得到008BE594,这样就可以肯定,008BE594就是一级基址了<br /><br />得出公式如下<br /><br />一级基址:008BE594<br /><br />008BE594地址里面保存的数值+24的偏移=二级基址<br /><br />二级基址里面保存的地址数+254的偏移得到血量的地址<br /><br />下面开始搜索数据!<br /><br />用CE打开武林外传。运行CE，按照下图的次序打开(...\武林外传\element\elementclient.exe)<br /><br />2.游戏启动后，别忘了选择游戏窗口。<br /><br />3.这是游戏中人物的数据。<br /><br />4.好，现在我们要在CE中显示人物的生命值。同样按照图中的顺序打开“添加地址”对话框，<br /><br />在数据框中添加我们已知的内存地址。当然，我们要用指针的方式，因为存储这些数据的地址是不固定的，<br /><br />我们可以用8C6A54这个固定的基地址以及相关的偏移地址找到我们需要的数据。我们就来看看生命的值，<br /><br />完成图上的项目点“确定”来看看结果。<br /><br />5.怎么样！是不是角色的生命值呢，使自己失去一些血量看看这个值是不是也在跟着变化。<br /><br />6.根据已知的人物地址，我们还可以显示其它数据。<br /><br />以上数字均为16进制<br /><br /><br /><br />]]>
      </summary>
      <category term="" label="个人日志" scheme="http://dev.mo.cn/cat_diary_1.html" />
   </entry>
   <entry>
      <title type="html">Stream读写文本文件示例</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_61.html" />
      <updated>2008-6-26 1:40:09</updated>
      <published>2008-6-26 1:40:09</published>
      <id>http://dev.mo.cn/article_61.html</id>
      <summary type="html">
      <![CDATA[<div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;%<br />'删除文件<br />Function&nbsp;delfile(path)<br />Set&nbsp;fso=server.createobject("scripting.filesystemobject")<br />&nbsp;if&nbsp;fso.fileexists(path)&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;fso.deletefile&nbsp;path<br />&nbsp;end&nbsp;if<br />Set&nbsp;fso=nothing<br />End&nbsp;function<br /><br />'创建文件<br />Function&nbsp;createfile(path)<br />Set&nbsp;fso=server.createobject("scripting.filesystemobject")<br />&nbsp;if&nbsp;not&nbsp;fso.fileexists(path)&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;fso.createtextfile&nbsp;path<br />&nbsp;end&nbsp;if<br />Set&nbsp;fso=nothing<br />End&nbsp;function<br /><br />'写入文件并保存<br />Function&nbsp;writefile(path,str)<br />Set&nbsp;mystream=server.createobject("adodb.stream")<br />&nbsp;&nbsp;&nbsp;&nbsp;mystream.type=2&nbsp;'文本模式<br />&nbsp;&nbsp;&nbsp;&nbsp;mystream.mode=3&nbsp;'读写模式<br />&nbsp;&nbsp;&nbsp;&nbsp;mystream.charset="gb2312"&nbsp;'字符集<br />&nbsp;&nbsp;&nbsp;&nbsp;mystream.open&nbsp;'打开<br />&nbsp;&nbsp;&nbsp;&nbsp;createfile(path)&nbsp;'创建文件<br />&nbsp;&nbsp;&nbsp;&nbsp;mystream.loadfromfile(path)&nbsp;'从文件加载<br />&nbsp;&nbsp;&nbsp;&nbsp;mystream.position=mystream.size<br />&nbsp;&nbsp;&nbsp;&nbsp;mystream.writetext&nbsp;str,1&nbsp;'把数据以"行"模式写入流<br />&nbsp;&nbsp;&nbsp;&nbsp;mystream.savetofile&nbsp;path,2&nbsp;'覆盖原文件保存<br />&nbsp;&nbsp;&nbsp;&nbsp;mystream.position=0<br />&nbsp;&nbsp;&nbsp;&nbsp;writefile=mystream.readtext()&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mystream.close<br />Set&nbsp;mystream=nothing<br />End&nbsp;function<br /><br />filename=server.mappath("a.txt")<br />temp=writefile(filename,"测试文本")<br />Response.write&nbsp;"成功写入文件！&lt;br&nbsp;/&gt;&lt;font&nbsp;color=green&gt;"&filename&"&lt;/font&gt;，文件内容为:&lt;br&nbsp;/&gt;&lt;pre&gt;&lt;font&nbsp;color=red&gt;"&temp&"&lt;/font&gt;&lt;/pre&gt;"<br />%&gt;<br /></div></div><br /><br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">XMLHttpRequest对象详细说明</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_60.html" />
      <updated>2008-6-25 3:36:38</updated>
      <published>2008-6-25 3:36:38</published>
      <id>http://dev.mo.cn/article_60.html</id>
      <summary type="html">
      <![CDATA[以支持多种浏览器的方式创建&nbsp;XMLHttpRequest&nbsp;对象<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />var&nbsp;xmlHttp&nbsp;=&nbsp;false;<br />try&nbsp;{<br />&nbsp;&nbsp;xmlHttp&nbsp;=&nbsp;new&nbsp;ActiveXObject("Msxml2.XMLHTTP");<br />}<br />&nbsp;catch&nbsp;(e)&nbsp;{<br />&nbsp;&nbsp;try&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;xmlHttp&nbsp;=&nbsp;new&nbsp;ActiveXObject("Microsoft.XMLHTTP");<br />&nbsp;&nbsp;}<br />&nbsp;catch&nbsp;(e2)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;xmlHttp&nbsp;=&nbsp;false;<br />&nbsp;&nbsp;}<br />}<br />if&nbsp;(!xmlHttp&nbsp;&&&nbsp;typeof&nbsp;XMLHttpRequest&nbsp;!=&nbsp;'undefined')&nbsp;{<br />&nbsp;&nbsp;xmlHttp&nbsp;=&nbsp;new&nbsp;XMLHttpRequest();<br />}<br /></div></div><br />Ajax&nbsp;的基本请求/响应模型<br />所有&nbsp;Ajax&nbsp;应用程序中基本都雷同的流程：<br />1、从&nbsp;Web&nbsp;表单中获取需要的数据。&nbsp;<br />2、建立要连接的&nbsp;URL。&nbsp;<br />3、打开到服务器的连接。&nbsp;<br />4、设置服务器在完成后要运行的函数。&nbsp;<br />5、发送请求。&nbsp;<br />XMLHttpRequest&nbsp;对象实例的&nbsp;onreadystatechange&nbsp;属性可以告诉服务器在运行完成&nbsp;后做什么。因为代码没有等待服务器，必须让服务器知道怎么做以便您能作出响应。<br /><br />现在要面对服务器的响应了。现在只要知道两点：<br />&#8226;什么也不要做，直到&nbsp;xmlHttp.readyState&nbsp;属性的值等于&nbsp;4。&nbsp;<br />&#8226;服务器将把响应填充到&nbsp;xmlHttp.responseText&nbsp;属性中。&nbsp;<br />其中的第一点，即就绪状态，将在下一篇文章中详细讨论，您将进一步了解&nbsp;HTTP&nbsp;请求的阶段，可能比您设想的还多。现在只要检查一个特定的值（4）就可以了（下一期文章中还有更多的值要介绍）。第二点，使用&nbsp;xmlHttp.responseText&nbsp;属性获得服务器的响应，<br />一个&nbsp;JavaScript&nbsp;方法捕捉用户输入表单的信息并将其发送到服务器，另一个&nbsp;JavaScript&nbsp;方法监听和处理响应，并在响应返回时设置字段的值。所有这些实际上都依赖于调用&nbsp;第一个&nbsp;JavaScript&nbsp;方法，它启动了整个过程。<br /><br />必须非常熟悉一个&nbsp;JavaScript&nbsp;对象，即&nbsp;XMLHttpRequest<br />该对象的很少的几个&nbsp;方法和属性。<br />&#8226;open()：建立到服务器的新请求。&nbsp;<br />&#8226;send()：向服务器发送请求。&nbsp;<br />&#8226;abort()：退出当前请求。&nbsp;<br />&#8226;readyState：提供当前&nbsp;HTML&nbsp;的就绪状态。&nbsp;<br />&#8226;responseText：服务器返回的请求响应文本<br />这些方法和属性都与发送请求及处理响应有关<br /><br /><br />用&nbsp;XMLHttpRequest&nbsp;发送请求<br />得到请求对象之后就可以进入请求/响应循环了。记住，XMLHttpRequest&nbsp;惟一的目的是让您发送请求和接收响应。其他一切都是&nbsp;JavaScript、CSS&nbsp;或页面中其他代码的工作：改变用户界面、切换图像、解释服务器返回的数据。<br />设置服务器&nbsp;URL<br />首先要确定连接的服务器的&nbsp;URL。这并不是&nbsp;Ajax&nbsp;的特殊要求，但仍然是建立连接所必需的，显然现在您应该知道如何构造&nbsp;URL&nbsp;了。<br />打开请求<br />有了要连接的&nbsp;URL&nbsp;后就可以配置请求了。可以用&nbsp;XMLHttpRequest&nbsp;对象的&nbsp;open()&nbsp;方法来完成。该方法有五个参数：<br />request-type：发送请求的类型。典型的值是&nbsp;GET&nbsp;或&nbsp;POST，但也可以发送&nbsp;HEAD&nbsp;请求。&nbsp;<br />url：要连接的&nbsp;URL。&nbsp;<br />asynch：如果希望使用异步连接则为&nbsp;true，否则为&nbsp;false。该参数是可选的，默认为&nbsp;true。&nbsp;<br />username：如果需要身份验证，则可以在此指定用户名。该可选参数没有默认值。&nbsp;password：如果需要身份验证，则可以在此指定口令。该可选参数没有默认值。&nbsp;<br />Internet&nbsp;开发人员对&nbsp;open()&nbsp;方法到底做什么没有达成一致。但它实际上并不是&nbsp;打开一个请求。如果监控&nbsp;XHTML/Ajax&nbsp;页面及其连接脚本之间的网络和数据传递，当调用&nbsp;open()&nbsp;方法时将看不到任何通信。不清楚为何选用了这个名字，但显然不是一个好的选择。<br /><br />发送请求<br />一旦用&nbsp;open()&nbsp;配置好之后，就可以发送请求了。幸运的是，发送请求的方法的名称要比&nbsp;open()&nbsp;适当，它就是&nbsp;send()。<br />指定回调方法<br />服务器在完成通过&nbsp;XMLHttpRequest&nbsp;发送给它的请求处理之后需要某种指示说明怎么做。<br />在&nbsp;JavaScript&nbsp;中引用函数：<br />JavaScript&nbsp;是一种弱类型的语言，可以用变量引用任何东西。因此如果声明了一个函数&nbsp;updatePage()，JavaScript&nbsp;也将该函数名看作是一个变量。换句话说，可用变量名&nbsp;updatePage&nbsp;在代码中引用函数。<br />需要特别注意的是该属性在代码中设置的位置&nbsp;——&nbsp;它是在调用&nbsp;send()&nbsp;之前&nbsp;设置的。发送请求之前必须设置该属性，这样服务器在回答完成请求之后才能查看该属性。<br />服务器完成了请求处理。服务器查看&nbsp;onreadystatechange&nbsp;属性确定要调用的方法。<br />回调和&nbsp;Ajax<br />将&nbsp;XMLHttpRequest&nbsp;对象的&nbsp;onreadystatechange&nbsp;属性设置为要运行的函数名。这样，当服务器处理完请求后就会自动调用该函数。<br /><br />服务器在完成请求之后会在&nbsp;XMLHttpRequest&nbsp;的&nbsp;onreadystatechange&nbsp;属性中查找要调用的方法。但还不完整。事实上，每当&nbsp;HTTP&nbsp;就绪状态改变时它都会调用该方法。<br />HTTP&nbsp;就绪状态表示请求的状态或情形。它用于确定该请求是否已经开始、是否得到了响应或者请求/响应模型是否已经完成。它还可以帮助确定读取服务器提供的响应文本或数据是否安全。在&nbsp;Ajax&nbsp;应用程序中需要了解五种就绪状态：<br />&#8226;0：请求没有发出（在调用&nbsp;open()&nbsp;之前）。&nbsp;<br />&#8226;1：请求已经建立但还没有发出（调用&nbsp;send()&nbsp;之前）。&nbsp;<br />&#8226;2：请求已经发出正在处理之中（这里通常可以从响应得到内容头部）。&nbsp;<br />&#8226;3：请求已经处理，响应中通常有部分数据可用，但是服务器还没有完成响应。&nbsp;<br />&#8226;4：响应已完成，可以访问服务器响应并使用它。&nbsp;<br />与大多数跨浏览器问题一样，这些就绪状态的使用也不尽一致。您也许期望任务就绪状态从&nbsp;0&nbsp;到&nbsp;1、2、3&nbsp;再到&nbsp;4，但实际上很少是这种情况。一些浏览器从不报告&nbsp;0&nbsp;或&nbsp;1&nbsp;而直接从&nbsp;2&nbsp;开始，然后是&nbsp;3&nbsp;和&nbsp;4。其他浏览器则报告所有的状态。还有一些则多次报告就绪状态&nbsp;1。在上一节中看到，服务器多次调用&nbsp;updatePage()，每次调用都会弹出警告框&nbsp;——&nbsp;可能和预期的不同！<br />对于&nbsp;Ajax&nbsp;编程，需要直接处理的惟一状态就是就绪状态&nbsp;4，它表示服务器响应已经完成，可以安全地使用响应数据了。基于此，回调方法中的第一行应该如&nbsp;清单&nbsp;13&nbsp;所示。<br />除了就绪状态外，还需要检查&nbsp;HTTP&nbsp;状态。我们期望的状态码是&nbsp;200，它表示一切顺利。如果就绪状态是&nbsp;4&nbsp;而且状态码是&nbsp;200，就可以处理服务器的数据了，而且这些数据应该就是要求的数据（而不是错误或者其他有问题的信息）。因此还要在回调方法中增加状态检查，<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />function&nbsp;updatePage()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(request.readyState&nbsp;==&nbsp;4)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(request.status&nbsp;==&nbsp;200)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("Server&nbsp;is&nbsp;done!");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp;(request.status&nbsp;==&nbsp;404)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("Request&nbsp;URL&nbsp;does&nbsp;not&nbsp;exist");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("Error:&nbsp;status&nbsp;code&nbsp;is&nbsp;"&nbsp;+&nbsp;request.status);<br />&nbsp;&nbsp;&nbsp;}<br /></div></div><br /><br />读取响应文本<br />返回的数据保存在&nbsp;XMLHttpRequest&nbsp;对象的&nbsp;responseText&nbsp;属性中。关于&nbsp;responseText&nbsp;中的文本内容，比如格式和长度，有意保持含糊。这样服务器就可以将文本设置成任何内容。比方说，一种脚本可能返回逗号分隔的值，另一种则使用管道符（即&nbsp;|&nbsp;字符）分隔的值，还有一种则返回长文本字符串。何去何从由服务器决定。<br />HTTP&nbsp;就绪状态<br />0：请求未初始化（还没有调用&nbsp;open()）。<br />&#8226;1：请求已经建立，但是还没有发送（还没有调用&nbsp;send()）。<br />&#8226;2：请求已发送，正在处理中（通常现在可以从响应中获取内容头）。<br />&#8226;3：请求在处理中；通常响应中已有部分数据可用了，但是服务器还没有完成响应的生成。<br />&#8226;4：响应已完成；您可以获取并使用服务器的响应了。<br />在多个&nbsp;JavaScript&nbsp;函数都使用相同的请求对象时，您需要检查就绪状态&nbsp;0&nbsp;来确保这个请求对象没有正在使用，这种机制会产生问题。由于&nbsp;readyState&nbsp;==&nbsp;4&nbsp;表示一个已完成的请求，因此您经常会发现那些目前没在使用的处于就绪状态的请求对象仍然被设置成了&nbsp;4&nbsp;——&nbsp;这是因为从服务器返回来的数据已经使用过了，但是从它们被设置为就绪状态之后就没有进行任何变化。有一个函数&nbsp;abort()&nbsp;会重新设置请求对象，但是这个函数却不是真正为了这个目的而使用的。如果您&nbsp;必须&nbsp;使用多个函数，最好是为每个函数都创建并使用一个函数，而不是在多个函数之间共享相同的对象。<br />查看就绪状态<br />&nbsp;&nbsp;&nbsp;function&nbsp;updatePage()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Output&nbsp;the&nbsp;current&nbsp;ready&nbsp;state<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("updatePage()&nbsp;called&nbsp;with&nbsp;ready&nbsp;state&nbsp;of&nbsp;"&nbsp;+&nbsp;request.readyState);<br />&nbsp;&nbsp;&nbsp;}<br />查看请求的响应文本<br />与就绪状态类似，responseText&nbsp;属性的值在整个请求的生命周期中也会发生变化。要查看这种变化，请使用如&nbsp;清单&nbsp;5&nbsp;所示的代码来测试请求的响应文本，以及它们的就绪状态。<br />清单&nbsp;5.&nbsp;测试&nbsp;responseText&nbsp;属性<br />&nbsp;&nbsp;&nbsp;function&nbsp;updatePage()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Output&nbsp;the&nbsp;current&nbsp;ready&nbsp;state<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("updatePage()&nbsp;called&nbsp;with&nbsp;ready&nbsp;state&nbsp;of&nbsp;"&nbsp;+&nbsp;request.readyState&nbsp;+<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"&nbsp;and&nbsp;a&nbsp;response&nbsp;text&nbsp;of&nbsp;'"&nbsp;+&nbsp;request.responseText&nbsp;+&nbsp;"'");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />深入了解&nbsp;HTTP&nbsp;状态代码<br />有了就绪状态和您在&nbsp;Ajax&nbsp;编程技术中学习到的服务器的响应，您就可以为&nbsp;Ajax&nbsp;应用程序添加另外一级复杂性了&nbsp;——&nbsp;这要使用&nbsp;HTTP&nbsp;状态代码。这些代码对于&nbsp;Ajax&nbsp;来说并没有什么新鲜。从&nbsp;Web&nbsp;出现以来，它们就已经存在了。在&nbsp;Web&nbsp;浏览器中您可能已经看到过几个状态代码：<br />&#8226;401：未经授权<br />&#8226;403：禁止<br />&#8226;404：没找到<br />它花费了最小的努力来确保服务器不但完成了一个请求，而且还返回了一个&nbsp;“一切良好”&nbsp;的状态代码。这个代码是&nbsp;"200"，它是通过&nbsp;XMLHttpRequest&nbsp;对象的&nbsp;status&nbsp;属性来报告的。为了确保服务器不但完成了一个请求，而且还报告了一个&nbsp;OK&nbsp;状态，请在您的回调函数中添加另外一个检查功能，如&nbsp;清单&nbsp;7&nbsp;所示。<br />清单&nbsp;7.&nbsp;检查有效状态代码<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&nbsp;&nbsp;&nbsp;function&nbsp;updatePage()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(request.readyState&nbsp;==&nbsp;4)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(request.status&nbsp;==&nbsp;200)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;response&nbsp;=&nbsp;request.responseText.split("|");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById("order").value&nbsp;=&nbsp;response[0];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById("address").innerHTML&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response[1].replace(/\n/g,&nbsp;"&lt;br&nbsp;/&gt;");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("status&nbsp;is&nbsp;"&nbsp;+&nbsp;request.status);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;}<br /></div></div><br />用户无法判断问题究竟是认证问题、没找到脚本（此处就是这种情况）、用户错误还是代码中有些地方产生了问题。添加一些简单的代码可以让这个错误更加具体。请参照&nbsp;清单&nbsp;8，它负责处理没找到的脚本或认证发生错误的情况，在出现这些错误时都会给出具体的消息。<br />清单&nbsp;8.&nbsp;检查有效状态代码<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&nbsp;&nbsp;&nbsp;function&nbsp;updatePage()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(request.readyState&nbsp;==&nbsp;4)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(request.status&nbsp;==&nbsp;200)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;response&nbsp;=&nbsp;request.responseText.split("|");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById("order").value&nbsp;=&nbsp;response[0];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById("address").innerHTML&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response[1].replace(/\n/g,&nbsp;"&lt;br&nbsp;/&gt;");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(request.status&nbsp;==&nbsp;404)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert&nbsp;("Requested&nbsp;URL&nbsp;is&nbsp;not&nbsp;found.");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(request.status&nbsp;==&nbsp;403)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("Access&nbsp;denied.");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("status&nbsp;is&nbsp;"&nbsp;+&nbsp;request.status);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;}<br /></div></div><br />其他请求类型<br />检查&nbsp;URL<br />您已经看到了当&nbsp;URL&nbsp;不存在时应该如何检查&nbsp;404&nbsp;错误。如果这变成一个常见的问题&nbsp;——&nbsp;可能是缺少了一个特定的脚本或&nbsp;servlet&nbsp;——&nbsp;那么您就可能会希望在生成完整的&nbsp;GET&nbsp;或&nbsp;POST&nbsp;请求之前来检查这个&nbsp;URL。要实现这种功能，生成一个&nbsp;HEAD&nbsp;请求，然后在回调函数中检查&nbsp;404&nbsp;错误；清单&nbsp;11&nbsp;给出了一个简单的回调函数。<br />清单&nbsp;11.&nbsp;检查某个&nbsp;URL&nbsp;是否存在<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&nbsp;&nbsp;&nbsp;function&nbsp;updatePage()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(request.readyState&nbsp;==&nbsp;4)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(request.status&nbsp;==&nbsp;200)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("URL&nbsp;exists");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(request.status&nbsp;==&nbsp;404)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("URL&nbsp;does&nbsp;not&nbsp;exist.");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("Status&nbsp;is:&nbsp;"&nbsp;+&nbsp;request.status);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;}<br /></div></div><br /><br /><br />]]>
      </summary>
      <category term="" label="AJAX" scheme="http://dev.mo.cn/cat_diary_2.html" />
   </entry>
   <entry>
      <title type="html">一段重用很高的ajax代码</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_59.html" />
      <updated>2008-6-25 3:33:23</updated>
      <published>2008-6-25 3:33:23</published>
      <id>http://dev.mo.cn/article_59.html</id>
      <summary type="html">
      <![CDATA[一段重用很高的ajax代码，可以套用<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;!DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN"&gt;<br />&lt;html&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;head&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;client.html&lt;/title&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;script&nbsp;language="JavaScript"&nbsp;type="text/javascript"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;xmlreq&nbsp;=&nbsp;false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;---------------初始化XMLHttpRequest--------------------<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;createXMLHttpRequest(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(window.XMLHttpRequest)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//不是ie浏览器<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlreq&nbsp;=&nbsp;new&nbsp;XMLHttpRequest();<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;else&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(window.ActiveXObject)&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;//IE<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;try&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;&nbsp;&nbsp;&nbsp;&nbsp;xmlreq&nbsp;=&nbsp;new&nbsp;ActiveXObject("Msxml12.XMLHTTP");<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;<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;catch&nbsp;(e1)&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;&nbsp;&nbsp;&nbsp;&nbsp;try&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;req&nbsp;=&nbsp;new&nbsp;ActiveXObject("Microsoft.XMLHTTP");<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;<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;catch&nbsp;(e2)&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;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Unable&nbsp;to&nbsp;create&nbsp;an&nbsp;XMLHttpRequest&nbsp;with&nbsp;ActiveX<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;}<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;}<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;<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;}<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //------------发送XMLHttpRequest请求-----------------<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //GET提交请求<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; function&nbsp;sendRequestGet(url){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; createXMLHttpRequest();<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xmlreq.open("get",url,true);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xmlreq.onreadystatechange&nbsp;=&nbsp;processResponse;//响应请求函数<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xmlreq.send(null);<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; //POST提交请求<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; function&nbsp;sendRequestPost(url,param){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; createXMLHttpRequest();<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xmlreq.open("post",url,true);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xmlreq.onreadystatechange&nbsp;=&nbsp;processResponse;//响应请求的函数<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xmlreq.setRequestHeader("Content-Type",&nbsp;"application/x-www-form-urlencoded");<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xmlreq.send(param);<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; function&nbsp;sendRequest(url,param,method){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(method){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;(method.toLowerCase("get"))&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;sendRequestGet(url&nbsp;+&nbsp;"?"&nbsp;+&nbsp;param);<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;else&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;if&nbsp;(method.toLowerCase("post"))&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;&nbsp;&nbsp;&nbsp;&nbsp;sendRequestPost(url,&nbsp;param);<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;}<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; &nbsp; &nbsp; &nbsp; &nbsp; alert("method&nbsp;is&nbsp;null");<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; //---------响应请求的函数------------<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; function&nbsp;processResponse(){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(xmlreq.readyState&nbsp;==&nbsp;4){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(xmlreq.status&nbsp;==&nbsp;200){<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; alert(xmlreq.responseText);<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; alert("发送失败！")<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; }<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; //事件响应<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; function&nbsp;submitRequest(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;form1&nbsp;=&nbsp;document.getElementById("form1");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;url&nbsp;=&nbsp;form1.action;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;username&nbsp;=&nbsp;form1.username.value;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;password&nbsp;=&nbsp;form1.password.value;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;method&nbsp;=&nbsp;form1.method;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;param&nbsp;=&nbsp;"username="&nbsp;+&nbsp;username&nbsp;+&nbsp;"&password="&nbsp;+&nbsp;password;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sendRequest(url,&nbsp;param,&nbsp;method);<br />&nbsp;&nbsp;&nbsp;&nbsp;&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&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;form&nbsp;action="server.jsp"&nbsp;method="post"&nbsp;name="form1"&nbsp;id="form1"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用户名:&lt;input&nbsp;name="username"&nbsp;id="username"&nbsp;type="text"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;br&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;密&nbsp;&nbsp;码:&lt;input&nbsp;name="password"&nbsp;id="password"&nbsp;type="text"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;br&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input&nbsp;type="button"&nbsp;value="发送信息"&nbsp;onclick="submitRequest()"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/form&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/body&gt;<br />&lt;/html&gt;<br /></div></div><br /><br />]]>
      </summary>
      <category term="" label="AJAX" scheme="http://dev.mo.cn/cat_diary_2.html" />
   </entry>
   <entry>
      <title type="html">XMLHTTP获取访问者地理位置</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_58.html" />
      <updated>2008-6-25 0:27:21</updated>
      <published>2008-6-25 0:27:21</published>
      <id>http://dev.mo.cn/article_58.html</id>
      <summary type="html">
      <![CDATA[利用XMLHTTP组件，调用纯真的IP查询(也可以调用其他的,代码就要修改了)<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;%<br />function&nbsp;GetResStr(URL,code)<br />err.clear<br />dim&nbsp;ResBody,ResStr,PageCode,ReturnStr<br />Set&nbsp;Http=server.createobject("Microsoft.XMLHTTP")&nbsp;<br />Http.open&nbsp;"GET",URL,False&nbsp;<br />Http.Send()&nbsp;<br />If&nbsp;Http.Readystate&nbsp;=4&nbsp;Then&nbsp;<br />&nbsp;&nbsp;If&nbsp;Http.status=200&nbsp;Then<br />&nbsp;&nbsp;&nbsp;&nbsp;ResBody=http.responseBody<br />&nbsp;&nbsp;&nbsp;&nbsp;ReturnStr=BytesToBstr(http.responseBody,code)<br />&nbsp;&nbsp;&nbsp;&nbsp;GetResStr=ReturnStr<br />&nbsp;&nbsp;End&nbsp;If&nbsp;<br />End&nbsp;If&nbsp;<br />End&nbsp;Function<br /><br />'函数名:BytesToBstr<br />'作用:转换二进制数据为字符<br />'参数:Body-二进制数据,Cset-文本编码方式<br />Function&nbsp;BytesToBstr(Body,Cset)&nbsp;<br />&nbsp;&nbsp;Dim&nbsp;Objstream&nbsp;<br />&nbsp;&nbsp;Set&nbsp;Objstream&nbsp;=&nbsp;Server.CreateObject("adodb.stream")&nbsp;<br />&nbsp;&nbsp;objstream.Type&nbsp;=&nbsp;1&nbsp;<br />&nbsp;&nbsp;objstream.Mode&nbsp;=3&nbsp;<br />&nbsp;&nbsp;objstream.Open&nbsp;<br />&nbsp;&nbsp;objstream.Write&nbsp;body&nbsp;<br />&nbsp;&nbsp;objstream.Position&nbsp;=&nbsp;0&nbsp;<br />&nbsp;&nbsp;objstream.Type&nbsp;=&nbsp;2&nbsp;<br />&nbsp;&nbsp;objstream.Charset&nbsp;=Cset&nbsp;<br />&nbsp;&nbsp;BytesToBstr&nbsp;=&nbsp;objstream.ReadText&nbsp;<br />&nbsp;&nbsp;objstream.Close&nbsp;<br />&nbsp;&nbsp;set&nbsp;objstream&nbsp;=&nbsp;nothing&nbsp;<br />End&nbsp;Function<br /><br />dim&nbsp;reg,vUrl,VBody,code,time1,time2,title<br />vUrl="http://www.cz88.net/ip/ipcheck.aspx?ip="&request.servervariables("REMOTE_ADDR")<br />TempStr=GetResStr(vUrl,"gb2312")<br />p1=instr(TempStr,"""")+1<br />p2=InStrRev(TempStr,"""")<br />Add=mid(TempStr,p1,p2-p1)<br /><br />response.write&nbsp;"您的IP为:"&request.servervariables("REMOTE_ADDR")&"&lt;br&nbsp;/&gt;"<br />response.write&nbsp;"您的位置:"&Add&"&lt;br&nbsp;/&gt;"<br />%&gt;&nbsp;<br /></div></div><br /><br />]]>
      </summary>
      <category term="" label="AJAX" scheme="http://dev.mo.cn/cat_diary_2.html" />
   </entry>
   <entry>
      <title type="html">global.asa文件解惑</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_56.html" />
      <updated>2008-6-24 7:08:20</updated>
      <published>2008-6-24 7:08:20</published>
      <id>http://dev.mo.cn/article_56.html</id>
      <summary type="html">
      <![CDATA[这今天留意了不少帖子，其中这两天在讨论一个问题，关于限制登录技术的处理。也有很多朋友发表了意见，大致上就是用一个online字段来分辨，此不在多说这个。关键是有人提出，当用户未正常注销的情况下，如何处理online字段的问题。针对这个问题，我补充一个小知识（可能许多初学asp甚至已经接触了相当时间的asp人员都会忽略的东西）－asp网站全局共享文件global.asa。<br /><br />再我回复的某个帖子中，有人误认为，这是一个表（这也难怪，后缀是asa……）。其实，这个文件是整个asp网站所共享拥有的文件，也可以所成是服务器检查整个asp网站配置的文件。首先，这个文件需放在网站根目录下，以gloabl.asa命名。<br />那么，这个文件到底有什么作用呢。这个文件里面一共有四个过程，而且只能有这么四个过程，分别是<br />&lt;script&nbsp;language="VBScript"&nbsp;runat="Server"&gt;<br /><br />Sub&nbsp;Application_OnStart<br />'TODO&nbsp;sth.<br />End&nbsp;Sub<br /><br />Sub&nbsp;Application_OnEnd<br />'TODO&nbsp;sth.<br />End&nbsp;Sub<br /><br />Sub&nbsp;Session_OnStart<br />'TODO&nbsp;sth.<br />End&nbsp;Sub<br /><br />Sub&nbsp;Sessin_OnEnd<br />'TODO&nbsp;sth.<br />End&nbsp;Sub<br />&lt;/script&gt;<br /><br />那么这四个过程定义了有什么用呢，如下我们描述四个服务器状态<br />1、服务器启动初次运行该asp网站（开启服务器会话状态）<br />2、某用户打开浏览器，访问该asp网站（开启用户会话状态）<br />3、某用户关闭浏览器，结束一次对整个asp网站的浏览（关闭用户会话状态）<br />4、服务器关闭或结束该asp网站（关闭服务器会话状态）<br /><br />这服务器状态所触发的事件就分别对应这四个过程<br />1、Application_OnStart<br />2、Session_OnStart<br />3、Session_OnEnd<br />4、Application_OnEnd<br /><br />当服务器状态触发这四个过程的某一个过程时，就可以在这个过程里编写相应的代码，来实现一些特殊功能，举例<br />1、有些网站，当你第一次访问时，并不允许你访问除index.htm以外的页面，这个如何来做的呢？当用户第一次访问该网站时，触发Session_OnStart事件。在Session_OnStart过程里判断，当前用户浏览的网址是否为index.htm，如不是则跳转自index.htm<br />2、大家对Session应该很熟悉了，但我相信，极少人会去注意另一个会话变量，application。对于这两个会话级变量，我希望接触asp的朋友都能认真的去了解他们的特性（session是用户级会话变量，application是服务器级会话变量）。对于这些会话变量，我们都可以在四个过程中进行操作。比如，在Session_OnStart过程中，把Session("login")赋值为false等等，在Session_OnEnd过程中，显式释放Session变量，即Session.Abandon()。<br />3、最后一个例子回到最开始的主题，如何处理用户非正常注销的问题。针对Session_OnEnd事件的特性，即只要在Session_OnEnd过程里，处理用户离线（或退出的状态就可以了）。针对Session两个的事件，以及application的服务器变量特性，甚至可以不必用到数据库就能判断用户是否在线或离线，大致思路如下：<br />（1）用户初次访问网站时，分配一个ID号，在Session_OnStart事件中，设置Application(该用户ID号)=false，表示未登录状态。<br />（2）当用户登录时，在程序中置Application(该用户ID号)=true，表示该用户已经登录<br />（3）他人如果需要检查某人是否是在线状态，只要查看Application(该用户ID号)是否为true（为什么可以这样检查？因为application是服务器级变量，它保存在服务器端的内存中，是对所有用户可见的，即可理解成全局变量）<br />（4）当用户退出时，在程序中置Application(该用户ID号)=false<br />（5）当用户关闭浏览器，结束一次会话状态时，在Session_OnEnd过程中，再次置Application(该用户ID号)=false<br /><br />对于这四个事件过程，以及两个会话变量，最后还是希望各位朋友能够仔细了解他们的特性，从中你会获得许多知识，并能想到解决一些本无法处理的技术问题<br /><br /><br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">对象不支持此属性或方法:'Response.CharSet'</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_54.html" />
      <updated>2008-6-22 11:51:26</updated>
      <published>2008-6-22 11:51:26</published>
      <id>http://dev.mo.cn/article_54.html</id>
      <summary type="html">
      <![CDATA[给客户开发的一个web系统，本来计划是在IIS下运行，无奈客户那边的电脑操作系统IIS无论怎样都安装不了，总不能要求客户为了这个web系统重新安装操作系统吧？所以想到了NetBox。&nbsp;&nbsp;<br /><br /><br /><br />开发的时候都是在IIS下进行调试，然后用NetBox运行，基本上一切正常，客户使用了一段时间后，提出增加一个新的功能，于是用ajax增加了一个新功能，NetBox下运行出错，&nbsp;&nbsp;<br /><br />错误提示：&nbsp;&nbsp;<br /><br />运行时错误&nbsp;'800a01b6'&nbsp;&nbsp;&nbsp;<br /><br />对象不支持此属性或方法:&nbsp;'Response.CharSet'&nbsp;&nbsp;&nbsp;<br /><br />---------------------------------------------------------------------&nbsp;&nbsp;<br /><br />(百度一下，还有很多人遇到同样的错误)&nbsp;&nbsp;<br /><br />Microsoft&nbsp;VBScript&nbsp;runtime&nbsp;error&nbsp;'800a01b6'&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />Object&nbsp;doesn't&nbsp;support&nbsp;this&nbsp;property&nbsp;or&nbsp;method:&nbsp;'Response.Charset'&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /><br /><br />检查出错代码：&nbsp;&nbsp;<br /><br />Response.CharSet&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp;"GB2312"&nbsp;&nbsp;&nbsp;<br /><br /><br /><br />这行代码主要是为了解决ajax用get获得数据时，中文乱码的问题。&nbsp;&nbsp;<br /><br />删除这行代码后netbox正常运行，但是ajax返回的中文数据成了乱码。&nbsp;<br /><br />说明&nbsp;NetBox不支持&nbsp;Response.CharSet&nbsp;。&nbsp;<br /><br /><br /><br />打开netbox的使用手册，依次展开：&nbsp;<br /><br />对象参考&nbsp;→&nbsp;Response&nbsp;对象&nbsp;→&nbsp;Response&nbsp;方法&nbsp;<br /><br />AddHeader&nbsp;方法&nbsp;&nbsp;<br /><br />AddHeader&nbsp;方法用指定的值添加&nbsp;HTML&nbsp;标题。该方法常常向响应添加新的&nbsp;HTTP&nbsp;标题&nbsp;&nbsp;<br /><br />语法&nbsp;&nbsp;<br /><br />Response.AddHeader&nbsp;name,&nbsp;value&nbsp;&nbsp;<br /><br />参数&nbsp;&nbsp;<br /><br />name&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;新的标题变量的名称&nbsp;&nbsp;<br /><br />value&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;存储在新的标题变量中的初始值&nbsp;&nbsp;&nbsp;<br /><br />注释&nbsp;&nbsp;<br /><br />为避免命名不明确，name&nbsp;中不能包含任何下划线字符&nbsp;(_)。ServerVariables&nbsp;集合将标题中的下划线字符解释为反斜杠。例如，下面的脚本使服务器查找一个名为&nbsp;MY-HEADER&nbsp;的标题名。&nbsp;&nbsp;<br /><br /><br /><br />&lt;%&nbsp;Request.ServerVariables("HTTP_MY_HEADER")&nbsp;%&gt;&nbsp;&nbsp;<br /><br />示例&nbsp;&nbsp;<br /><br />下面这个示例使用&nbsp;AddHeader&nbsp;方法要求客户端使用&nbsp;BASIC&nbsp;验证。&nbsp;&nbsp;<br /><br /><br /><br />&lt;%&nbsp;Response.Addheader&nbsp;"WWW-Authenticate",&nbsp;"BASIC"&nbsp;%&gt;&nbsp;&nbsp;<br /><br />注意&nbsp;前面的脚本仅通知客户端浏览器使用哪个验证。若您在&nbsp;Web&nbsp;应用程序中使用该脚本，则一定要启用&nbsp;Web&nbsp;服务器的&nbsp;BASIC&nbsp;验证。&nbsp;&nbsp;<br /><br /><br /><br />于是将&nbsp;&nbsp;<br /><br />Response.CharSet&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp;"GB2312"&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />替换成：&nbsp;<br /><br />Response.Addheader&nbsp;"Content-Type","text/html;&nbsp;charset=gb2312"&nbsp;<br /><br /><br /><br />NetBox环境下ajax用get获取数据,中文乱码的问题解决！]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">GHOST版本安装IIS后出现500服务器错误的解决方法</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_53.html" />
      <updated>2008-6-18 17:52:23</updated>
      <published>2008-6-18 17:52:23</published>
      <id>http://dev.mo.cn/article_53.html</id>
      <summary type="html">
      <![CDATA[GHOST版本停止了许多服务。可以按以下方法来搞定：&nbsp;<br />1，进入管理工具-&gt;[服务]管理器&nbsp;&nbsp;<br />找到Network&nbsp;DDE&nbsp;DSDM&nbsp;启动类型改成自动&nbsp;然后启动它&nbsp;<br />找到Network&nbsp;DDE&nbsp;启动类型改成自动&nbsp;然后启动它&nbsp;<br />2，在命令提示符里输入&nbsp;<br />msdtc&nbsp;-resetlog&nbsp;<br />然后启动Distributed&nbsp;Transaction&nbsp;Coordinator这个服务&nbsp;<br />&nbsp;3，启动“iis&nbsp;Out-Of-Process&nbsp;Pooled&nbsp;Applications”&nbsp;<br />“组件服务”-&gt;“计算机”-&gt;“我的电脑”-&gt;“COM+应用程序”-&gt;“iis&nbsp;Out-Of-Process&nbsp;Pooled&nbsp;<br />&nbsp;Applications”。&nbsp;<br />&nbsp;"COM+&nbsp;应用程序中"找不到此项，可以通过下述方法重建：&nbsp;<br />a.&nbsp;开始-&gt;运行-&gt;CMD，打开命令提示窗口，然后使用以下命令切换目录：&nbsp;<br />b.&nbsp;cd&nbsp;%windir%/system32/inetsrv&nbsp;<br />c.&nbsp;运行以下命令：&nbsp;<br />rundll32&nbsp;wamreg.dll,&nbsp;CreateIISPackage&nbsp;<br />注意：必须准确键入"CreateIISPackage"；它区分大小写。&nbsp;<br />regsvr32&nbsp;asptxn.dll&nbsp;<br />d.&nbsp;关闭并重新打开"组件服务"。您应看到已经重新创建的所有这三个&nbsp;IIS&nbsp;COM+&nbsp;应用程序。&nbsp;<br />e.&nbsp;从命令行运行&nbsp;IISRESET，并对先前未正确加载的任意&nbsp;ASP&nbsp;页进行测试。&nbsp;<br /><br /><br />]]>
      </summary>
      <category term="" label="IIS配置相关" scheme="http://dev.mo.cn/cat_diary_7.html" />
   </entry>
   <entry>
      <title type="html">SQL操作全集</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_50.html" />
      <updated>2008-6-12 23:12:57</updated>
      <published>2008-6-12 23:12:57</published>
      <id>http://dev.mo.cn/article_50.html</id>
      <summary type="html">
      <![CDATA[SQL操作全集&nbsp;<br /><br />下列语句部分是Mssql语句，不可以在access中使用。&nbsp;<br /><br />SQL分类：&nbsp;<br />DDL—数据定义语言(CREATE，ALTER，DROP，DECLARE)&nbsp;<br />DML—数据操纵语言(SELECT，DELETE，UPDATE，INSERT)&nbsp;<br />DCL—数据控制语言(GRANT，REVOKE，COMMIT，ROLLBACK)&nbsp;<br /><br />首先,简要介绍基础语句：&nbsp;<br />1、说明：创建数据库&nbsp;<br />CREATE&nbsp;DATABASE&nbsp;database-name&nbsp;<br />2、说明：删除数据库&nbsp;<br />drop&nbsp;database&nbsp;dbname&nbsp;<br />3、说明：备份sql&nbsp;server&nbsp;<br />---&nbsp;创建&nbsp;备份数据的&nbsp;device&nbsp;<br />USE&nbsp;master&nbsp;<br />EXEC&nbsp;sp_addumpdevice&nbsp;'disk',&nbsp;'testBack',&nbsp;'c:\mssql7backup\MyNwind_1.dat'&nbsp;<br />---&nbsp;开始&nbsp;备份&nbsp;<br />BACKUP&nbsp;DATABASE&nbsp;pubs&nbsp;TO&nbsp;testBack&nbsp;<br />4、说明：创建新表&nbsp;<br />create&nbsp;table&nbsp;tabname(col1&nbsp;type1&nbsp;[not&nbsp;null]&nbsp;[primary&nbsp;key],col2&nbsp;type2&nbsp;[not&nbsp;null],..)&nbsp;<br />根据已有的表创建新表：&nbsp;<br />A：create&nbsp;table&nbsp;tab_new&nbsp;like&nbsp;tab_old&nbsp;(使用旧表创建新表)&nbsp;<br />B：create&nbsp;table&nbsp;tab_new&nbsp;as&nbsp;select&nbsp;col1,col2…&nbsp;from&nbsp;tab_old&nbsp;definition&nbsp;only&nbsp;<br />5、说明：删除新表drop&nbsp;table&nbsp;tabname&nbsp;<br />6、说明：增加一个列&nbsp;<br />Alter&nbsp;table&nbsp;tabname&nbsp;add&nbsp;column&nbsp;col&nbsp;type&nbsp;<br />注：列增加后将不能删除。DB2中列加上后数据类型也不能改变，唯一能改变的是增加varchar类型的长度。&nbsp;<br />7、说明：添加主键：&nbsp;Alter&nbsp;table&nbsp;tabname&nbsp;add&nbsp;primary&nbsp;key(col)&nbsp;<br />说明：删除主键：&nbsp;Alter&nbsp;table&nbsp;tabname&nbsp;drop&nbsp;primary&nbsp;key(col)&nbsp;<br />8、说明：创建索引：create&nbsp;[unique]&nbsp;index&nbsp;idxname&nbsp;on&nbsp;tabname(col….)&nbsp;<br />删除索引：drop&nbsp;index&nbsp;idxname&nbsp;<br />注：索引是不可更改的，想更改必须删除重新建。&nbsp;<br />9、说明：创建视图：create&nbsp;view&nbsp;viewname&nbsp;as&nbsp;select&nbsp;statement&nbsp;<br />删除视图：drop&nbsp;view&nbsp;viewname&nbsp;<br />10、说明：几个简单的基本的sql语句&nbsp;<br />选择：select&nbsp;*&nbsp;from&nbsp;table1&nbsp;where&nbsp;范围&nbsp;<br />插入：insert&nbsp;into&nbsp;table1(field1,field2)&nbsp;values(value1,value2)&nbsp;<br />删除：delete&nbsp;from&nbsp;table1&nbsp;where&nbsp;范围&nbsp;<br />更新：update&nbsp;table1&nbsp;set&nbsp;field1=value1&nbsp;where&nbsp;范围&nbsp;<br />查找：select&nbsp;*&nbsp;from&nbsp;table1&nbsp;where&nbsp;field1&nbsp;like&nbsp;’%value1%’&nbsp;---like的语法很精妙，查资料!&nbsp;<br />排序：select&nbsp;*&nbsp;from&nbsp;table1&nbsp;order&nbsp;by&nbsp;field1,field2&nbsp;[desc]&nbsp;<br />总数：select&nbsp;count&nbsp;*&nbsp;as&nbsp;totalcount&nbsp;from&nbsp;table1&nbsp;<br />求和：select&nbsp;sum(field1)&nbsp;as&nbsp;sumvalue&nbsp;from&nbsp;table1&nbsp;<br />平均：select&nbsp;avg(field1)&nbsp;as&nbsp;avgvalue&nbsp;from&nbsp;table1&nbsp;<br />最大：select&nbsp;max(field1)&nbsp;as&nbsp;maxvalue&nbsp;from&nbsp;table1&nbsp;<br />最小：select&nbsp;min(field1)&nbsp;as&nbsp;minvalue&nbsp;from&nbsp;table1&nbsp;<br />11、说明：几个高级查询运算词&nbsp;<br />A：&nbsp;UNION&nbsp;运算符&nbsp;<br />UNION&nbsp;运算符通过组合其他两个结果表（例如&nbsp;TABLE1&nbsp;和&nbsp;TABLE2）并消去表中任何重复行而派生出一个结果表。当&nbsp;ALL&nbsp;随&nbsp;UNION&nbsp;一起使用时（即&nbsp;UNION&nbsp;ALL），不消除重复行。两种情况下，派生表的每一行不是来自&nbsp;TABLE1&nbsp;就是来自&nbsp;TABLE2。&nbsp;<br />B：&nbsp;EXCEPT&nbsp;运算符&nbsp;<br />EXCEPT&nbsp;运算符通过包括所有在&nbsp;TABLE1&nbsp;中但不在&nbsp;TABLE2&nbsp;中的行并消除所有重复行而派生出一个结果表。当&nbsp;ALL&nbsp;随&nbsp;EXCEPT&nbsp;一起使用时&nbsp;(EXCEPT&nbsp;ALL)，不消除重复行。&nbsp;<br />C：&nbsp;INTERSECT&nbsp;运算符&nbsp;<br />INTERSECT&nbsp;运算符通过只包括&nbsp;TABLE1&nbsp;和&nbsp;TABLE2&nbsp;中都有的行并消除所有重复行而派生出一个结果表。当&nbsp;ALL&nbsp;随&nbsp;INTERSECT&nbsp;一起使用时&nbsp;(INTERSECT&nbsp;ALL)，不消除重复行。&nbsp;<br />注：使用运算词的几个查询结果行必须是一致的。&nbsp;<br />12、说明：使用外连接&nbsp;<br />A、left&nbsp;outer&nbsp;join：&nbsp;<br />左外连接（左连接）：结果集几包括连接表的匹配行，也包括左连接表的所有行。&nbsp;<br />SQL:&nbsp;select&nbsp;a.a,&nbsp;a.b,&nbsp;a.c,&nbsp;b.c,&nbsp;b.d,&nbsp;b.f&nbsp;from&nbsp;a&nbsp;LEFT&nbsp;OUT&nbsp;JOIN&nbsp;b&nbsp;ON&nbsp;a.a&nbsp;=&nbsp;b.c&nbsp;<br />B：right&nbsp;outer&nbsp;join:&nbsp;<br />右外连接(右连接)：结果集既包括连接表的匹配连接行，也包括右连接表的所有行。&nbsp;<br />C：full&nbsp;outer&nbsp;join：&nbsp;<br />全外连接：不仅包括符号连接表的匹配行，还包括两个连接表中的所有记录。&nbsp;<br /><br />其次，大家来看一些不错的sql语句&nbsp;<br />1、说明：复制表(只复制结构,源表名：a&nbsp;新表名：b)&nbsp;(Access可用)&nbsp;<br />法一：select&nbsp;*&nbsp;into&nbsp;b&nbsp;from&nbsp;a&nbsp;where&nbsp;1&nbsp;&lt;&gt;1&nbsp;<br />法二：select&nbsp;top&nbsp;0&nbsp;*&nbsp;into&nbsp;b&nbsp;from&nbsp;a&nbsp;<br /><br />2、说明：拷贝表(拷贝数据,源表名：a&nbsp;目标表名：b)&nbsp;(Access可用)&nbsp;<br />insert&nbsp;into&nbsp;b(a,&nbsp;b,&nbsp;c)&nbsp;select&nbsp;d,e,f&nbsp;from&nbsp;b;&nbsp;<br /><br />3、说明：跨数据库之间表的拷贝(具体数据使用绝对路径)&nbsp;(Access可用)&nbsp;<br />insert&nbsp;into&nbsp;b(a,&nbsp;b,&nbsp;c)&nbsp;select&nbsp;d,e,f&nbsp;from&nbsp;b&nbsp;in&nbsp;‘具体数据库’&nbsp;where&nbsp;条件&nbsp;<br />例子：..from&nbsp;b&nbsp;in&nbsp;'"&Server.MapPath(".")&"\data.mdb"&nbsp;&"'&nbsp;where..&nbsp;<br /><br />4、说明：子查询(表名1：a&nbsp;表名2：b)&nbsp;<br />select&nbsp;a,b,c&nbsp;from&nbsp;a&nbsp;where&nbsp;a&nbsp;IN&nbsp;(select&nbsp;d&nbsp;from&nbsp;b&nbsp;)&nbsp;或者:&nbsp;select&nbsp;a,b,c&nbsp;from&nbsp;a&nbsp;where&nbsp;a&nbsp;IN&nbsp;(1,2,3)&nbsp;<br /><br />5、说明：显示文章、提交人和最后回复时间&nbsp;<br />select&nbsp;a.title,a.username,b.adddate&nbsp;from&nbsp;table&nbsp;a,(select&nbsp;max(adddate)&nbsp;adddate&nbsp;from&nbsp;table&nbsp;where&nbsp;table.title=a.title)&nbsp;b&nbsp;<br /><br />6、说明：外连接查询(表名1：a&nbsp;表名2：b)&nbsp;<br />select&nbsp;a.a,&nbsp;a.b,&nbsp;a.c,&nbsp;b.c,&nbsp;b.d,&nbsp;b.f&nbsp;from&nbsp;a&nbsp;LEFT&nbsp;OUT&nbsp;JOIN&nbsp;b&nbsp;ON&nbsp;a.a&nbsp;=&nbsp;b.c&nbsp;<br /><br />7、说明：在线视图查询(表名1：a&nbsp;)&nbsp;<br />select&nbsp;*&nbsp;from&nbsp;(SELECT&nbsp;a,b,c&nbsp;FROM&nbsp;a)&nbsp;T&nbsp;where&nbsp;t.a&nbsp;&gt;&nbsp;1;&nbsp;<br /><br />8、说明：between的用法,between限制查询数据范围时包括了边界值,not&nbsp;between不包括&nbsp;<br />select&nbsp;*&nbsp;from&nbsp;table1&nbsp;where&nbsp;time&nbsp;between&nbsp;time1&nbsp;and&nbsp;time2&nbsp;<br />select&nbsp;a,b,c,&nbsp;from&nbsp;table1&nbsp;where&nbsp;a&nbsp;not&nbsp;between&nbsp;数值1&nbsp;and&nbsp;数值2&nbsp;<br /><br />9、说明：in&nbsp;的使用方法&nbsp;<br />select&nbsp;*&nbsp;from&nbsp;table1&nbsp;where&nbsp;a&nbsp;[not]&nbsp;in&nbsp;(‘值1’,’值2’,’值4’,’值6’)&nbsp;<br /><br />10、说明：两张关联表，删除主表中已经在副表中没有的信息&nbsp;<br />delete&nbsp;from&nbsp;table1&nbsp;where&nbsp;not&nbsp;exists&nbsp;(&nbsp;select&nbsp;*&nbsp;from&nbsp;table2&nbsp;where&nbsp;table1.field1=table2.field1&nbsp;)&nbsp;<br /><br />11、说明：四表联查问题：&nbsp;<br />select&nbsp;*&nbsp;from&nbsp;a&nbsp;left&nbsp;inner&nbsp;join&nbsp;b&nbsp;on&nbsp;a.a=b.b&nbsp;right&nbsp;inner&nbsp;join&nbsp;c&nbsp;on&nbsp;a.a=c.c&nbsp;inner&nbsp;join&nbsp;d&nbsp;on&nbsp;a.a=d.d&nbsp;where&nbsp;.....&nbsp;<br /><br />12、说明：日程安排提前五分钟提醒&nbsp;<br />SQL:&nbsp;select&nbsp;*&nbsp;from&nbsp;日程安排&nbsp;where&nbsp;datediff('minute',f开始时间,getdate())&gt;5&nbsp;<br /><br />13、说明：一条sql&nbsp;语句搞定数据库分页&nbsp;<br />select&nbsp;top&nbsp;10&nbsp;b.*&nbsp;from&nbsp;(select&nbsp;top&nbsp;20&nbsp;主键字段,排序字段&nbsp;from&nbsp;表名&nbsp;order&nbsp;by&nbsp;排序字段&nbsp;desc)&nbsp;a,表名&nbsp;b&nbsp;where&nbsp;b.主键字段&nbsp;=&nbsp;a.主键字段&nbsp;order&nbsp;by&nbsp;a.排序字段&nbsp;<br /><br />14、说明：前10条记录&nbsp;<br />select&nbsp;top&nbsp;10&nbsp;*&nbsp;form&nbsp;table1&nbsp;where&nbsp;范围&nbsp;<br /><br />15、说明：选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)&nbsp;<br />select&nbsp;a,b,c&nbsp;from&nbsp;tablename&nbsp;ta&nbsp;where&nbsp;a=(select&nbsp;max(a)&nbsp;from&nbsp;tablename&nbsp;tb&nbsp;where&nbsp;tb.b=ta.b)&nbsp;<br /><br />16、说明：包括所有在&nbsp;TableA&nbsp;中但不在&nbsp;TableB和TableC&nbsp;中的行并消除所有重复行而派生出一个结果表&nbsp;<br />(select&nbsp;a&nbsp;from&nbsp;tableA&nbsp;)&nbsp;except&nbsp;(select&nbsp;a&nbsp;from&nbsp;tableB)&nbsp;except&nbsp;(select&nbsp;a&nbsp;from&nbsp;tableC)&nbsp;<br /><br />17、说明：随机取出10条数据&nbsp;<br />select&nbsp;top&nbsp;10&nbsp;*&nbsp;from&nbsp;tablename&nbsp;order&nbsp;by&nbsp;newid()&nbsp;<br /><br />18、说明：随机选择记录&nbsp;<br />select&nbsp;newid()&nbsp;<br /><br />19、说明：删除重复记录&nbsp;<br />Delete&nbsp;from&nbsp;tablename&nbsp;where&nbsp;id&nbsp;not&nbsp;in&nbsp;(select&nbsp;max(id)&nbsp;from&nbsp;tablename&nbsp;group&nbsp;by&nbsp;col1,col2,...)&nbsp;<br /><br />20、说明：列出数据库里所有的表名&nbsp;<br />select&nbsp;name&nbsp;from&nbsp;sysobjects&nbsp;where&nbsp;type='U'&nbsp;<br /><br />21、说明：列出表里的所有的&nbsp;<br />select&nbsp;name&nbsp;from&nbsp;syscolumns&nbsp;where&nbsp;id=object_id('TableName')&nbsp;<br /><br />22、说明：列示type、vender、pcs字段，以type字段排列，case可以方便地实现多重选择，类似select&nbsp;中的case。&nbsp;<br />select&nbsp;type,sum(case&nbsp;vender&nbsp;when&nbsp;'A'&nbsp;then&nbsp;pcs&nbsp;else&nbsp;0&nbsp;end),sum(case&nbsp;vender&nbsp;when&nbsp;'C'&nbsp;then&nbsp;pcs&nbsp;else&nbsp;0&nbsp;end),sum(case&nbsp;vender&nbsp;when&nbsp;'B'&nbsp;then&nbsp;pcs&nbsp;else&nbsp;0&nbsp;end)&nbsp;FROM&nbsp;tablename&nbsp;group&nbsp;by&nbsp;type&nbsp;<br />显示结果：&nbsp;<br />type&nbsp;vender&nbsp;pcs&nbsp;<br />电脑&nbsp;A&nbsp;1&nbsp;<br />电脑&nbsp;A&nbsp;1&nbsp;<br />光盘&nbsp;B&nbsp;2&nbsp;<br />光盘&nbsp;A&nbsp;2&nbsp;<br />手机&nbsp;B&nbsp;3&nbsp;<br />手机&nbsp;C&nbsp;3&nbsp;<br /><br />23、说明：初始化表table1&nbsp;<br />TRUNCATE&nbsp;TABLE&nbsp;table1&nbsp;<br /><br />24、说明：选择从10到15的记录&nbsp;<br />select&nbsp;top&nbsp;5&nbsp;*&nbsp;from&nbsp;(select&nbsp;top&nbsp;15&nbsp;*&nbsp;from&nbsp;table&nbsp;order&nbsp;by&nbsp;id&nbsp;asc)&nbsp;table_别名&nbsp;order&nbsp;by&nbsp;id&nbsp;desc&nbsp;<br />　　&nbsp;<br />随机选择数据库记录的方法（使用Randomize函数，通过SQL语句实现）&nbsp;<br />　　对存储在数据库中的数据来说，随机数特性能给出上面的效果，但它们可能太慢了些。你不能要求ASP“找个随机数”然后打印出来。实际上常见的解决方案是建立如下所示的循环：&nbsp;<br />Randomize&nbsp;<br />RNumber&nbsp;=&nbsp;Int(Rnd*499)&nbsp;+1&nbsp;<br />　&nbsp;<br />While&nbsp;Not&nbsp;objRec.EOF&nbsp;<br />If&nbsp;objRec("ID")&nbsp;=&nbsp;RNumber&nbsp;THEN&nbsp;<br />...&nbsp;这里是执行脚本&nbsp;...&nbsp;<br />end&nbsp;if&nbsp;<br />objRec.MoveNext&nbsp;<br />Wend&nbsp;<br />　&nbsp;<br />　　这很容易理解。首先，你取出1到500范围之内的一个随机数（假设500就是数据库内记录的总数）。然后，你遍历每一记录来测试ID&nbsp;的值、检查其是否匹配RNumber。满足条件的话就执行由THEN&nbsp;关键字开始的那一块代码。假如你的RNumber&nbsp;等于495，那么要循环一遍数据库花的时间可就长了。虽然500这个数字看起来大了些，但相比更为稳固的企业解决方案这还是个小型数据库了，后者通常在一个数据库内就包含了成千上万条记录。这时候不就死定了？&nbsp;<br />　　采用SQL，你就可以很快地找出准确的记录并且打开一个只包含该记录的recordset，如下所示：&nbsp;<br />Randomize&nbsp;<br />RNumber&nbsp;=&nbsp;Int(Rnd*499)&nbsp;+&nbsp;1&nbsp;<br />　&nbsp;<br />SQL&nbsp;=&nbsp;"SELECT&nbsp;*&nbsp;FROM&nbsp;Customers&nbsp;WHERE&nbsp;ID&nbsp;=&nbsp;"&nbsp;&&nbsp;RNumber&nbsp;<br />　&nbsp;<br />set&nbsp;objRec&nbsp;=&nbsp;ObjConn.Execute(SQL)&nbsp;<br />Response.WriteRNumber&nbsp;&&nbsp;"&nbsp;=&nbsp;"&nbsp;&&nbsp;objRec("ID")&nbsp;&&nbsp;"&nbsp;"&nbsp;&&nbsp;objRec("c_email")&nbsp;<br />　&nbsp;<br />　　不必写出RNumber&nbsp;和ID，你只需要检查匹配情况即可。只要你对以上代码的工作满意，你自可按需操作“随机”记录。Recordset没有包含其他内容，因此你很快就能找到你需要的记录这样就大大降低了处理时间。&nbsp;<br />再谈随机数&nbsp;<br />　　现在你下定决心要榨干Random&nbsp;函数的最后一滴油，那么你可能会一次取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random&nbsp;示例扩展一下就可以用SQL应对上面两种情况了。&nbsp;<br />　　为了取出几条随机选择的记录并存放在同一recordset内，你可以存储三个随机数，然后查询数据库获得匹配这些数字的记录：&nbsp;<br />SQL&nbsp;=&nbsp;"SELECT&nbsp;*&nbsp;FROM&nbsp;Customers&nbsp;WHERE&nbsp;ID&nbsp;=&nbsp;"&nbsp;&&nbsp;RNumber&nbsp;&&nbsp;"&nbsp;OR&nbsp;ID&nbsp;=&nbsp;"&nbsp;&&nbsp;RNumber2&nbsp;&&nbsp;"&nbsp;OR&nbsp;ID&nbsp;=&nbsp;"&nbsp;&&nbsp;RNumber3&nbsp;<br />　&nbsp;<br />　　假如你想选出10条记录（也许是每次页面装载时的10条链接的列表），你可以用BETWEEN&nbsp;或者数学等式选出第一条记录和适当数量的递增记录。这一操作可以通过好几种方式来完成，但是&nbsp;SELECT&nbsp;语句只显示一种可能（这里的ID&nbsp;是自动生成的号码）：&nbsp;<br />SQL&nbsp;=&nbsp;"SELECT&nbsp;*&nbsp;FROM&nbsp;Customers&nbsp;WHERE&nbsp;ID&nbsp;BETWEEN&nbsp;"&nbsp;&&nbsp;RNumber&nbsp;&&nbsp;"&nbsp;AND&nbsp;"&nbsp;&&nbsp;RNumber&nbsp;&&nbsp;"+&nbsp;9"&nbsp;<br /><br />　　注意：以上代码的执行目的不是检查数据库内是否有9条并发记录。&nbsp;<br /><br />　&nbsp;<br />随机读取若干条记录，测试过&nbsp;<br />Access语法：SELECT&nbsp;top&nbsp;10&nbsp;*&nbsp;From&nbsp;表名&nbsp;ORDER&nbsp;BY&nbsp;Rnd(id)&nbsp;<br />Sql&nbsp;server:select&nbsp;top&nbsp;n&nbsp;*&nbsp;from&nbsp;表名&nbsp;order&nbsp;by&nbsp;newid()&nbsp;<br />mysqlelect&nbsp;*&nbsp;From&nbsp;表名&nbsp;Order&nbsp;By&nbsp;rand()&nbsp;Limit&nbsp;n&nbsp;<br />Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有Access的SQL说明,只有自己测试,&nbsp;现在记下以备后查)&nbsp;<br />语法elect&nbsp;table1.fd1,table1,fd2,table2.fd2&nbsp;From&nbsp;table1&nbsp;left&nbsp;join&nbsp;table2&nbsp;on&nbsp;table1.fd1,table2.fd1&nbsp;where&nbsp;...&nbsp;<br />使用SQL语句&nbsp;用...代替过长的字符串显示&nbsp;<br />语法：&nbsp;<br />SQL数据库：select&nbsp;case&nbsp;when&nbsp;len(field)&gt;10&nbsp;then&nbsp;left(field,10)+'...'&nbsp;else&nbsp;field&nbsp;end&nbsp;as&nbsp;news_name,news_id&nbsp;from&nbsp;tablename&nbsp;<br />Access数据库：SELECT&nbsp;iif(len(field)&gt;2,left(field,2)+'...',field)&nbsp;FROM&nbsp;tablename;&nbsp;<br />　&nbsp;<br />Conn.Execute说明&nbsp;<br />Execute方法&nbsp;<br />　　该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集，该方法的使用格式分为以下两种：&nbsp;<br />　　　　1．执行SQL查询语句时，将返回查询得到的记录集。用法为：&nbsp;<br />　　　　Set&nbsp;对象变量名=连接对象.Execute("SQL&nbsp;查询语言")&nbsp;<br />　　　Execute方法调用后，会自动创建记录集对象，并将查询结果存储在该记录对象中，通过Set方法，将记录集赋给指定的对象保存，以后对象变量就代表了该记录集对象。&nbsp;<br /><br />　　　　2．执行SQL的操作性语言时，没有记录集的返回。此时用法为：&nbsp;<br />　　　　连接对象.Execute&nbsp;"SQL&nbsp;操作性语句"&nbsp;[,&nbsp;RecordAffected][,&nbsp;Option]&nbsp;<br />　　　　　　·RecordAffected&nbsp;为可选项，此出可放置一个变量，SQL语句执行后，所生效的记录数会自动保存到该变量中。通过访问该变量，就可知道SQL语句队多少条记录进行了操作。&nbsp;<br />　　　　　　·Option&nbsp;可选项，该参数的取值通常为adCMDText，它用于告诉ADO，应该将Execute方法之后的第一个字符解释为命令文本。通过指定该参数，可使执行更高效。&nbsp;<br /><br />·BeginTrans、RollbackTrans、CommitTrans方法&nbsp;<br />　　&nbsp;<br /><br /><br /><br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">isapi_rewrite使用方法</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_44.html" />
      <updated>2008-6-5 9:26:59</updated>
      <published>2008-6-5 9:26:59</published>
      <id>http://dev.mo.cn/article_44.html</id>
      <summary type="html">
      <![CDATA[今天弄了个代码下来调试,发现链接指向某静态页面,去这个目录中查看又没有此文件,经baidu搜索得知,是有一个叫做"isapi_rewrite&nbsp;"的玩意来完成,"狗日的,高科技哦",看来偶是落后啦.所有今天把人家的资料贴到这里来,方便以后查阅.isapi_rewrite(动态转静态工具)asp网站程序在国内运用很广,但是类似于im286.asp@id=20050307213811这样的url有点不利于搜索引擎的收录,也就是说不符合友好url(urls-friendly)的标准,那么我们用isapi_rewrite打造一个clean&nbsp;url<br /><br />1.下载isapi_rewrite.isapi_rewrite分精简(lite)和完全(full)版.精简版不支持对每个虚拟主机站点进行重写,只能进行全局处理.不过对于有服务器的朋友,精简版也就够啦.精简版下载地址:http://www.helicontech.com/download/,就是那lite&nbsp;version&nbsp;(free)啦.<br /><br />2.安装.msi的文件,和装一般程序一样装就可以了,俺就装在d:\isapi_rewrite.<br /><br />3.接下来一步比较重要哦,看仔细喽.打开internet&nbsp;信息服务,右键,web站点属性,电isapi筛选器选项卡.添加筛选器,名称自己填,路径自己指定isapi_rewrite.dll,然后确定.<br /><br />4.来测试一下.新建一个1ting.asp,里面写上<br />&lt;%=request.querystring("inso")%&gt;&nbsp;,效果就是执行的时候1ting.asp?inso=*浏览器显示*.<br /><br />5.这一步很重要哦,开始添加rewrite规则.正则,好头痛,幸亏这个例子比较简单.<br /><br />找到isapi_rewrite目录,把httpd.ini的只读属性去掉,打开编辑.我们要把1ting.asp@inso=im286映射成为1ting-im286.html这样的类型,需要在httpd.ini里加上这么一行:<br /><br />RewriteRule&nbsp;/1ting-([0-9,a-z]*).html&nbsp;/1ting.asp\?inso=$1&nbsp;,保存.<br /><br />6.来来来,到浏览器里查看一下效果吧.输入http://127.0.0.1/1ting.asp?inso=im286和http://127.0.0.1/1ting-im286.html,显示的内容是不是都是im286?这就证明成功啦!&nbsp;]]>
      </summary>
      <category term="" label="IIS外部组件" scheme="http://dev.mo.cn/cat_diary_4.html" />
   </entry>
   <entry>
      <title type="html">文本文件操作---FSO</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_42.html" />
      <updated>2008-6-5 4:27:06</updated>
      <published>2008-6-5 4:27:06</published>
      <id>http://dev.mo.cn/article_42.html</id>
      <summary type="html">
      <![CDATA[FSO&nbsp;-&nbsp;FileSystemObject&nbsp;或&nbsp;Scripting.FileSystemObject&nbsp;的缩写，为&nbsp;IIS&nbsp;内置组件，用于操作磁盘、文件夹或文本文件。FSO&nbsp;的对象、方法和属性非常的多，这里用示例的方式列出常用的，如果您要查看更详尽的信息，请点击这里下载&nbsp;FileSystemObject&nbsp;参考，注意：《VBScript&nbsp;语言参考》或《JScript&nbsp;语言参考》中的：《FileSystemObject&nbsp;用户指南》和《Scripting&nbsp;运行时库参考》便是微软给出的&nbsp;FileSystemObject&nbsp;完整参考。<br /><br />FSO&nbsp;不能操作二进制文件，要操作二进制文件，请使用：ADODB.Stream。<br /><br />创建文件<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />dim&nbsp;fso,&nbsp;f<br />set&nbsp;fso&nbsp;=&nbsp;server.CreateObject("Scripting.FileSystemObject")<br />set&nbsp;f&nbsp;=&nbsp;fso.CreateTextFile("C:\test.txt",&nbsp;true)&nbsp;'第二个参数表示目标文件存在时是否覆盖<br />f.Write("写入内容")<br />f.WriteLine("写入内容并换行")<br />f.WriteBlankLines(3)&nbsp;'写入三个空白行（相当于在文本编辑器中按三次回车）<br />f.Close()<br />set&nbsp;f&nbsp;=&nbsp;nothing<br />set&nbsp;fso&nbsp;=&nbsp;nothing<br /></div></div><br />打开并读文件<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />dim&nbsp;fso,&nbsp;f<br />set&nbsp;fso&nbsp;=&nbsp;server.CreateObject("Scripting.FileSystemObject")<br />set&nbsp;f&nbsp;=&nbsp;fso.OpenTextFile("C:\test.txt",&nbsp;1,&nbsp;false)&nbsp;'第二个参数&nbsp;1&nbsp;表示只读打开，第三个参数表示目标文件不存在时是否创建<br />f.Skip(3)&nbsp;'将当前位置向后移三个字符<br />f.SkipLine()&nbsp;'将当前位置移动到下一行的第一个字符，注意：无参数<br />response.Write&nbsp;f.Read(3)&nbsp;'从当前位置向后读取三个字符，并将当前位置向后移三个字符<br />response.Write&nbsp;f.ReadLine()&nbsp;'从当前位置向后读取直到遇到换行符（不读取换行符），并将当前位置移动到下一行的第一个字符，注意：无参数<br />response.Write&nbsp;f.ReadAll()&nbsp;'从当前位置向后读取，直到文件结束，并将当前位置移动到文件的最后<br />if&nbsp;f.atEndOfLine&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;response.Write("一行的结尾！")<br />end&nbsp;if<br />if&nbsp;f.atEndOfStream&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;response.Write("文件的结尾！")<br />end&nbsp;if<br />f.Close()<br />set&nbsp;f&nbsp;=&nbsp;nothing<br />set&nbsp;fso&nbsp;=&nbsp;nothing<br /></div></div><br />打开并写文件<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />dim&nbsp;fso,&nbsp;f<br />set&nbsp;fso&nbsp;=&nbsp;server.CreateObject("Scripting.FileSystemObject")<br />set&nbsp;f&nbsp;=&nbsp;fso.OpenTextFile("C:\test.txt",&nbsp;2,&nbsp;false)&nbsp;'第二个参数&nbsp;2&nbsp;表示重写，如果是&nbsp;8&nbsp;表示追加<br />f.Write("写入内容")<br />f.WriteLine("写入内容并换行")<br />f.WriteBlankLines(3)&nbsp;'写入三个空白行（相当于在文本编辑器中按三次回车）<br />f.Close()<br />set&nbsp;f&nbsp;=&nbsp;nothing<br />set&nbsp;fso&nbsp;=&nbsp;nothing<br /></div></div><br />判断文件是否存在<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />dim&nbsp;fso<br />set&nbsp;fso&nbsp;=&nbsp;server.CreateObject("Scripting.FileSystemObject")<br />if&nbsp;fso.FileExists("C:\test.txt")&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;response.Write("目标文件存在")<br />else<br />&nbsp;&nbsp;&nbsp;&nbsp;response.Write("目标文件不存在")<br />end&nbsp;if<br />set&nbsp;fso&nbsp;=&nbsp;nothing<br /></div></div><br />移动文件<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />dim&nbsp;fso<br />set&nbsp;fso&nbsp;=&nbsp;server.CreateObject("Scripting.FileSystemObject")<br />call&nbsp;fso.MoveFile("C:\test.txt",&nbsp;"D:\test111.txt")&nbsp;'两个参数的文件名部分可以不同<br />set&nbsp;fso&nbsp;=&nbsp;nothing<br /></div></div><br />复制文件<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />dim&nbsp;fso<br />set&nbsp;fso&nbsp;=&nbsp;server.CreateObject("Scripting.FileSystemObject")<br />call&nbsp;fso.CopyFile("C:\test.txt",&nbsp;"D:\test111.txt")&nbsp;'两个参数的文件名部分可以不同<br />set&nbsp;fso&nbsp;=&nbsp;nothing<br /></div></div><br />删除文件<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />dim&nbsp;fso<br />set&nbsp;fso&nbsp;=&nbsp;server.CreateObject("Scripting.FileSystemObject")<br />fso.DeleteFile("C:\test.txt")<br />set&nbsp;fso&nbsp;=&nbsp;nothing<br /></div></div><br />创建文件夹<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />dim&nbsp;fso<br />set&nbsp;fso&nbsp;=&nbsp;server.CreateObject("Scripting.FileSystemObject")<br />fso.CreateFolder("C:\test")&nbsp;'目标文件夹的父文件夹必须存在<br />set&nbsp;fso&nbsp;=&nbsp;nothing<br /></div></div><br />判断文件夹是否存在<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />dim&nbsp;fso<br />set&nbsp;fso&nbsp;=&nbsp;server.CreateObject("Scripting.FileSystemObject")<br />if&nbsp;fso.FolderExists("C:\Windows")&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;response.Write("目标文件夹存在")<br />else<br />&nbsp;&nbsp;&nbsp;&nbsp;response.Write("目标文件夹不存在")<br />end&nbsp;if<br />set&nbsp;fso&nbsp;=&nbsp;nothing<br /></div></div><br />删除文件夹<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />dim&nbsp;fso<br />set&nbsp;fso&nbsp;=&nbsp;server.CreateObject("Scripting.FileSystemObject")<br />fso.DeleteFolder("C:\test")&nbsp;'文件夹不必为空<br />set&nbsp;fso&nbsp;=&nbsp;nothing<br /></div></div><br /><br /><br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">Response.Redirect与Server.Transfer的优缺点比较</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_41.html" />
      <updated>2008-6-5 4:25:47</updated>
      <published>2008-6-5 4:25:47</published>
      <id>http://dev.mo.cn/article_41.html</id>
      <summary type="html">
      <![CDATA[如果你读过很多行业杂志和&nbsp;ASP.NET&nbsp;示例，你会发现，大多数人使用&nbsp;Response.Redirect&nbsp;将用户引导到另一个页面，而另一些人好像偏爱于神秘的&nbsp;Server.Transfer，那么，这二者有什么区别？&nbsp;<br /><br />Response.Redirect&nbsp;简单地发送一条消息到浏览器，告诉浏览器定位到另一个页面。你可以使用下面的代码将用户引导到另一个页面：&nbsp;<br />Response.Redirect("WebForm2.aspx")&nbsp;<br />或者&nbsp;<br />Response.Redirect("http://cike.org")&nbsp;<br /><br />Server.Transfer&nbsp;也是通过一条语句将用户引导到另一页面，比如：Server.Transfer("WebForm2.aspx")。不过，这条语句有一系列独特的优缺点。&nbsp;<br /><br />首先，通过&nbsp;Server.Transfer&nbsp;引导到另一页面保留服务器资源，通过更改服务器端“焦点”和传输请求来代替告诉浏览器重定向，这就意味着你不会占用较多的&nbsp;HTTP&nbsp;请求，因此这可以减轻服务器的压力，使你的服务器运行更快。&nbsp;<br /><br />Server.Transfer&nbsp;只能在同一服务器端的同一站点间运行，所以你不能用&nbsp;Server.Transfer&nbsp;将用户重定向到另一服务器上的站点。要重定向到服务器以外的站点，只有&nbsp;Response.Redirect&nbsp;能办到。&nbsp;<br /><br />Server.Transfer&nbsp;保留浏览器端的&nbsp;URL&nbsp;地址.Request集合里的内容不会丢失&nbsp;这对流线型的数据输入很有帮助，不过这也增加了调试的复杂度。<br /><br />还有：Server.Transfer&nbsp;方法还有另一个参数——"preserveForm"。如果你设置这个参数为&nbsp;True，比如：Server.Transfer("WebForm2.aspx",&nbsp;True),&nbsp;那么&nbsp;query&nbsp;string&nbsp;和任何&nbsp;form&nbsp;变量都会同时传递到你定位的页面。&nbsp;<br /><br />例：WebForm1.aspx&nbsp;有一个文本框名为&nbsp;TextBox1，你利用&nbsp;preserveForm&nbsp;为&nbsp;True&nbsp;传递到&nbsp;WebForm2.aspx，你仍然可以用&nbsp;Request.Form("TextBox1")&nbsp;来取得文本框的值。&nbsp;<br /><br />这种技术对向导式的多页面输入很有用，不过这里有一个你必须注意的问题是，当你使用&nbsp;preserveForm&nbsp;参数时，ASP.NET&nbsp;有一个&nbsp;bug，通常情况下，当试图传递&nbsp;form&nbsp;或&nbsp;query&nbsp;string&nbsp;值时会发生错误。请参见：http://support.microsoft.com/default.aspx?id=kb;en-us;Q316920&nbsp;<br /><br />非官方的解决办法是在你要传递的目的页面中设置&nbsp;enableViewStateMac&nbsp;属性为&nbsp;True，然后再将其设置回&nbsp;False。这说明你需要使用&nbsp;enableViewStateMac&nbsp;的&nbsp;False&nbsp;值才能解决这个问题。&nbsp;<br /><br />总结：Response.Redirect&nbsp;简单地告诉浏览器访问另一个页面。Server.Transfer&nbsp;有利于减少服务器请求，保持地址栏&nbsp;URL&nbsp;不变，允许你将&nbsp;query&nbsp;string&nbsp;和&nbsp;form&nbsp;变量传递到另一个页面（有一点小小的缺陷）。&nbsp;<br /><br />重要提示：不要混淆了&nbsp;Server.Transfer&nbsp;和&nbsp;Server.Execute，Server.Execute&nbsp;执行一个页面，并返回结果，在过去&nbsp;Server.Execute&nbsp;很有用，不过在&nbsp;ASP.NET&nbsp;里，它被&nbsp;fresher&nbsp;方法所代替，所以忽略&nbsp;Server.Execute。&nbsp;<br /><br /><br /><br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">ASP怎么实现urlrewite</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_40.html" />
      <updated>2008-6-5 4:22:46</updated>
      <published>2008-6-5 4:22:46</published>
      <id>http://dev.mo.cn/article_40.html</id>
      <summary type="html">
      <![CDATA[UrlRewrite是怎么样发生作用的？&nbsp;<br />简单的说，一个web&nbsp;server的工作就是根据用户请求的地址发送一个文件，或者运行一个cgi/脚本，并把运行结果发送给用户。加入了UrlRewrite功能的web&nbsp;server的工作流程略有变化，首先是看用户请求的地址是否包括在我们的替换规则里面。如果在，先把用户请求的地址进行改变，然后服务器按照新的地址进行文件传送或者cgi/脚本执行。&nbsp;<br /><br /><br />UrlRewrite有什么用处？&nbsp;<br />1、满足搜索引擎的要求&nbsp;<br /><br />某些搜索引擎不能支持动态页面的抓取，大量的信息就不能被潜在用户搜索到。用UrlRewrite技术你可以把&nbsp;http://yangshu.org/poplar.asp?id=111&nbsp;变成&nbsp;http://yangshu.org/poplar/111.shtml&nbsp;这样他们就会被搜索引擎收录了。google虽然可以抓取动态页面，但是google对动态页面的评分一般低于静态页面。所以，对大量信息发布的网站，把网站地址改变成静态的绝对是值得的。&nbsp;<br /><br />2、隐藏技术实现，提高网站的移植性&nbsp;<br /><br />每个页面都挂着鲜明的.asp/.jsp这种开发语言的标记，可以一眼让人看出你的网站使用什么语言做的。而且在改变网站的语言的时候，你需要改动大量的链接。而且，一个页面修改了扩展名，他的pagerank也会随之消失，从头开始。我们可以用UrlRewrite技术隐藏我们的实现细节，这样修改移植都很方便，而且完全不损失pagerank。&nbsp;<br /><br />3、满足美感的要求&nbsp;<br /><br />对于追求完美主义的网站设计师，即使是网页的地址也要看起来简洁明快。形如&nbsp;http://yangshu.org/poplar.asp?id=111&nbsp;的网页地址，肯定是上不了完美主义者的法眼的，用UrlRewrite技术，你可以把他变成&nbsp;http://yangshu.org/poplar/111.shtml&nbsp;。&nbsp;<br /><br />IIS&nbsp;5.0支持UrlRewrite么？&nbsp;<br />答案很简单，不支持。但是我们可以通过安装服务器扩展让IIS支持。&nbsp;<br /><br />目前有两种产品支持IIS&nbsp;5.0的UrlRewrite，isapi_rewrite&nbsp;和&nbsp;IIS&nbsp;Rewrite。&nbsp;<br /><br />isapi_rewrite:&nbsp;http://www.helicontech.com/download/#isapi_rewrite&nbsp;<br /><br />IIS&nbsp;Rewrite&nbsp;:http://www.qwerksoft.com/products/iisrewrite/download.asp&nbsp;<br /><br />这里只有ISAPI&nbsp;Rewrite的一个LITE版本是免费的，其它都是trial版本。ISAPI&nbsp;Rewrite&nbsp;Lite的版本功能。<br /><br />我们采用isapi_rewrite&nbsp;Lite&nbsp;Version(免费版本)。&nbsp;<br /><br />lite版本不支持虚拟站点配置，元数据监测和自动缓存清理。&nbsp;<br /><br />metabase元数据：metabase&nbsp;元数据库&nbsp;指一个驻留内存的数据存储区域，其中存放着IIS的配置值。/Metabase是储存成System32\Inetsrv&nbsp;资料夹中的Metabase.bin文件&nbsp;&nbsp;<br /><br />如何进行UrlRewrite的设置？&nbsp;<br />isapi_rewrite利用正则表达式进行替换规则的表示。&nbsp;<br /><br />下面是一个简单的例子，我想让我们的用户输入&nbsp;http://server/test-12314.html&nbsp;实际上访问的是&nbsp;http://server/test.asp?id=12314&nbsp;。那么我们的匹配表达式应该是&nbsp;/test-([0-9]*).html&nbsp;对应的格式化表达式应该为&nbsp;/test.asp\?id=$1&nbsp;。&nbsp;<br /><br />进行正则表达式的编写的时候，可以利用isapi_rewrite提供的正则表达式测试工具（默认安装提供），进行调试。<br /><br />做好了匹配表达式和格式化表达式，我们可以按照下面的格式，把它们放到安装目录下的httpd.ini里面。&nbsp;<br /><br />格式：RewriteRule&nbsp;匹配表达式&nbsp;格式化表达式&nbsp;<br /><br />刚才的例子：RewriteRule&nbsp;/test-([0-9]*).html&nbsp;/test.asp\?id=$1&nbsp;<br /><br />文件保存后，不需重新启动iis即可生效。&nbsp;<br /><br />参考资料：&nbsp;<br /><br />面向Google(Search&nbsp;Engine&nbsp;Friendly)的URL设计&nbsp;<br />http://www.chedong.com/tech/google_url.html&nbsp;<br /><br />ISAPI&nbsp;REWRITE文档&nbsp;<br />http://www.isapirewrite.com/docs/&nbsp;<br /><br /><br /><br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">经典正则表达式应用收藏</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_39.html" />
      <updated>2008-6-5 4:22:00</updated>
      <published>2008-6-5 4:22:00</published>
      <id>http://dev.mo.cn/article_39.html</id>
      <summary type="html">
      <![CDATA[正则表达式用于字符串处理，表单验证等场合，实用高效，但用到时总是不太把握，以致往往要上网查一番。我将一些常用的表达式收藏在这里，作备忘之用。本贴随时会更新。<br /><br />匹配中文字符的正则表达式：&nbsp;[\u4e00-\u9fa5]<br /><br />匹配双字节字符(包括汉字在内)：[^\x00-\xff]<br /><br />应用：计算字符串的长度（一个双字节字符长度计2，ASCII字符计1）<br /><br />String.prototype.len=function(){return&nbsp;this.replace([^\x00-\xff]/g,"aa").length;}<br /><br />匹配空行的正则表达式：\n[\s|&nbsp;]*\r<br /><br />匹配HTML标记的正则表达式：/&lt;(.*)&gt;.*&lt;\/\1&gt;|&lt;(.*)&nbsp;\/&gt;/&nbsp;<br /><br />匹配首尾空格的正则表达式：(^\s*)|(\s*$)<br /><br />应用：javascript中没有像vbscript那样的trim函数，我们就可以利用这个表达式来实现，如下：<br /><br />String.prototype.trim&nbsp;=&nbsp;function()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this.replace(/(^\s*)|(\s*$)/g,&nbsp;"");<br />}<br /><br />利用正则表达式分解和转换IP地址：<br /><br />下面是利用正则表达式匹配IP地址，并将IP地址转换成对应数值的javascript程序：<br /><br />function&nbsp;IP2V(ip)<br />{<br />&nbsp;re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g&nbsp;&nbsp;//匹配IP地址的正则表达式<br />if(re.test(ip))<br />{<br />return&nbsp;RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1<br />}<br />else<br />{<br />&nbsp;throw&nbsp;new&nbsp;Error("Not&nbsp;a&nbsp;valid&nbsp;IP&nbsp;address!")<br />}<br />}<br /><br />不过上面的程序如果不用正则表达式，而直接用split函数来分解可能更简单，程序如下：<br /><br />var&nbsp;ip="10.100.20.168"<br />ip=ip.split(".")<br />alert("IP值是："+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))<br /><br />匹配Email地址的正则表达式：\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*<br /><br />匹配网址URL的正则表达式：http://([\w-]+\.)+[\w-]+(/[\w-&nbsp;./?%&=]*)?<br /><br />利用正则表达式去除字串中重复的字符的算法程序：[注：此程序不正确：《]<br /><br />var&nbsp;s="abacabefgeeii"<br />var&nbsp;s1=s.replace(/(.).*\1/g,"$1")<br />var&nbsp;re=new&nbsp;RegExp("["+s1+"]","g")<br />var&nbsp;s2=s.replace(re,"")&nbsp;<br />alert(s1+s2)&nbsp;&nbsp;//结果为：abcefgi<br /><br />我原来在CSDN上发贴寻求一个表达式来实现去除重复字符的方法，最终没有找到，这是我能想到的最简单的实现方法。思路是使用后向引用取出包括重复的字符，再以重复的字符建立第二个表达式，取到不重复的字符，两者串连。这个方法对于字符顺序有要求的字符串可能不适用。<br /><br />得用正则表达式从URL地址中提取文件名的javascript程序，如下结果为page1<br /><br />s="http://www.9499.net/page1.htm"<br />s=s.replace(/(.*\/){0,}([^\.]+).*/ig,"$2")<br />alert(s)<br /><br />利用正则表达式限制网页表单里的文本框输入内容：<br /><br />用正则表达式限制只能输入中文：onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')"&nbsp;onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"<br /><br />用正则表达式限制只能输入全角字符：&nbsp;onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')"&nbsp;onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"<br /><br />用正则表达式限制只能输入数字：onkeyup="value=value.replace(/[^\d]/g,'')&nbsp;"onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"<br /><br />用正则表达式限制只能输入数字和英文：onkeyup="value=value.replace(/[\W]/g,'')&nbsp;"onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"<br /><br /><br /><br />]]>
      </summary>
      <category term="" label="其他" scheme="http://dev.mo.cn/cat_diary_18.html" />
   </entry>
   <entry>
      <title type="html">杂谈ASP生成静态Html文件技术</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_38.html" />
      <updated>2008-6-5 4:13:48</updated>
      <published>2008-6-5 4:13:48</published>
      <id>http://dev.mo.cn/article_38.html</id>
      <summary type="html">
      <![CDATA[网页生成静态Html文件有许多好处,比如生成html网页有利于被搜索引擎收录,不仅被收录的快还收录的全.前台脱离了数据访问,减轻对数据库访问的压力,加快网页打开速度.像http://yangshu.org/的主站就采用了生成html文件!以下为转,仅是生成HTML的基础内容,具体自己发挥吧<br /><br />1,下面这个例子直接利用FSO把html代码写入到文件中然后生成.html格式的文件<br />&lt;%<br />filename="test.htm"<br />if&nbsp;request("body")&lt;&gt;""&nbsp;then<br />set&nbsp;fso&nbsp;=&nbsp;Server.CreateObject("Scripting.FileSystemObject")<br />set&nbsp;htmlwrite&nbsp;=&nbsp;fso.CreateTextFile(server.mappath(""&filename&""))<br />htmlwrite.write&nbsp;"&lt;html&gt;&lt;head&gt;&lt;title&gt;"&nbsp;&&nbsp;request.form("title")&nbsp;&&nbsp;"&lt;/title&gt;&lt;/head&gt;"<br />htmlwrite.write&nbsp;"&lt;body&gt;输出Title内容:&nbsp;"&nbsp;&&nbsp;request.form("title")&nbsp;&&nbsp;"&lt;br&nbsp;/&gt;&nbsp;输出Body内容:"&nbsp;&&nbsp;request.form("body")&&nbsp;"&lt;/body&gt;&lt;/html&gt;"<br />htmlwrite.close<br />set&nbsp;fout=nothing<br />set&nbsp;fso=nothing<br />end&nbsp;if<br />%&gt;<br />&lt;form&nbsp;name="form"&nbsp;method="post"&nbsp;action=""&gt;<br />&lt;input&nbsp;name="title"&nbsp;value="Title"&nbsp;size=26&gt;<br />&lt;br&gt;<br />&nbsp;&lt;textarea&nbsp;name="body"&gt;Body&lt;/textarea&gt;<br />&nbsp;&lt;br&gt;<br />&nbsp;&lt;br&gt;<br />&nbsp;&lt;input&nbsp;type="submit"&nbsp;name="Submit"&nbsp;value="生成html"&gt;<br />&lt;/form&gt;<br /><br />2,但是按照上面的方法生成html文件非常不方便,第二种方法就是利用模板技术,将模板中特殊代码的值替换为从表单或是数据库字段中接受过来的值,完成模板功能;将最终替换过的所有模板代码生成HTML文件.这种技术采用得比较多,大部分的CMS都是使用这类方法.<br />template.htm&nbsp;'&nbsp;//模板文件<br />&lt;html&gt;&nbsp;<br />&lt;head&gt;&nbsp;<br />&lt;title&gt;$title$&nbsp;by&nbsp;aspid.cn&lt;/title&gt;&nbsp;<br />&lt;/head&gt;&nbsp;<br />&lt;body&gt;&nbsp;<br />$body$&nbsp;<br />&lt;/body&gt;&nbsp;<br />&lt;/html&gt;<br />?&nbsp;<br /><br />TestTemplate.asp&nbsp;'//&nbsp;生成Html<br />&lt;%&nbsp;<br />Dim&nbsp;fso,htmlwrite<br />Dim&nbsp;strTitle,strContent,strOut&nbsp;<br />'//&nbsp;创建文件系统对象&nbsp;<br />Set&nbsp;fso=Server.CreateObject("Scripting.FileSystemObject")&nbsp;<br />'//&nbsp;打开网页模板文件，读取模板内容&nbsp;<br />Set&nbsp;htmlwrite=fso.OpenTextFile(Server.MapPath("Template.htm"))&nbsp;<br />strOut=f.ReadAll&nbsp;<br />htmlwrite.close&nbsp;<br /><br />strTitle="生成的网页标题"&nbsp;<br />strContent="生成的网页内容"&nbsp;<br /><br />'//&nbsp;用真实内容替换模板中的标记&nbsp;<br />strOut=Replace(strOut,"$title$",strTitle)&nbsp;<br />strOut=Replace(strOut,"$body$",strContent)&nbsp;<br /><br />'//&nbsp;创建要生成的静态页&nbsp;<br />Set&nbsp;htmlwrite=fso.CreateTextFile(Server.MapPath("test.htm"),true)&nbsp;<br /><br />'//&nbsp;写入网页内容&nbsp;<br />htmlwrite.WriteLine&nbsp;strOut&nbsp;<br />htmlwrite.close&nbsp;<br /><br />Response.Write&nbsp;"生成静态页成功！"&nbsp;<br /><br />'//&nbsp;释放文件系统对象&nbsp;<br />set&nbsp;htmlwrite=Nothing&nbsp;<br />set&nbsp;fso=Nothing&nbsp;<br />%&gt;<br /><br /><br />3,第三种方法就是用XMLHTTP获取动态页生成的HTML内容，再用ADODB.Stream或者Scripting.FileSystemObject保存成html文件。这句话是在蓝色理想上看到的,对XMLHTTP吟清还不熟悉正在找资料了解.找到一段XMLHTTP生成Html的代码参考一下.<br /><br />&lt;%<br /><br />'常用函数<br />'1、输入url目标网页地址，返回值getHTTPPage是目标网页的html代码<br />function&nbsp;getHTTPPage(url)<br />dim&nbsp;Http<br />set&nbsp;Http=server.createobject("MSXML2.XMLHTTP")<br />Http.open&nbsp;"GET",url,false<br />Http.send()<br />if&nbsp;Http.readystate&lt;&gt;4&nbsp;then&nbsp;<br />exit&nbsp;function<br />end&nbsp;if<br />getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312")<br />set&nbsp;http=nothing<br />if&nbsp;err.number&lt;&gt;0&nbsp;then&nbsp;err.Clear&nbsp;<br />end&nbsp;function<br /><br />'2、转换乱玛，直接用xmlhttp调用有中文字符的网页得到的将是乱玛，可以通过adodb.stream组件进行转换<br />Function&nbsp;BytesToBstr(body,Cset)<br />dim&nbsp;objstream<br />set&nbsp;objstream&nbsp;=&nbsp;Server.CreateObject("adodb.stream")<br />objstream.Type&nbsp;=&nbsp;1<br />objstream.Mode&nbsp;=3<br />objstream.Open<br />objstream.Write&nbsp;body<br />objstream.Position&nbsp;=&nbsp;0<br />objstream.Type&nbsp;=&nbsp;2<br />objstream.Charset&nbsp;=&nbsp;Cset<br />BytesToBstr&nbsp;=&nbsp;objstream.ReadText&nbsp;<br />objstream.Close<br />set&nbsp;objstream&nbsp;=&nbsp;nothing<br />End&nbsp;Function<br />&nbsp;<br /><br />txtURL=server.MapPath("../index.asp")<br /><br />sText&nbsp;=&nbsp;getHTTPPage(txtURL)&nbsp;<br /><br />Set&nbsp;FileObject=Server.CreateObject("Scripting.FileSystemObject")&nbsp;<br />filename="../index.htm"<br />Set&nbsp;openFile=FileObject.OpenTextfile(server.mapPath(filename),2,true)&nbsp;'true为不存在自行建立<br />openFile.writeline(sText)<br />Set&nbsp;OpenFile=nothing<br /><br />%&gt;]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">RegExp对象正则表达式功能用介绍</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_37.html" />
      <updated>2008-6-5 4:09:26</updated>
      <published>2008-6-5 4:09:26</published>
      <id>http://dev.mo.cn/article_37.html</id>
      <summary type="html">
      <![CDATA[首先，让我们来了解一下究竟什么是VBScript的“正则表达式”对象，我们先来看一段程序：<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />Function&nbsp;CheckExp(patrn,&nbsp;strng)<br /><br />Dim&nbsp;regEx,&nbsp;Match　　&nbsp;’&nbsp;建立变量。<br /><br />Set&nbsp;regEx&nbsp;=&nbsp;New&nbsp;RegExp&nbsp;’&nbsp;建立正则表达式。<br /><br />regEx.Pattern&nbsp;=&nbsp;patrn&nbsp;’&nbsp;设置模式。<br /><br />regEx.IgnoreCase&nbsp;=&nbsp;true&nbsp;’&nbsp;设置是否区分字符大小写。<br /><br />regEx.Global&nbsp;=&nbsp;True&nbsp;’&nbsp;设置全局可用性。<br /><br />Matches&nbsp;=&nbsp;regEx.test(strng)&nbsp;’&nbsp;执行搜索。<br /><br />CheckExp&nbsp;=&nbsp;matches<br /><br />End&nbsp;Function<br /></div></div><br />&nbsp;<br /><br />我们现在就看看在数据校验方面正则表达式对象常用的方法和属性：<br /><br />常用方法<br />Execute&nbsp;方法<br />描述：对指定的字符串执行正则表达式搜索。<br /><br />语法：object.Execute(string)　　Execute&nbsp;方法的语法包括以下几个部分：<br /><br />object：必需的。总是一个&nbsp;RegExp&nbsp;对象的名称。<br /><br />string：必需的。要在其上执行正则表达式的文本字符串。<br /><br />说明：正则表达式搜索的设计模式是通过&nbsp;RegExp&nbsp;对象的&nbsp;Pattern&nbsp;来设置的。Execute&nbsp;方法返回一个Matches&nbsp;集合，其中包含了在&nbsp;string&nbsp;中找到的每一个匹配的&nbsp;Match&nbsp;对象。如果未找到匹配，Execute&nbsp;将返回空的&nbsp;Matches&nbsp;集合。<br /><br />Test方法<br />描述：对指定的字符串执行一个正则表达式搜索，并返回一个&nbsp;Boolean&nbsp;值指示是否找到匹配的模式。<br /><br />语法：object.Test(string)<br /><br />Test&nbsp;方法的语法包括以下几个部分：<br /><br />object：必需的。总是一个&nbsp;RegExp&nbsp;对象的名称。<br /><br />string：必需的。要执行正则表达式搜索的文本字符串。<br /><br />说明：正则表达式搜索的实际模式是通过RegExp对象的Pattern属性来设置的。RegExp.Global属性对Test方法没有影响。如果找到了匹配的模式，Test方法返回True；否则返回False。<br /><br />常用属性：<br />&nbsp;Global属性<br />描述：设置或返回一个&nbsp;Boolean&nbsp;值，该值指明在整个搜索字符串时模式是全部匹配还是只匹配第一个。<br /><br />语法：object.Global&nbsp;[=&nbsp;True&nbsp;|&nbsp;False&nbsp;]<br /><br />object&nbsp;参数总是&nbsp;RegExp&nbsp;对象。如果搜索应用于整个字符串，Global&nbsp;属性的值为&nbsp;True，否则其值为&nbsp;False。默认的设置为&nbsp;True。<br /><br />IgnoreCase属性<br />描述：设置或返回一个Boolean值，指明模式搜索是否区分大小写。<br /><br />语法：object.IgnoreCase&nbsp;[=&nbsp;True&nbsp;|&nbsp;False&nbsp;]<br /><br />object&nbsp;参数总是一个&nbsp;RegExp&nbsp;对象。如果搜索是区分大小写的，则&nbsp;IgnoreCase&nbsp;属性为&nbsp;False；否则为&nbsp;True。缺省值为&nbsp;True。<br /><br />Pattern属性<br />描述：设置或返回被搜索的正则表达式模式。&nbsp;这是一个最重要的属性，我们主要是设置这个属性来实现数据校验的。<br /><br />语法：object.Pattern&nbsp;[=&nbsp;"searchstring"]<br /><br />Pattern&nbsp;属性的语法包含以下几个部分：<br /><br />object：必需的。总是一个&nbsp;RegExp&nbsp;对象变量。<br /><br />searchstring：可选的。被搜索的正则字符串表达式。它可能包含设置部分表格中的各种正则表达式字符。<br /><br />设置：在书写正则表达式的模式时使用了特殊的字符和序列。下表描述了可以使用的字符和序列，并给出了实例。<br /><br />字符描述：<br /><br />&nbsp;\：将下一个字符标记为特殊字符或字面值。例如"n"与字符"n"匹配。"\n"与换行符匹配。序列"\[code=vbscript\]"与"\"匹配，"\("与"("匹配。<br /><br />^&nbsp;：匹配输入的开始位置。<br /><br />$&nbsp;：匹配输入的结尾。<br /><br />*&nbsp;：匹配前一个字符零次或几次。例如，"zo*"可以匹配"z"、"zoo"。<br /><br />+&nbsp;：匹配前一个字符一次或多次。例如，"zo+"可以匹配"zoo",但不匹配"z"。<br /><br />?&nbsp;：匹配前一个字符零次或一次。例如，"a?ve?"可以匹配"never"中的"ve"。<br /><br />.：匹配换行符以外的任何字符。<br /><br />(pattern)&nbsp;与模式匹配并记住匹配。匹配的子字符串可以从作为结果的&nbsp;Matches&nbsp;集合中使用&nbsp;Item&nbsp;[0]...[n]取得。如果要匹配括号字符(和&nbsp;)，可使用"\("&nbsp;或&nbsp;"\)"。<br /><br />x|y：匹配&nbsp;x&nbsp;或&nbsp;y。例如&nbsp;"z|food"&nbsp;可匹配&nbsp;"z"&nbsp;或&nbsp;"food"。"(z|f)ood"&nbsp;匹配&nbsp;"zoo"&nbsp;或&nbsp;"food"。<br /><br />{n}：n&nbsp;为非负的整数。匹配恰好n次。例如，"o{2}"&nbsp;不能与&nbsp;"Bob&nbsp;中的&nbsp;"o"&nbsp;匹配，但是可以与"foooood"中的前两个o匹配。<br /><br />{n,}&nbsp;：n&nbsp;为非负的整数。匹配至少n次。例如，"o{2,}"不匹配"Bob"中的"o"，但是匹配"foooood"中所有的o。"o{1,}"等价于"o+"。"o{0,}"等价于"o*"。<br /><br />{n,m}&nbsp;：m&nbsp;和&nbsp;n&nbsp;为非负的整数。匹配至少&nbsp;n&nbsp;次，至多&nbsp;m&nbsp;次。例如，"o{1,3}"&nbsp;匹配&nbsp;"fooooood"中前三个o。"o{0,1}"等价于"o?"。<br /><br />[xyz]&nbsp;：一个字符集。与括号中字符的其中之一匹配。例如，"[abc]"&nbsp;匹配"plain"中的"a"。<br /><br />[^xyz]&nbsp;：一个否定的字符集。匹配不在此括号中的任何字符。例如，"[^abc]"&nbsp;可以匹配"plain"中的"p".<br /><br />[a-z]&nbsp;：表示某个范围内的字符。与指定区间内的任何字符匹配。例如，"[a-z]"匹配"a"与"z"之间的任何一个小写字母字符。<br /><br />[^m-z]&nbsp;：否定的字符区间。与不在指定区间内的字符匹配。例如，"[m-z]"与不在"m"到"z"之间的任何字符匹配。<br /><br />\b&nbsp;：与单词的边界匹配，即单词与空格之间的位置。例如，"er\b"&nbsp;与"never"中的"er"匹配，但是不匹配"verb"中的"er"。<br /><br />\B&nbsp;：与非单词边界匹配。"ea*r\B"与"never&nbsp;early"中的"ear"匹配。<br /><br />\[code=vbscript\]&nbsp;：与一个数字字符匹配。等价于[0-9]。<br /><br />\D&nbsp;：与非数字的字符匹配。等价于[^0-9]。<br /><br />\f&nbsp;：与分页符匹配。<br /><br />\n&nbsp;：与换行符字符匹配。<br /><br />\r&nbsp;：与回车字符匹配。<br /><br />\s&nbsp;：与任何白字符匹配，包括空格、制表符、分页符等。等价于"[&nbsp;\f\n\r\t\v]"。<br /><br />\S&nbsp;：与任何非空白的字符匹配。等价于"[^&nbsp;\f\n\r\t\v]"。<br /><br />\t&nbsp;：与制表符匹配。<br /><br />\v&nbsp;：与垂直制表符匹配。<br /><br />\w&nbsp;：与任何单词字符匹配，包括下划线。等价于"[A-Za-z0-9_]"。<br /><br />\W&nbsp;：与任何非单词字符匹配。等价于"[^A-Za-z0-9_]"。<br /><br />\num&nbsp;：匹配&nbsp;num个，其中&nbsp;num&nbsp;为一个正整数。引用回到记住的匹配。例如，"(.)\1"匹配两个连续的相同的字符。<br /><br />\n：匹配&nbsp;n，其中n&nbsp;是一个八进制换码值。八进制换码值必须是&nbsp;1,&nbsp;2&nbsp;或&nbsp;3&nbsp;个数字长。<br /><br />&nbsp;<br /><br />\xn：匹配n，其中n是一个十六进制的换码值。十六进制换码值必须恰好为两个数字长。例如，"\x41"匹配"A"。"\x041"等价于"\x04"&nbsp;和&nbsp;"1"。允许在正则表达式中使用&nbsp;ASCII&nbsp;码。<br /><br />asp&nbsp;RegExp例子<br />我们想要对用户输入的电子邮件进行校验，那么，什么样的数据才算是一个合法的电子邮件呢？我可以这样输入：uestc95@263.net，当然我也会这样输入：xxx@yyy.com.cn,但是这样的输入就是非法的：xxx@@com.cn或者@xxx.com.cn，等等，所以我们得出一个合法的电子邮件地址至少应当满足以下几个条件：<br /><br />1.&nbsp;必须包含一个并且只有一个符号“@”<br /><br />2.&nbsp;必须包含至少一个至多三个符号“.”<br /><br />3.&nbsp;第一个字符不得是“@”或者“.”<br /><br />4.&nbsp;不允许出现“@.”或者.@<br /><br />5.&nbsp;结尾不得是字符“@”或者“.”<br /><br />所以根据以上的原则和上面表中的语法，我们很容易的就可以得到需要的模板如下："(\w)+[@]{1}(\w)+[.]{1，3}(\w)+"<br /><br />接下来我们仔细分析一下这个模板,首先“\w”表示邮件的开始字符只能是包含下划线的单词字符，这样，满足了第三个条件；“[@]{1}”表示在电子邮件中应当匹配并且只能匹配一次字符“@”,满足了条件一；同样的“[.]{1，3}”表示在电子邮件中至少匹配1个至多匹配3个字符“.”&nbsp;，满足了第二个条件；模板最后的“(\w)+”表示结尾的字符只能是包含下划线在内的单词字符，满足了条件五；模板中间的“(\w)+”满足了条件四。<br /><br />然后，我们就直接调用刚才的那个函数CheckExp("(\w)+[@]{1}(\w)+[.]{1}(\w)+",待校验的字符串)就好了，如果返回True就表示数据是合法的，否则就是不正确的，怎么样，简单吧。我们还可以写出来校验身份证号码的模板："([0-9]){15}"；校验URL的模板："^http://{1}((\w)+[.]){1,3}"等等；<br /><br />正则表达式对象中最重要的属性就是：“Pattern”属性,只要真正掌握了这个属性，才可以自由的运用正则表达式对象来为我们的数据校验进行服务。&nbsp;<br /><br />例如，"\11"&nbsp;和&nbsp;"\011"&nbsp;都与一个制表符匹配。"\0011"等价于"\001"&nbsp;与&nbsp;"1"。八进制换码值不得超过&nbsp;256。否则，只有前两个字符被视为表达式的一部分。允许在正则表达式中使用ASCII码。<br />在这段程序程序中，使用“New&nbsp;RegExp”来得到一个正则表达式对象，然后对这个对象进行正则匹配模板的赋值，也就是告诉正则表达式对象，你想要匹配一个什么样子的模板，然后使用方法Test来检测待处理的数据究竟和我们给出的模版是否相匹配，如果不匹配，那就表明待处理的数据不是合法的数据，从而也就实现了数据合法性的校验，我们可以看出，使用一个设计合理的匹配模板，我们可以轻松的校验一批格式类似的数据信息。]]>
      </summary>
      <category term="" label="其他" scheme="http://dev.mo.cn/cat_diary_18.html" />
   </entry>
   <entry>
      <title type="html">阳历转农历(VB)</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_36.html" />
      <updated>2008-6-3 16:55:13</updated>
      <published>2008-6-3 16:55:13</published>
      <id>http://dev.mo.cn/article_36.html</id>
      <summary type="html">
      <![CDATA[[codd]<br /><br />&lt;%<br /><br />Function&nbsp;Nongli()<br /><br />Dim&nbsp;WeekName(7),&nbsp;MonthAdd(11),&nbsp;NongliData(99),&nbsp;TianGan(9),&nbsp;DiZhi(11),&nbsp;ShuXiang(11),&nbsp;DayName(30),&nbsp;MonName(12)<br /><br />Dim&nbsp;curTime,&nbsp;curYear,&nbsp;curMonth,&nbsp;curDay,&nbsp;curWeekday<br /><br />Dim&nbsp;GongliStr,&nbsp;WeekdayStr,&nbsp;NongliStr,&nbsp;NongliDayStr<br /><br />Dim&nbsp;i,&nbsp;m,&nbsp;n,&nbsp;k,&nbsp;isEnd,&nbsp;bit,&nbsp;TheDate<br /><br />'获取当前系统时间<br /><br />curTime&nbsp;=&nbsp;Date<br /><br />'星期名<br /><br />WeekName(0)&nbsp;=&nbsp;"&nbsp;*&nbsp;"<br /><br />WeekName(1)&nbsp;=&nbsp;"星期日"<br /><br />WeekName(2)&nbsp;=&nbsp;"星期一"<br /><br />WeekName(3)&nbsp;=&nbsp;"星期二"<br /><br />WeekName(4)&nbsp;=&nbsp;"星期三"<br /><br />WeekName(5)&nbsp;=&nbsp;"星期四"<br /><br />WeekName(6)&nbsp;=&nbsp;"星期五"<br /><br />WeekName(7)&nbsp;=&nbsp;"星期六"<br /><br /><br /><br />'天干名称<br /><br />TianGan(0)&nbsp;=&nbsp;"甲"<br /><br />TianGan(1)&nbsp;=&nbsp;"乙"<br /><br />TianGan(2)&nbsp;=&nbsp;"丙"<br /><br />TianGan(3)&nbsp;=&nbsp;"丁"<br /><br />TianGan(4)&nbsp;=&nbsp;"戊"<br /><br />TianGan(5)&nbsp;=&nbsp;"己"<br /><br />TianGan(6)&nbsp;=&nbsp;"庚"<br /><br />TianGan(7)&nbsp;=&nbsp;"辛"<br /><br />TianGan(8)&nbsp;=&nbsp;"壬"<br /><br />TianGan(9)&nbsp;=&nbsp;"癸"<br /><br /><br /><br />'地支名称<br /><br />DiZhi(0)&nbsp;=&nbsp;"子"<br /><br />DiZhi(1)&nbsp;=&nbsp;"丑"<br /><br />DiZhi(2)&nbsp;=&nbsp;"寅"<br /><br />DiZhi(3)&nbsp;=&nbsp;"卯"<br /><br />DiZhi(4)&nbsp;=&nbsp;"辰"<br /><br />DiZhi(5)&nbsp;=&nbsp;"巳"<br /><br />DiZhi(6)&nbsp;=&nbsp;"午"<br /><br />DiZhi(7)&nbsp;=&nbsp;"未"<br /><br />DiZhi(8)&nbsp;=&nbsp;"申"<br /><br />DiZhi(9)&nbsp;=&nbsp;"酉"<br /><br />DiZhi(10)&nbsp;=&nbsp;"戌"<br /><br />DiZhi(11)&nbsp;=&nbsp;"亥"<br /><br /><br /><br />'属相名称<br /><br />ShuXiang(0)&nbsp;=&nbsp;"鼠"<br /><br />ShuXiang(1)&nbsp;=&nbsp;"牛"<br /><br />ShuXiang(2)&nbsp;=&nbsp;"虎"<br /><br />ShuXiang(3)&nbsp;=&nbsp;"兔"<br /><br />ShuXiang(4)&nbsp;=&nbsp;"龙"<br /><br />ShuXiang(5)&nbsp;=&nbsp;"蛇"<br /><br />ShuXiang(6)&nbsp;=&nbsp;"马"<br /><br />ShuXiang(7)&nbsp;=&nbsp;"羊"<br /><br />ShuXiang(8)&nbsp;=&nbsp;"猴"<br /><br />ShuXiang(9)&nbsp;=&nbsp;"鸡"<br /><br />ShuXiang(10)&nbsp;=&nbsp;"狗"<br /><br />ShuXiang(11)&nbsp;=&nbsp;"猪"<br /><br /><br /><br />'农历日期名<br /><br />DayName(0)&nbsp;=&nbsp;"*"<br /><br />DayName(1)&nbsp;=&nbsp;"初一"<br /><br />DayName(2)&nbsp;=&nbsp;"初二"<br /><br />DayName(3)&nbsp;=&nbsp;"初三"<br /><br />DayName(4)&nbsp;=&nbsp;"初四"<br /><br />DayName(5)&nbsp;=&nbsp;"初五"<br /><br />DayName(6)&nbsp;=&nbsp;"初六"<br /><br />DayName(7)&nbsp;=&nbsp;"初七"<br /><br />DayName(8)&nbsp;=&nbsp;"初八"<br /><br />DayName(9)&nbsp;=&nbsp;"初九"<br /><br />DayName(10)&nbsp;=&nbsp;"初十"<br /><br />DayName(11)&nbsp;=&nbsp;"十一"<br /><br />DayName(12)&nbsp;=&nbsp;"十二"<br /><br />DayName(13)&nbsp;=&nbsp;"十三"<br /><br />DayName(14)&nbsp;=&nbsp;"十四"<br /><br />DayName(15)&nbsp;=&nbsp;"十五"<br /><br />DayName(16)&nbsp;=&nbsp;"十六"<br /><br />DayName(17)&nbsp;=&nbsp;"十七"<br /><br />DayName(18)&nbsp;=&nbsp;"十八"<br /><br />DayName(19)&nbsp;=&nbsp;"十九"<br /><br />DayName(20)&nbsp;=&nbsp;"二十"<br /><br />DayName(21)&nbsp;=&nbsp;"廿一"<br /><br />DayName(22)&nbsp;=&nbsp;"廿二"<br /><br />DayName(23)&nbsp;=&nbsp;"廿三"<br /><br />DayName(24)&nbsp;=&nbsp;"廿四"<br /><br />DayName(25)&nbsp;=&nbsp;"廿五"<br /><br />DayName(26)&nbsp;=&nbsp;"廿六"<br /><br />DayName(27)&nbsp;=&nbsp;"廿七"<br /><br />DayName(28)&nbsp;=&nbsp;"廿八"<br /><br />DayName(29)&nbsp;=&nbsp;"廿九"<br /><br />DayName(30)&nbsp;=&nbsp;"三十"<br /><br /><br /><br />'农历月份名<br /><br />MonName(0)&nbsp;=&nbsp;"*"<br /><br />MonName(1)&nbsp;=&nbsp;"正"<br /><br />MonName(2)&nbsp;=&nbsp;"二"<br /><br />MonName(3)&nbsp;=&nbsp;"三"<br /><br />MonName(4)&nbsp;=&nbsp;"四"<br /><br />MonName(5)&nbsp;=&nbsp;"五"<br /><br />MonName(6)&nbsp;=&nbsp;"六"<br /><br />MonName(7)&nbsp;=&nbsp;"七"<br /><br />MonName(8)&nbsp;=&nbsp;"八"<br /><br />MonName(9)&nbsp;=&nbsp;"九"<br /><br />MonName(10)&nbsp;=&nbsp;"十"<br /><br />MonName(11)&nbsp;=&nbsp;"十一"<br /><br />MonName(12)&nbsp;=&nbsp;"腊"<br /><br /><br /><br />'公历每月前面的天数<br /><br />MonthAdd(0)&nbsp;=&nbsp;0<br /><br />MonthAdd(1)&nbsp;=&nbsp;31<br /><br />MonthAdd(2)&nbsp;=&nbsp;59<br /><br />MonthAdd(3)&nbsp;=&nbsp;90<br /><br />MonthAdd(4)&nbsp;=&nbsp;120<br /><br />MonthAdd(5)&nbsp;=&nbsp;151<br /><br />MonthAdd(6)&nbsp;=&nbsp;181<br /><br />MonthAdd(7)&nbsp;=&nbsp;212<br /><br />MonthAdd(8)&nbsp;=&nbsp;243<br /><br />MonthAdd(9)&nbsp;=&nbsp;273<br /><br />MonthAdd(10)&nbsp;=&nbsp;304<br /><br />MonthAdd(11)&nbsp;=&nbsp;334<br /><br />'农历数据<br /><br />NongliData(0)&nbsp;=&nbsp;2635<br /><br />NongliData(1)&nbsp;=&nbsp;333387<br /><br />NongliData(2)&nbsp;=&nbsp;1701<br /><br />NongliData(3)&nbsp;=&nbsp;1748<br /><br />NongliData(4)&nbsp;=&nbsp;267701<br /><br />NongliData(5)&nbsp;=&nbsp;694<br /><br />NongliData(6)&nbsp;=&nbsp;2391<br /><br />NongliData(7)&nbsp;=&nbsp;133423<br /><br />NongliData(8)&nbsp;=&nbsp;1175<br /><br />NongliData(9)&nbsp;=&nbsp;396438<br /><br />NongliData(10)&nbsp;=&nbsp;3402<br /><br />NongliData(11)&nbsp;=&nbsp;3749<br /><br />NongliData(12)&nbsp;=&nbsp;331177<br /><br />NongliData(13)&nbsp;=&nbsp;1453<br /><br />NongliData(14)&nbsp;=&nbsp;694<br /><br />NongliData(15)&nbsp;=&nbsp;201326<br /><br />NongliData(16)&nbsp;=&nbsp;2350<br /><br />NongliData(17)&nbsp;=&nbsp;465197<br /><br />NongliData(18)&nbsp;=&nbsp;3221<br /><br />NongliData(19)&nbsp;=&nbsp;3402<br /><br />NongliData(20)&nbsp;=&nbsp;400202<br /><br />NongliData(21)&nbsp;=&nbsp;2901<br /><br />NongliData(22)&nbsp;=&nbsp;1386<br /><br />NongliData(23)&nbsp;=&nbsp;267611<br /><br />NongliData(24)&nbsp;=&nbsp;605<br /><br />NongliData(25)&nbsp;=&nbsp;2349<br /><br />NongliData(26)&nbsp;=&nbsp;137515<br /><br />NongliData(27)&nbsp;=&nbsp;2709<br /><br />NongliData(28)&nbsp;=&nbsp;464533<br /><br />NongliData(29)&nbsp;=&nbsp;1738<br /><br />NongliData(30)&nbsp;=&nbsp;2901<br /><br />NongliData(31)&nbsp;=&nbsp;330421<br /><br />NongliData(32)&nbsp;=&nbsp;1242<br /><br />NongliData(33)&nbsp;=&nbsp;2651<br /><br />NongliData(34)&nbsp;=&nbsp;199255<br /><br />NongliData(35)&nbsp;=&nbsp;1323<br /><br />NongliData(36)&nbsp;=&nbsp;529706<br /><br />NongliData(37)&nbsp;=&nbsp;3733<br /><br />NongliData(38)&nbsp;=&nbsp;1706<br /><br />NongliData(39)&nbsp;=&nbsp;398762<br /><br />NongliData(40)&nbsp;=&nbsp;2741<br /><br />NongliData(41)&nbsp;=&nbsp;1206<br /><br />NongliData(42)&nbsp;=&nbsp;267438<br /><br />NongliData(43)&nbsp;=&nbsp;2647<br /><br />NongliData(44)&nbsp;=&nbsp;1318<br /><br />NongliData(45)&nbsp;=&nbsp;204070<br /><br />NongliData(46)&nbsp;=&nbsp;3477<br /><br />NongliData(47)&nbsp;=&nbsp;461653<br /><br />NongliData(48)&nbsp;=&nbsp;1386<br /><br />NongliData(49)&nbsp;=&nbsp;2413<br /><br />NongliData(50)&nbsp;=&nbsp;330077<br /><br />NongliData(51)&nbsp;=&nbsp;1197<br /><br />NongliData(52)&nbsp;=&nbsp;2637<br /><br />NongliData(53)&nbsp;=&nbsp;268877<br /><br />NongliData(54)&nbsp;=&nbsp;3365<br /><br />NongliData(55)&nbsp;=&nbsp;531109<br /><br />NongliData(56)&nbsp;=&nbsp;2900<br /><br />NongliData(57)&nbsp;=&nbsp;2922<br /><br />NongliData(58)&nbsp;=&nbsp;398042<br /><br />NongliData(59)&nbsp;=&nbsp;2395<br /><br />NongliData(60)&nbsp;=&nbsp;1179<br /><br />NongliData(61)&nbsp;=&nbsp;267415<br /><br />NongliData(62)&nbsp;=&nbsp;2635<br /><br />NongliData(63)&nbsp;=&nbsp;661067<br /><br />NongliData(64)&nbsp;=&nbsp;1701<br /><br />NongliData(65)&nbsp;=&nbsp;1748<br /><br />NongliData(66)&nbsp;=&nbsp;398772<br /><br />NongliData(67)&nbsp;=&nbsp;2742<br /><br />NongliData(68)&nbsp;=&nbsp;2391<br /><br />NongliData(69)&nbsp;=&nbsp;330031<br /><br />NongliData(70)&nbsp;=&nbsp;1175<br /><br />NongliData(71)&nbsp;=&nbsp;1611<br /><br />NongliData(72)&nbsp;=&nbsp;200010<br /><br />NongliData(73)&nbsp;=&nbsp;3749<br /><br />NongliData(74)&nbsp;=&nbsp;527717<br /><br />NongliData(75)&nbsp;=&nbsp;1452<br /><br />NongliData(76)&nbsp;=&nbsp;2742<br /><br />NongliData(77)&nbsp;=&nbsp;332397<br /><br />NongliData(78)&nbsp;=&nbsp;2350<br /><br />NongliData(79)&nbsp;=&nbsp;3222<br /><br />NongliData(80)&nbsp;=&nbsp;268949<br /><br />NongliData(81)&nbsp;=&nbsp;3402<br /><br />NongliData(82)&nbsp;=&nbsp;3493<br /><br />NongliData(83)&nbsp;=&nbsp;133973<br /><br />NongliData(84)&nbsp;=&nbsp;1386<br /><br />NongliData(85)&nbsp;=&nbsp;464219<br /><br />NongliData(86)&nbsp;=&nbsp;605<br /><br />NongliData(87)&nbsp;=&nbsp;2349<br /><br />NongliData(88)&nbsp;=&nbsp;334123<br /><br />NongliData(89)&nbsp;=&nbsp;2709<br /><br />NongliData(90)&nbsp;=&nbsp;2890<br /><br />NongliData(91)&nbsp;=&nbsp;267946<br /><br />NongliData(92)&nbsp;=&nbsp;2773<br /><br />NongliData(93)&nbsp;=&nbsp;592565<br /><br />NongliData(94)&nbsp;=&nbsp;1210<br /><br />NongliData(95)&nbsp;=&nbsp;2651<br /><br />NongliData(96)&nbsp;=&nbsp;395863<br /><br />NongliData(97)&nbsp;=&nbsp;1323<br /><br />NongliData(98)&nbsp;=&nbsp;2707<br /><br />NongliData(99)&nbsp;=&nbsp;265877<br /><br />'生成当前公历年、月、日&nbsp;==&gt;&nbsp;GongliStr<br /><br />curYear&nbsp;=&nbsp;Year(curTime)<br /><br />curMonth&nbsp;=&nbsp;Month(curTime)<br /><br />curDay&nbsp;=&nbsp;Day(curTime)<br /><br /><br /><br />GongliStr&nbsp;=&nbsp;curYear&nbsp;&&nbsp;"年"<br /><br />If&nbsp;(curMonth&nbsp;&lt;&nbsp;10)&nbsp;Then<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;GongliStr&nbsp;=&nbsp;GongliStr&nbsp;&&nbsp;"0"&nbsp;&&nbsp;curMonth&nbsp;&&nbsp;"月"<br /><br />Else<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;GongliStr&nbsp;=&nbsp;GongliStr&nbsp;&&nbsp;curMonth&nbsp;&&nbsp;"月"<br /><br />End&nbsp;If<br /><br />If&nbsp;(curDay&nbsp;&lt;&nbsp;10)&nbsp;Then<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;GongliStr&nbsp;=&nbsp;GongliStr&nbsp;&&nbsp;"0"&nbsp;&&nbsp;curDay&nbsp;&&nbsp;"日"<br /><br />Else<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;GongliStr&nbsp;=&nbsp;GongliStr&nbsp;&&nbsp;curDay&nbsp;&&nbsp;"日"<br /><br />End&nbsp;If<br /><br /><br /><br />'生成当前公历星期&nbsp;==&gt;&nbsp;WeekdayStr<br /><br />curWeekday&nbsp;=&nbsp;Weekday(curTime)<br /><br />WeekdayStr&nbsp;=&nbsp;WeekName(curWeekday)<br /><br /><br /><br />'计算到初始时间1921年2月8日的天数：1921-2-8(正月初一)<br /><br />TheDate&nbsp;=&nbsp;(curYear&nbsp;-&nbsp;1921)&nbsp;*&nbsp;365&nbsp;+&nbsp;Int((curYear&nbsp;-&nbsp;1921)&nbsp;/&nbsp;4)&nbsp;+&nbsp;curDay&nbsp;+&nbsp;MonthAdd(curMonth&nbsp;-&nbsp;1)&nbsp;-&nbsp;38<br /><br />If&nbsp;((curYear&nbsp;Mod&nbsp;4)&nbsp;=&nbsp;0&nbsp;And&nbsp;curMonth&nbsp;&gt;&nbsp;2)&nbsp;Then<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;TheDate&nbsp;=&nbsp;TheDate&nbsp;+&nbsp;1<br /><br />End&nbsp;If<br /><br /><br /><br />'计算农历天干、地支、月、日<br /><br />isEnd&nbsp;=&nbsp;0<br /><br />m&nbsp;=&nbsp;0<br /><br /><br /><br />Do<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;(NongliData(m)&nbsp;&lt;&nbsp;4095)&nbsp;Then<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;=&nbsp;11<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Else<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;=&nbsp;12<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;=&nbsp;k<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Do<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;(n&nbsp;&lt;&nbsp;0)&nbsp;Then<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit&nbsp;Do<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;'获取NongliData(m)的第n个二进制位的值<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;bit&nbsp;=&nbsp;NongliData(m)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;For&nbsp;q&nbsp;=&nbsp;1&nbsp;To&nbsp;n&nbsp;Step&nbsp;1<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bit&nbsp;=&nbsp;Int(bit&nbsp;/&nbsp;2)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Next<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;bit&nbsp;=&nbsp;bit&nbsp;Mod&nbsp;2<br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;(TheDate&nbsp;&lt;=&nbsp;29&nbsp;+&nbsp;bit)&nbsp;Then<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isEnd&nbsp;=&nbsp;1<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit&nbsp;Do<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;TheDate&nbsp;=&nbsp;TheDate&nbsp;-&nbsp;29&nbsp;-&nbsp;bit<br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;=&nbsp;n&nbsp;-&nbsp;1<br /><br />&nbsp;&nbsp;Loop<br /><br /><br /><br />&nbsp;&nbsp;If&nbsp;(isEnd&nbsp;=&nbsp;1)&nbsp;Then<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit&nbsp;Do<br /><br />&nbsp;&nbsp;End&nbsp;If<br /><br /><br /><br />&nbsp;&nbsp;m&nbsp;=&nbsp;m&nbsp;+&nbsp;1<br /><br />Loop<br /><br /><br /><br />curYear&nbsp;=&nbsp;1921&nbsp;+&nbsp;m<br /><br />curMonth&nbsp;=&nbsp;k&nbsp;-&nbsp;n&nbsp;+&nbsp;1<br /><br />curDay&nbsp;=&nbsp;TheDate<br /><br /><br /><br />If&nbsp;(k&nbsp;=&nbsp;12)&nbsp;Then<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;(curMonth&nbsp;=&nbsp;(Int(NongliData(m)&nbsp;/&nbsp;65536)&nbsp;+&nbsp;1))&nbsp;Then<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curMonth&nbsp;=&nbsp;1&nbsp;-&nbsp;curMonth<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ElseIf&nbsp;(curMonth&nbsp;&gt;&nbsp;(Int(NongliData(m)&nbsp;/&nbsp;65536)&nbsp;+&nbsp;1))&nbsp;Then<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curMonth&nbsp;=&nbsp;curMonth&nbsp;-&nbsp;1<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br /><br /><br /><br />End&nbsp;If<br /><br /><br /><br />'生成农历天干、地支、属相&nbsp;==&gt;&nbsp;NongliStr<br /><br />NongliStr&nbsp;=&nbsp;TianGan(((curYear&nbsp;-&nbsp;4)&nbsp;Mod&nbsp;60)&nbsp;Mod&nbsp;10)&nbsp;&&nbsp;DiZhi(((curYear&nbsp;-&nbsp;4)&nbsp;Mod&nbsp;60)&nbsp;Mod&nbsp;12)&nbsp;<br /><br />NongliStr&nbsp;=&nbsp;NongliStr&nbsp;&&nbsp;"&lt;font&nbsp;color='#ff9000'&gt;&lt;b&gt;("&nbsp;&&nbsp;ShuXiang(((curYear&nbsp;-&nbsp;4)&nbsp;Mod&nbsp;60)&nbsp;Mod&nbsp;12)&nbsp;&&nbsp;")&lt;/b&gt;&lt;/font&gt;年"<br /><br />'生成农历月、日&nbsp;==&gt;&nbsp;NongljDayStr<br /><br />If&nbsp;(curMonth&nbsp;&lt;&nbsp;1)&nbsp;Then<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;NongliDayStr&nbsp;=&nbsp;"闰"&nbsp;&&nbsp;MonName(-1&nbsp;*&nbsp;curMonth)<br /><br />Else<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;NongliDayStr&nbsp;=&nbsp;MonName(curMonth)<br /><br />End&nbsp;If<br /><br />NongliDayStr&nbsp;=&nbsp;NongliDayStr&nbsp;&&nbsp;"月"<br /><br />NongliDayStr&nbsp;=&nbsp;NongliDayStr&nbsp;&&nbsp;DayName(curDay)<br /><br />NongLi=&nbsp;NongliStr&nbsp;&&nbsp;"&nbsp;&nbsp;&nbsp;"&nbsp;&&nbsp;NongliDayStr<br /><br />end&nbsp;Function<br /><br /><br /><br />%&gt;<br /><br />[/code]]]>
      </summary>
      <category term="" label="其他" scheme="http://dev.mo.cn/cat_diary_18.html" />
   </entry>
   <entry>
      <title type="html">Jmail发邮件代码(测试成功)</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_35.html" />
      <updated>2008-6-3 16:26:56</updated>
      <published>2008-6-3 16:26:56</published>
      <id>http://dev.mo.cn/article_35.html</id>
      <summary type="html">
      <![CDATA[按照下面的说明调用SendMail函数！&nbsp;<br /><br />Jmail&nbsp;4.4.0&nbsp;Free&nbsp;Edition可以到这里下载<a href="http://dev.mo.cn/detial.asp?id=60" target="new">http://dev.mo.cn/detial.asp?id=60</a>(注册方法,拷贝jmail.dll到system32文件夹,开始-运行-输入regsvr32&nbsp;jmail.dll-确定)&nbsp;<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br /><br />&lt;%<br /><br />'按照下面方法调用<br /><br />response.write&nbsp;SendMail("发邮件服务器，例smtp.126.com","你的登陆帐号","你的登陆密码","邮件标题","收件人地址","发件人姓名","邮件内容","发件人邮箱地址")<br /><br /><br /><br />'****************************************************<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;'参数说明<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'Subject&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;邮件标题<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'MailAddress&nbsp;:&nbsp;发件服务器的地址,如smtp.163.com<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'LoginName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;----登录用户名(不需要请填写"")<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'LoginPass&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;----用户密码(不需要请填写"")<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'Email&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;收件人邮件地址<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'Sender&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;发件人姓名<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'Content&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;邮件内容<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'Fromer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;发件人的邮件地址<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;'****************************************************<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Public&nbsp;Function&nbsp;SendMail(MailAddress,&nbsp;LoginName,&nbsp;LoginPass,&nbsp;Subject,&nbsp;Email,&nbsp;Sender,&nbsp;Content,&nbsp;Fromer)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;On&nbsp;Error&nbsp;Resume&nbsp;Next<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;JMail<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;jmail&nbsp;=&nbsp;Server.CreateObject("JMAIL.Message")&nbsp;'建立发送邮件的对象<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmail.silent&nbsp;=&nbsp;true&nbsp;'屏蔽例外错误，返回FALSE跟TRUE两值j<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmail.Charset&nbsp;=&nbsp;"GB2312"&nbsp;'邮件的文字编码为国标<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmail.ContentType&nbsp;=&nbsp;"text/html"&nbsp;'邮件的格式为HTML格式<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmail.AddRecipient&nbsp;Email&nbsp;'邮件收件人的地址<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmail.From&nbsp;=&nbsp;Fromer&nbsp;'发件人的E-MAIL地址<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmail.FromName&nbsp;=&nbsp;Sender<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;LoginName&nbsp;&lt;&gt;&nbsp;""&nbsp;And&nbsp;LoginPass&nbsp;&lt;&gt;&nbsp;""&nbsp;Then<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JMail.MailServerUserName&nbsp;=&nbsp;LoginName&nbsp;'您的邮件服务器登录名<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JMail.MailServerPassword&nbsp;=&nbsp;LoginPass&nbsp;'登录密码<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmail.Subject&nbsp;=&nbsp;Subject&nbsp;'邮件的标题&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JMail.Body&nbsp;=&nbsp;Content<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JMail.Priority&nbsp;=&nbsp;1'邮件的紧急程序，1&nbsp;为最快，5&nbsp;为最慢，&nbsp;3&nbsp;为默认值<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmail.Send(MailAddress)&nbsp;'执行邮件发送（通过邮件服务器地址）<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmail.Close()&nbsp;'关闭对象<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;JMail&nbsp;=&nbsp;Nothing<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;Err&nbsp;Then<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendMail&nbsp;=&nbsp;Err.Description<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Err.Clear<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendMail&nbsp;=&nbsp;"邮件发送完毕!"<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;Function<br /><br />%&gt;<br /><br /></div></div><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />]]>
      </summary>
      <category term="" label="IIS外部组件" scheme="http://dev.mo.cn/cat_diary_4.html" />
   </entry>
   <entry>
      <title type="html">ASP常用数据库连接及操作的方法和技巧</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_34.html" />
      <updated>2008-6-3 13:34:44</updated>
      <published>2008-6-3 13:34:44</published>
      <id>http://dev.mo.cn/article_34.html</id>
      <summary type="html">
      <![CDATA[1.ASP连接Access数据库&nbsp;<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;%&nbsp;<br />dim&nbsp;conn,mdbfile&nbsp;<br />mdbfile=server.mappath("数据库名称.mdb")&nbsp;<br />set&nbsp;conn=server.createobject("adodb.connection")&nbsp;<br />conn.open&nbsp;"driver={microsoft&nbsp;access&nbsp;driver&nbsp;(*.mdb)};uid=admin;pwd=数据库密码;dbq="&mdbfile&nbsp;<br />%&gt;&nbsp;<br /></div></div><br />2.&nbsp;ASP与SQL数据库连接：&nbsp;<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;%&nbsp;<br />dim&nbsp;conn&nbsp;<br />set&nbsp;conn=server.createobject("ADODB.connection")&nbsp;<br />conn.open&nbsp;"PROVIDER=SQLOLEDB;DATA&nbsp;SOURCE=SQL服务器名称或IP地址;UID=sa;PWD=数据库密码;DATABASE=数据库名称"<br />%&gt;&nbsp;<br /></div></div><br />建立记录集对象：&nbsp;<br />Set&nbsp;rs=server.createobject("adodb.recordset")&nbsp;<br />rs.open&nbsp;SQL语句,conn,3,2&nbsp;<br /><br />3.&nbsp;SQL常用命令使用方法：&nbsp;<br /><br /><br />(1)&nbsp;数据记录筛选：&nbsp;<br /><br />sql="select&nbsp;*&nbsp;from&nbsp;数据表&nbsp;where&nbsp;字段名=字段值&nbsp;order&nbsp;by&nbsp;字段名&nbsp;"&nbsp;<br />sql="select&nbsp;*&nbsp;from&nbsp;数据表&nbsp;where&nbsp;字段名&nbsp;like&nbsp;‘%字段值%‘&nbsp;order&nbsp;by&nbsp;字段名&nbsp;"&nbsp;<br />sql="select&nbsp;top&nbsp;10&nbsp;*&nbsp;from&nbsp;数据表&nbsp;where&nbsp;字段名&nbsp;order&nbsp;by&nbsp;字段名&nbsp;"&nbsp;<br />sql="select&nbsp;*&nbsp;from&nbsp;数据表&nbsp;where&nbsp;字段名&nbsp;in&nbsp;(‘值1‘,‘值2‘,‘值3‘)"&nbsp;<br />sql="select&nbsp;*&nbsp;from&nbsp;数据表&nbsp;where&nbsp;字段名&nbsp;between&nbsp;值1&nbsp;and&nbsp;值2"&nbsp;<br /><br />(2)&nbsp;更新数据记录：&nbsp;<br /><br />sql="update&nbsp;数据表&nbsp;set&nbsp;字段名=字段值&nbsp;where&nbsp;条件表达式"&nbsp;<br />sql="update&nbsp;数据表&nbsp;set&nbsp;字段1=值1,字段2=值2&nbsp;……&nbsp;字段n=值n&nbsp;where&nbsp;条件表达式"&nbsp;<br /><br />(3)&nbsp;删除数据记录：&nbsp;<br /><br />sql="delete&nbsp;from&nbsp;数据表&nbsp;where&nbsp;条件表达式"&nbsp;<br />sql="delete&nbsp;from&nbsp;数据表"&nbsp;(将数据表所有记录删除)&nbsp;<br /><br />(4)&nbsp;添加数据记录：&nbsp;<br /><br />sql="insert&nbsp;into&nbsp;数据表&nbsp;(字段1,字段2,字段3&nbsp;…)&nbsp;valuess&nbsp;(值1,值2,值3&nbsp;…)"&nbsp;<br />sql="insert&nbsp;into&nbsp;目标数据表&nbsp;select&nbsp;*&nbsp;from&nbsp;源数据表"&nbsp;(把源数据表的记录添加到目标数据表)&nbsp;<br /><br />(5)&nbsp;数据记录统计函数：&nbsp;<br /><br />AVG(字段名)&nbsp;得出一个表格栏平均值&nbsp;<br />COUNT(*&nbsp;&brvbar;字段名)&nbsp;对数据行数的统计或对某一栏有值的数据行数统计&nbsp;<br />MAX(字段名)&nbsp;取得一个表格栏最大的值&nbsp;<br />MIN(字段名)&nbsp;取得一个表格栏最小的值&nbsp;<br />SUM(字段名)&nbsp;把数据栏的值相加&nbsp;<br /><br />引用以上函数的方法：&nbsp;<br /><br />sql="select&nbsp;sum(字段名)&nbsp;as&nbsp;别名&nbsp;from&nbsp;数据表&nbsp;where&nbsp;条件表达式"&nbsp;<br />set&nbsp;rs=conn.excute(sql)&nbsp;<br /><br />用&nbsp;rs("别名")&nbsp;获取统的计值，其它函数运用同上。&nbsp;<br /><br />(5)&nbsp;数据表的建立和删除：&nbsp;<br /><br />CREATE&nbsp;TABLE&nbsp;数据表名称(字段1&nbsp;类型1(长度),字段2&nbsp;类型2(长度)&nbsp;……&nbsp;)&nbsp;<br /><br />例：CREATE&nbsp;TABLE&nbsp;tab01(name&nbsp;varchar(50),datetime&nbsp;default&nbsp;now())&nbsp;<br /><br />DROP&nbsp;TABLE&nbsp;数据表名称&nbsp;(永久性删除一个数据表)&nbsp;<br /><br />(6)&nbsp;记录集对象的方法：&nbsp;<br />rs.movenext&nbsp;将记录指针从当前的位置向下移一行&nbsp;<br />rs.moveprevious&nbsp;将记录指针从当前的位置向上移一行&nbsp;<br />rs.movefirst&nbsp;将记录指针移到数据表第一行&nbsp;<br />rs.movelast&nbsp;将记录指针移到数据表最后一行&nbsp;<br />rs.absoluteposition=N&nbsp;将记录指针移到数据表第N行&nbsp;<br />rs.absolutepage=N&nbsp;将记录指针移到第N页的第一行&nbsp;<br />rs.pagesize=N&nbsp;设置每页为N条记录&nbsp;<br />rs.pagecount&nbsp;根据&nbsp;pagesize&nbsp;的设置返回总页数&nbsp;<br />rs.recordcount&nbsp;返回记录总数&nbsp;<br />rs.bof&nbsp;返回记录指针是否超出数据表首端，true表示是，false为否&nbsp;<br />rs.eof&nbsp;返回记录指针是否超出数据表末端，true表示是，false为否&nbsp;<br />rs.delete&nbsp;删除当前记录，但记录指针不会向下移动&nbsp;<br />rs.addnew&nbsp;添加记录到数据表末端&nbsp;<br />rs.update&nbsp;更新数据表记录&nbsp;<br /><br />判断所填数据是数字型&nbsp;<br /><br />if&nbsp;not&nbsp;isNumeric(request("字段名称"))&nbsp;then&nbsp;<br />response.write&nbsp;"不是数字"&nbsp;<br />else&nbsp;<br />response.write&nbsp;"数字"&nbsp;<br />end&nbsp;if&nbsp;<br /><br />经常使用到有关数据库的操作。包括连接代码、SQL命令等等，又不曾刻意去记忆它们（我本人是不愿意去记这东东），所以常常在用到的时候又去查书本，翻来翻去。一些比较少用的数据库还不一定能顺利找到，所以现在把它们全归纳到这里，提供大家参考。&nbsp;<br /><br />一、数据库的连接方法：&nbsp;<br />1.Access数据库的DSN-less连接方法:&nbsp;<br />set&nbsp;adocon=Server.Createobject("adodb.connection")&nbsp;<br />adoconn.Open"Driver={Microsoft&nbsp;Access&nbsp;Driver(*.mdb)};DBQ="&&nbsp;_&nbsp;<br />Server.MapPath("数据库所在路径")&nbsp;<br /><br />2.Access&nbsp;OLE&nbsp;DB连接方法：&nbsp;<br /><br />set&nbsp;adocon=Server.Createobject("adodb.connection")&nbsp;<br />adocon.open"Provider=Microsoft.Jet.OLEDB.4.0;"&&nbsp;_&nbsp;<br />"Data&nbsp;Source="&nbsp;&&nbsp;Server.MapPath("数据库所在路径")&nbsp;<br /><br />3.SQL&nbsp;server连接方法：&nbsp;<br /><br />set&nbsp;adocon=server.createobject("adodb.adodb.connection")&nbsp;<br />adocon.Open"Driver={SQL&nbsp;Server};Server=(Local);UID=***;PWD=***;"&&nbsp;_&nbsp;<br />"database=数据库名;"&nbsp;<br /><br />4.SQL&nbsp;server&nbsp;OLE&nbsp;DB连接方法:&nbsp;<br /><br />set&nbsp;adocon=Server.Createobject("adodb.connection")&nbsp;<br />adocon.open"provider=SQLOLEDB.1;Data&nbsp;Source=RITANT4;"&&nbsp;_&nbsp;<br />"user&nbsp;ID=***;Password=***;"&&nbsp;_&nbsp;<br />"inital&nbsp;Catalog=数据库名"&nbsp;<br /><br />5.Oracle&nbsp;连接方法:&nbsp;<br /><br />set&nbsp;adocon=Server.Createobject("adodb.connection")&nbsp;<br />adocon.open"Driver={microsoft&nbsp;odbc&nbsp;for&nbsp;oracle};server=oraclesever.world;uid=admin;pwd=pass;"&nbsp;<br /><br />6.Oracle&nbsp;OLE&nbsp;DB&nbsp;连接方法:&nbsp;<br /><br />set&nbsp;adocon=Server.Createobject("adodb.connection")&nbsp;<br />adocon.open"Provider=OraOLEDB.Oracle;data&nbsp;source=dbname;user&nbsp;id=admin;password=pass;"&nbsp;<br /><br />7.dBase&nbsp;连接方法:&nbsp;<br /><br />set&nbsp;adocon=Server.Createobject("adodb.connection")&nbsp;<br />adocon.open"Driver={microsoft&nbsp;dbase&nbsp;driver(*.dbf)};driverid=277;dbq=------------;"&nbsp;<br /><br />8.mySQL&nbsp;连接方法:&nbsp;<br /><br />set&nbsp;adocon=Server.Createobject("adodb.connection")&nbsp;<br />adocon.open"Driver={mysql};database=yourdatabase;uid=username;pwd=yourpassword;option=16386;"&nbsp;<br /><br />9.Visual&nbsp;Foxpro&nbsp;连接方法:&nbsp;<br /><br />set&nbsp;adocon=Server.Createobject("adodb.connection")&nbsp;<br />adocon.open"Driver={microsoft&nbsp;Visual&nbsp;Foxpro&nbsp;driver};sourcetype=DBC;sourceDB=*.dbc;Exclusive=No;"&nbsp;<br /><br />10.MS&nbsp;text&nbsp;连接方法:&nbsp;<br /><br />set&nbsp;adocon=Server.Createobject("adodb.connection")&nbsp;<br />adocon.open"Driver={microsoft&nbsp;text&nbsp;driver(*.txt;&nbsp;*.csv)};dbq=-----;"&_&nbsp;<br />"extensions=asc,csv,tab,txt;Persist&nbsp;SecurityInfo=false;"&nbsp;<br /><br />11.MS&nbsp;text&nbsp;OLE&nbsp;DB&nbsp;连接方法:&nbsp;<br /><br />set&nbsp;adocon=Server.Createobject("adodb.connection")&nbsp;<br />adocon.open"Provider=microsof.jet.oledb.4.0;data&nbsp;source=your_path;"&_&nbsp;<br />"Extended&nbsp;Properties'text;FMT=Delimited'"&nbsp;<br /><br />&lt;二&gt;。常用的四种SQL命令：&nbsp;<br /><br />1.查询数据记录(Select)&nbsp;<br />语法：Select&nbsp;字段串行&nbsp;From&nbsp;table&nbsp;Where&nbsp;字段=内容&nbsp;<br />例子：想从book表中找出作者为"cancer"的所有记录，SQL语句便如下：&nbsp;<br />select&nbsp;*&nbsp;from&nbsp;book&nbsp;where&nbsp;author=’cancer’&nbsp;<br />"*"是取出book表所有的字段，如查询的字段值为数字，则其后的"内容"便无须加上单引号，&nbsp;<br /><br />如是日期，则在Access中用(#)包括，而在SQL&nbsp;server中则用(’)包括，&nbsp;<br />如:&nbsp;<br /><br />select&nbsp;*&nbsp;from&nbsp;book&nbsp;where&nbsp;id=1&nbsp;<br />select&nbsp;*&nbsp;from&nbsp;book&nbsp;where&nbsp;pub_date=#2002-1-7#&nbsp;(Access)&nbsp;<br />select&nbsp;*&nbsp;from&nbsp;book&nbsp;where&nbsp;pub_date=’2002-1-7’&nbsp;(SQL&nbsp;Server)&nbsp;<br /><br />提示：&nbsp;<br />日期函数to_date不是标准sql文，不是所有的数据库适用，所以大家在使用的时候要参考数据库具体语法&nbsp;<br /><br />另外如果是查询传入的变量，则如下：&nbsp;<br /><br />strau=request.form("author")&nbsp;<br />strsql="select&nbsp;*&nbsp;from&nbsp;book&nbsp;where&nbsp;author=’"&strau&"’"&nbsp;<br /><br />如果查询的是数字，则：&nbsp;<br /><br />intID=request.form("id")&nbsp;<br />strsql="select&nbsp;*&nbsp;from&nbsp;book&nbsp;where&nbsp;id="&intID&nbsp;<br /><br />在很多数据库中，如：oracle，上面的语句是可以写成：&nbsp;<br />strsql="select&nbsp;*&nbsp;from&nbsp;book&nbsp;where&nbsp;id='"&intID&"'"的。&nbsp;<br />但是字符型一定不能按照数字格式写，需要注意。&nbsp;<br /><br />2.添加记录(Insert)&nbsp;<br />语法：Insert&nbsp;into&nbsp;table(field1,field2,....)&nbsp;Values&nbsp;(value1,value2,....)&nbsp;<br />例子：添加一作者是"cancer"的记录入book表:&nbsp;<br />insert&nbsp;into&nbsp;book&nbsp;(bookno,author,bookname)&nbsp;values&nbsp;(’CF001’,’cancer’,’Cancer无组件上传程序’)&nbsp;<br />同样，如果用到变量就如下：&nbsp;<br /><br />strno=request.form("bookno")&nbsp;<br />strau=request.form("author")&nbsp;<br />strname=request.form("bookname")&nbsp;<br />strsql="insert&nbsp;into&nbsp;book&nbsp;(bookno,author,bookname)&nbsp;values&nbsp;(’"&strno&"’,’"&strau&"’,’"&strname&"’)"&nbsp;<br /><br />3.用Recordset对象的Addnew插入数据的方法:&nbsp;<br />语法：&nbsp;<br /><br />rs.addnew&nbsp;<br />rs("field1").value=value1&nbsp;<br />rs("field2").value=value2&nbsp;<br />...&nbsp;<br />rs.update&nbsp;<br /><br />4.修改数据记录(Update)&nbsp;<br />语法：update&nbsp;table&nbsp;set&nbsp;field1=value1,field2=value2,...where&nbsp;fieldx=valuex&nbsp;<br />例子：update&nbsp;book&nbsp;set&nbsp;author=’babycrazy’&nbsp;where&nbsp;bookno=’CF001’&nbsp;<br />如果用到变量就如下：&nbsp;<br /><br />strno=request.form("bookno")&nbsp;<br />strau=request.form("author")&nbsp;<br />strsql="update&nbsp;book&nbsp;set&nbsp;author=’"&strau&"’&nbsp;where&nbsp;bookno=’"&strno"’"&nbsp;<br /><br />5.Recordset对象的Update方法:&nbsp;<br />语法：&nbsp;<br /><br />rs("field1").value=value1&nbsp;<br />rs("field2").value=value2&nbsp;<br />...&nbsp;<br />rs.update&nbsp;<br /><br />注意：使用语法3和语法5的时候，一定要注意字段的类型（尤其是日期型）一致，否则出错的几率非常的高。&nbsp;<br /><br /><br />例子：&nbsp;<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />strno=request.form("bookno")&nbsp;<br />strau=request.form("author")&nbsp;<br />set&nbsp;adocon=server.createobject("adodb.connection")&nbsp;<br />adocon.open&nbsp;"Driver={Microsoft&nbsp;Access&nbsp;Driver(*.mdb)};DBQ="&nbsp;&&nbsp;_&nbsp;<br />Server.Mappath=("/cancer/cancer.mdb")&nbsp;<br />strsql="select&nbsp;*&nbsp;from&nbsp;book&nbsp;where&nbsp;bookno=’"&strno&"’"&nbsp;<br />set&nbsp;rs=server.createobject("adodb.recordset")&nbsp;<br />rs.open&nbsp;strsql,adconn,1,3&nbsp;<br />if&nbsp;not&nbsp;rs.eof&nbsp;then&nbsp;’如果有此记录的话&nbsp;<br />rs("author").value=strau&nbsp;<br />rs.update&nbsp;<br />end&nbsp;if&nbsp;<br />rs.close&nbsp;<br />set&nbsp;rs=nothing&nbsp;<br />adocon.close&nbsp;<br />set&nbsp;adocon=nothing&nbsp;<br /></div></div><br />6.删除一条记录(Delete)&nbsp;<br />语法：Delete&nbsp;table&nbsp;where&nbsp;field=value&nbsp;<br />例子：删除book表中作者是cancer的记录&nbsp;<br /><br />delete&nbsp;book&nbsp;where&nbsp;author=’cancer’&nbsp;<br /><br />(注意：如果book表中author字段的值为cancer的记录有多条，将会删除所有author为cancer的记录)&nbsp;<br /><br /><br /><br /><br /><br /><br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">XmlHttp是什么？</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_33.html" />
      <updated>2008-6-2 23:29:53</updated>
      <published>2008-6-2 23:29:53</published>
      <id>http://dev.mo.cn/article_33.html</id>
      <summary type="html">
      <![CDATA[XmlHttp是什么？&nbsp;<br /><br />最通用的定义为：XmlHttp是一套可以在Javascript、VbScript、Jscript等脚本语言中通过http协议传送或从接收XML及其他数据的一套API。XmlHttp最大的用处是可以更新网页的部分内容而不需要刷新整个页面。&nbsp;<br />来自MSDN的解释：XmlHttp提供客户端同http服务器通讯的协议。客户端可以通过XmlHttp对象(MSXML2.XMLHTTP.3.0)向http服务器发送请求并使用微软XML文档对象模型Microsoft&reg;&nbsp;XML&nbsp;Document&nbsp;Object&nbsp;Model&nbsp;(DOM)处理回应。&nbsp;<br /><br />现在的绝对多数浏览器都增加了对XmlHttp的支持，IE中使用ActiveXObject方式创建XmlHttp对象，其他浏览器如：Firefox、Opera等通过window.XMLHttpRequest来创建xmlhttp对象。&nbsp;<br /><br />XmlHttp对象参考：&nbsp;<br />属性：&nbsp;<br />onreadystatechange*&nbsp;指定当readyState属性改变时的事件处理句柄。只写&nbsp;<br />readyState&nbsp;返回当前请求的状态，只读.&nbsp;<br />responseBody&nbsp;将回应信息正文以unsigned&nbsp;byte数组形式返回.只读&nbsp;<br />responseStream&nbsp;以Ado&nbsp;Stream对象的形式返回响应信息。只读&nbsp;<br />responseText&nbsp;将响应信息作为字符串返回.只读&nbsp;<br />responseXML&nbsp;将响应信息格式化为Xml&nbsp;Document对象并返回，只读&nbsp;<br />status&nbsp;返回当前请求的http状态码.只读&nbsp;<br />statusText&nbsp;返回当前请求的响应行状态，只读&nbsp;<br /><br />*&nbsp;表示此属性是W3C文档对象模型的扩展.&nbsp;<br /><br />方法：&nbsp;<br />abort&nbsp;取消当前请求&nbsp;<br />getAllResponseHeaders&nbsp;获取响应的所有http头&nbsp;<br />getResponseHeader&nbsp;从响应信息中获取指定的http头&nbsp;<br />open&nbsp;创建一个新的http请求，并指定此请求的方法、URL以及验证信息(用户名/密码)&nbsp;<br />send&nbsp;发送请求到http服务器并接收回应&nbsp;<br />setRequestHeader&nbsp;单独指定请求的某个http头&nbsp;<br /><br /><br />]]>
      </summary>
      <category term="" label="ASP/VBS" scheme="http://dev.mo.cn/cat_diary_3.html" />
   </entry>
   <entry>
      <title type="html">自己写的ajax无刷新投票，IE下正常调用~~</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_31.html" />
      <updated>2008-5-23 11:57:09</updated>
      <published>2008-5-23 11:57:09</published>
      <id>http://dev.mo.cn/article_31.html</id>
      <summary type="html">
      <![CDATA[自己写的ajax无刷新投票，IE下正常调用~~<br /><br /><br /><br /><br /><br />投票页面<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br /><br />&lt;div&nbsp;class=sround&nbsp;style="height:175px;width:190px;"&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;img&nbsp;src="img/nav.gif"&nbsp;style="margin-top:1px;"&gt;&nbsp;&lt;b&gt;调查投票&lt;/b&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;style="margin-left:10px;"&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;form&nbsp;name=vot_frm&nbsp;action="vote.asp"&nbsp;method="get"&nbsp;target="_blank"&nbsp;style="text-justify:;height:100px"&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;您对本站的印象如何?&lt;br&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input&nbsp;name=vote&nbsp;type=radio&nbsp;value=1&nbsp;style="border:0px"&gt;很好(共&lt;font&nbsp;color=red&gt;&lt;span&nbsp;id=s1&gt;&lt;/span&gt;&lt;/font&gt;票)&lt;br&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input&nbsp;name=vote&nbsp;type=radio&nbsp;value=2&nbsp;style="border:0px"&gt;还可以(共&lt;font&nbsp;color=red&gt;&lt;span&nbsp;id=s2&gt;&lt;/span&gt;&lt;/font&gt;票)&lt;br&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input&nbsp;name=vote&nbsp;type=radio&nbsp;value=3&nbsp;checked=true&nbsp;style="border:0px"&gt;一般(共&lt;font&nbsp;color=red&gt;&lt;span&nbsp;id=s3&gt;&lt;/span&gt;&lt;/font&gt;票)&lt;br&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input&nbsp;name=vote&nbsp;type=radio&nbsp;value=4&nbsp;style="border:0px"&gt;不好(共&lt;font&nbsp;color=red&gt;&lt;span&nbsp;id=s4&gt;&lt;/span&gt;&lt;/font&gt;票)&lt;br&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input&nbsp;name=vote&nbsp;type=radio&nbsp;value=5&nbsp;style="border:0px"&gt;很差(共&lt;font&nbsp;color=red&gt;&lt;span&nbsp;id=s5&gt;&lt;/span&gt;&lt;/font&gt;票)&lt;br&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input&nbsp;type=button&nbsp;onclick="Star(this.form,1);"&nbsp;value="投票"&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/form&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br /><br />&lt;script&nbsp;type="text/javascript"&gt;<br /><br />//无刷新投票<br /><br />Star(document.vot_frm,0);<br /><br />var&nbsp;oBao;<br /><br />//创建组件<br /><br />function&nbsp;createobj()&nbsp;{<br /><br />&nbsp;if&nbsp;(window.ActiveXObject)&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oBao=new&nbsp;ActiveXObject("Microsoft.XMLHTTP");<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp;(window.XMLHttpRequest)&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oBao=new&nbsp;XMLHttpRequest();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}<br /><br />//调用并返回结果<br /><br />function&nbsp;Star(frm,ty)&nbsp;{<br /><br />createobj();<br /><br />var&nbsp;id=0;<br /><br />if(ty==1)&nbsp;{<br /><br />for(var&nbsp;i=0;i&lt;frm.length;i++){<br /><br />if(frm.elements[&nbsp;i].checked)&nbsp;{<br /><br />id=frm.elements[&nbsp;i].value;<br /><br />}<br /><br />}<br /><br />}<br /><br />var&nbsp;my_url="vote.asp?vote="+id;<br /><br />oBao.open("POST",my_url,false);&nbsp;<br /><br />oBao.send(null);&nbsp;<br /><br />var&nbsp;strResult&nbsp;=&nbsp;unescape(oBao.responseText);<br /><br />for(var&nbsp;j=1;j&lt;6;j++){<br /><br />document.getElementById("s"+j).innerText&nbsp;=strResult.split("&nbsp;")[j-1];<br /><br />}<br /><br />}<br /><br />//定时刷新<br /><br />window.setInterval("Star(document.vot_frm,0);",5000);<br /><br />&lt;/script&gt;<br /><br /></div></div><br /><br />&nbsp;<br /><br /><br /><br />vote.asp的内容<br /><br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br /><br />&lt;!--#include&nbsp;file="mdb.asp"--&gt;&nbsp;'连接你自己的数据库，最好根据自己的数据库重新写下面的代码~~<br /><br />&lt;%<br /><br />dim&nbsp;n<br /><br />n=""<br /><br />if&nbsp;request.querystring("vote")&lt;&gt;""&nbsp;or&nbsp;request.querystring("vote")&gt;0&nbsp;then<br /><br />sql="update&nbsp;vote&nbsp;set&nbsp;count=count+1&nbsp;where&nbsp;vote='vote"&request.querystring("vote")&"'"<br /><br />conn.execute&nbsp;sql<br /><br />end&nbsp;if<br /><br />set&nbsp;rs=server.createobject("adodb.recordset")<br /><br />sql="select&nbsp;*&nbsp;from&nbsp;vote"<br /><br />rs.open&nbsp;sql,conn,1,1<br /><br />do&nbsp;while&nbsp;not&nbsp;rs.eof<br /><br />n=n&"&nbsp;"&rs(1)<br /><br />rs.movenext<br /><br />loop<br /><br />response.write&nbsp;trim(n)<br /><br />%&gt;&nbsp;<br /><br /></div></div><br /><br /><br /><br /><br /><br /><br /><br />]]>
      </summary>
      <category term="" label="AJAX" scheme="http://dev.mo.cn/cat_diary_2.html" />
   </entry>
   <entry>
      <title type="html">利用AJAX进行whois查询</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_29.html" />
      <updated>2008-5-7 3:28:17</updated>
      <published>2008-5-7 3:28:17</published>
      <id>http://dev.mo.cn/article_29.html</id>
      <summary type="html">
      <![CDATA[ajax说新颖也不新颖的一项技术，如果你用过google&nbsp;map服务就会体会到他的优点，当然不能乱用，呵呵！&nbsp;&nbsp;&nbsp;&nbsp;<br />下面是自己写的一个小例子，仅供参考，见笑！&nbsp;&nbsp;&nbsp;&nbsp;<br />详细内容可去网上搜索~&nbsp;&nbsp;&nbsp;&nbsp;<br />具体代码如下:&nbsp;&nbsp;<br /><br />main.html内容&nbsp;&nbsp;<br /><div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />&lt;html&gt;<br />&lt;HEAD&gt;<br />&lt;title&gt;利用AJAX调用whois查询&lt;/title&gt;<br />&lt;meta&nbsp;http-equiv="Content-Type"&nbsp;content="text/html;&nbsp;charset=gb2312"&gt;<br />&lt;META&nbsp;NAME&nbsp;="keywords"&nbsp;CONTENT="利用AJAX调用whois查询"&gt;<br />&lt;META&nbsp;NAME="description"&nbsp;CONTENT="利用AJAX调用whois查询"&gt;<br />&lt;META&nbsp;NAME="robots"&nbsp;CONTENT="all"&gt;<br />&lt;META&nbsp;name="AUTHOR"&nbsp;content="Anlige"&gt;<br />&lt;script&nbsp;language="javascript"&nbsp;src="fun.js"&gt;&lt;/script&gt;<br />&lt;/HEAD&gt;<br />&lt;BODY&gt;<br />&lt;form&nbsp;name="se"&gt;<br />&lt;input&nbsp;type="text"&nbsp;name="domain"&gt;<br />&lt;input&nbsp;type="button"&nbsp;value="查询"&nbsp;onclick="Request(se.domain.value,'get')"&gt;<br />&lt;/form&gt;<br />&lt;div&nbsp;id="whois"&gt;<br />&lt;/div&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br /></div></div><br />fun.js内容&nbsp;&nbsp;<br />&nbsp;<div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content"><br />var&nbsp;a="http://whois.hichina.com/cgi-bin/whois?domain=";<br />var&nbsp;b="&B1=GO";<br />function&nbsp;CreateXMLHttpRequest()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;request&nbsp;=&nbsp;false;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(window.XMLHttpRequest)&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request&nbsp;=&nbsp;new&nbsp;XMLHttpRequest();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(request.overrideMimeType)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.overrideMimeType('text/xml');<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(window.ActiveXObject)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request&nbsp;=&nbsp;new&nbsp;ActiveXObject("Msxml2.XMLHTTP");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(e)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request&nbsp;=&nbsp;new&nbsp;ActiveXObject("Microsoft.XMLHTTP");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(e)&nbsp;{return&nbsp;false;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!request)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert('Create&nbsp;XMLHTTP&nbsp;Object&nbsp;false.');<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;request;<br />}<br /><br />function&nbsp;Request(domain,method)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;obj=document.getElementById("whois");&nbsp;&nbsp;//定位到div&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;xmlHttp&nbsp;=&nbsp;CreateXMLHttpRequest();<br />&nbsp;&nbsp;&nbsp;&nbsp;xmlHttp.open(method,&nbsp;a+domain+b,&nbsp;true);<br />&nbsp;&nbsp;&nbsp;&nbsp;//xmlHttp.setRequestHeader("Content-Length",&nbsp;body.length);<br />&nbsp;&nbsp;&nbsp;&nbsp;//xmlHttp.setRequestHeader("Content-Type",&nbsp;"application/x-www-form-urlencoded");&nbsp;//application/x-www-form-urlencoded<br />&nbsp;&nbsp;&nbsp;&nbsp;xmlHttp.onreadystatechange&nbsp;=&nbsp;function(){<br />&nbsp;&nbsp;&nbsp;&nbsp;if(xmlHttp.readyState==4){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//4代表数据已经从服务器返回&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(xmlHttp.status==200){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//200代表页面正常&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;strResult&nbsp;=xmlHttp.responseText;&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;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;c=strResult.search(/\&lt;pre\&gt;/);&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;d=strResult.search(/\&lt;\/pre\&gt;/);&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;str=strResult.substr(c+5,d-c-5);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str=str.replace(/\n/gi,'&lt;br&gt;');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示信息&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str=str.replace(/请.*$/,'');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示信息&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.innerHTML=str;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.innerHTML="服务器返回错误!";&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}else{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.innerHTML="数据请求中...";&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;xmlHttp.send(null);<br />}<br /></div></div><br /><br /><br /><br />]]>
      </summary>
      <category term="" label="AJAX" scheme="http://dev.mo.cn/cat_diary_2.html" />
   </entry>
   <entry>
      <title type="html">一个简单的JavaScript对象编程示例</title>
      <author><name>Anlige</name><uri>http://dev.mo.cn/</uri><email>zhanghuiguoanlige@126.com</email></author>
      <link rel="alternate" type="text/html" href="http://dev.mo.cn/article_9.html" />
      <updated>2008-3-28 6:49:34</updated>
      <published>2008-3-28 6:49:34</published>
      <id>http://dev.mo.cn/article_9.html</id>
      <summary type="html">
      <![CDATA[<div class="code"><div class="code_title"><span> &nbsp;<img src="images/code.gif" alt="" style="padding:0px;border:0px;" /></span>&nbsp;&nbsp;&nbsp;<a href="javascript:void(0);" onclick="window.clipboardData.setData('Text',this.parentNode.parentNode.childNodes[1].outerText);alert('븴Ƴɹ,Ctrl+VճҪλ!!');">ȫ</a></div><div class="code_content">&lt;!DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN"&nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;<br />&lt;html&nbsp;xmlns="http://www.w3.org/1999/xhtml"&nbsp;&gt;<br />&lt;head&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;一个简单的JavaScript对象编程示例&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;script&nbsp;type&nbsp;="text/javascript"&nbsp;&gt;<br /><br />function&nbsp;pig(Speed){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.runSpeed=Speed;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.Run=function(runTime){&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;runTime&nbsp;*&nbsp;this.runSpeed;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br />}<br /><br />var&nbsp;aPig=new&nbsp;pig("10");<br />document.write("我是一头小猪,我的速度是"&nbsp;+&nbsp;aPig.runSpeed&nbsp;+"公里/小时;我要开始跑步了....");<br />var&nbsp;runOver=aPig.Run(5);<br />document.write("跑了5小时,终于跑完了;我跑了"&nbsp;+&nbsp;runOver&nbsp;+&nbsp;"公里!");<br />&lt;/script&gt;<br /><br />&lt;/body&gt;<br />&lt;/html&gt;</div></div>]]>
      </summary>
      <category term="" label="JavaScript/DOM" scheme="http://dev.mo.cn/cat_diary_9.html" />
   </entry>
</feed>
