<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[韦伯花园的魔法师 magician in Web 2.0 Party - 原创代码]]></title>
<link>http://fanxiaojie.com</link>
<description><![CDATA[关注Web前端开发技术]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[fanxiaojie@yeah.net(稽山草)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>韦伯花园的魔法师 magician in Web 2.0 Party</title>
	<url>http://fanxiaojie.com/images/logos.gif</url>
	<link>http://fanxiaojie.com</link>
	<description>韦伯花园的魔法师 magician in Web 2.0 Party</description>
</image>

			<item>
			<link>http://fanxiaojie.com/article.asp?id=76</link>
			<title><![CDATA[给语法高亮插件chili加了一个vbscript高亮功能]]></title>
			<author>fanxiaojie@yeah.net(fanxiaojie)</author>
			<category><![CDATA[原创代码]]></category>
			<pubDate>Tue,02 Feb 2010 19:47:29 +0800</pubDate>
			<guid>http://fanxiaojie.com/index.asp?id=76</guid>
		<description><![CDATA[&lt;P&gt;　jquery插件chili是一个非常棒的代码语法高亮插件，可以对各种代码进行很好看的语法高亮。它的最新版是2,2版，下载地址：&lt;BR&gt;&lt;A href=&#34;<a href="http://code.google.com/p/jquery-chili-js/downloads/list" target="_blank" rel="external">http://code.google.com/p/jquery-chili-js/downloads/list</a>&#34;&gt;<a href="http://code.google.com/p/jquery-chili-js/downloads/list" target="_blank" rel="external">http://code.google.com/p/jquery-chili-js/downloads/list</a>&lt;/A&gt;&lt;BR&gt;　　但是它有一个缺点，就是无法对vbscript语言进行高亮。这个缺点令我有些愤怒：为什么chili作者偏偏疏省了vbscript呢？&lt;BR&gt;　　事实上，我记得另一个语法高亮插件SyntaxHighlighter也不能很好地对vbscript进行语法高亮。&lt;BR&gt;　　幸好，虽然chili的作者没有写vbscript的语法高亮功能，但也难不倒我。我自己动手写了一个vbscript的语法高亮功能，作为对chili的补充。&lt;BR&gt;　　我写的这个vbscript能对多数vbscript代码进行很好的高亮，颜色看起来已经很像Dreamweaver了。但是，它也不算完美。最突出的一点是：它无法对vbscript的注释语句进行识别加灰。vbscript的注释语句是一个撇号&#39;打头的语句，而且这个撇号不能在字符串中。我怎么改正则表达式都无法很好的匹配到这个条件。希望我的这个帖子能起到抛砖引玉效果，引来高手对它进行更进一步的修改。&lt;BR&gt;　　废话不说，先上代码：把下面这段代码加到recipes.js的最后面就可以了：&lt;/P&gt;<br/>&lt;pre name=&#34;code&#34; class=&#34;javascript&#34;&gt;ChiliBook.recipes[&#34;asp.js&#34;]=<br/> {<br/> _name: &#39;asp&#39;,<br/> _case:false,<br/> _main:<br/> {<br/> string:<br/> {<br/> _match: /(?:\&#34;[^\&#34;\\\n]*(?:\\.[^\&#34;\\\n]*)*\&#34;)/,<br/> _case: false,<br/> _style:&#39;color:green;&#39;<br/> },<br/> num:<br/> {<br/> _match: /\b[+-]?(?:\d*\.?\d+|\d+\.?\d*)(?:[eE][+-]?\d+)?\b/, <br/> _style:&#39;color: red;&#39;<br/> },<br/> statement:<br/> {<br/> _match: /\b((Case)|(Class)|(Const)|(Dim)|(Do)|(Each)|(Else)|(Elseif)|(Empty)|(End)|(Erase)|(ex ecute)|(FALSE)|(For)|(Function)|(Get)|(Goto)|(If)|(Let)|(Loop)|(Next)|(Nothing)|(Null)|(On)|(Private)|(Public)|(ReDim)|(Resume\s+Next)|(Sel&#101;ct)|(Set)|(Sub)|(Then)|(To)|(True)|(Wend)|(While)|(With))\b/,<br/> _case:false,<br/> _style:&#39;color:blue;font-weight:bold;&#39;<br/> },<br/> object:<br/> {<br/> _match: /\b((RegExp)|(Array)|(Request\.(TotalBytes|BinaryRead|Form(\.count)?|Querystring(\.count)?|Cookies(\.Attribute)?|ServerVariables|ClientCertificate))|(Response\.(buffer|CatchControl|Charset|ContentType|cookies|Expires|ExpiresAbsolute|IsClientConnected|PICS|Status|AddHeader|AppendTolog|BinaryWrite|Clear|End|Flush|Redirect|Write))|(Application(\.(contents|remove|removeall|lock|unlock))?)|(Session(\.(contents(\.remove|\.removeall)|staticobjects|sessionid|timeout|codepage|lcid|abandon))?)|(Server\.((cr&#101;ateobject)|(ex ecute)|(getlastError)|(htmlencode)|(mappath)|(transfer)|(urlencode)))|(Error)|(Err(\.(description|helpcontent|helpfile|number|source|clear|Raise))?))\b/,<br/> _style:&#39;color:#990099;&#39;<br/> },<br/> &#39;function&#39;:<br/> {<br/> _match: /\b((Abs)|(Array)|(Asc)|(Atn)|(CBool)|(CByte)|(CCur)|(CDate)|(CDbl)|(Chr)|(CInt)|(CLng)|(Cos)|(CSng)|(CStr)|(Date)|(DateAdd)|(DateDiff)|(DatePart)|(DateSerial)|(DateValue)|(Day)|(Eval)|(Exp)|(Filter)|(Fix)|(FormatCurrency)|(FormatDateTime)|(FormatNumber)|(FormatPercent)|(GetLocale)|(GetObject)|(GetRef)|(Hex)|(Hour)|(InputBox)|(InStr)|(InStrRev)|(Int)|(IsArray)|(IsDate)|(IsEmpty)|(IsNull)|(IsNumeric)|(IsObject)|(Join)|(LBound)|(LCase)|(Left)|(Len)|(LoadPicture)|(Log)|(LTrim)|(Mid)|(Minute)|(Month)|(MonthName)|(MsgBox)|(Now)|(Oct)|(Replace)|(RGB)|(Right)|(Rnd)|(Round)|(RTrim)|(ScriptEngine)|(ScriptEngineBuildVersion)|(ScriptEngineMajorVersion)|(ScriptEngineMinorVersion)|(Second)|(Sgn)|(Sin)|(Space)|(Split)|(Sqr)|(StrComp)|(StrReverse)|(Tan)|(Time)|(Timer)|(TimeSerial)|(TimeValue)|(Trim)|(TypeName)|(UBound)|(UCase)|(VarType)|(Weekday)|(WeekdayName)|(Year))\b/,<br/> _style:&#39;color:DarkOrchid;&#39;<br/> },<br/> &#39;method&#39;:<br/> {<br/> _match: /\b((AbsolutePage)|(AbsolutePosition)|(ActiveCommand)|(ActiveConnection)|(ActualSize)|(AddNew)|(Append)|(AppendChunk)|(Attributes)|(BeginTrans)|(BeginTransComplete)|(BOF)|(Bookmark)|(CacheSize)|(Cancel)|(CancelBatch)|(CancelUp&#100;ate)|(Charset)|(Clear)|(Clone)|(Close)|(CommandText)|(CommandTimeout)|(CommandType)|(CommitTrans)|(CommitTransComplete)|(CompareBookmarks)|(ConnectComplete)|(ConnectionString)|(ConnectionTimeout)|(CopyRecord)|(CopyTo)|(Count)|(Cr&#101;ateParameter)|(CursorLocation)|(CursorType)|(DataMember)|(DataSource)|(DefaultDatabase)|(DefinedSize)|(Del&#101;te)|(Del&#101;teRecord)|(Description)|(Direction)|(Disconnect)|(EditMode)|(EndOfRecordset)|(EOF)|(EOS)|(Errors)|(ex ecute)|(ex ecuteComplete)|(FetchComplete)|(FetchProgress)|(FieldChangeComplete)|(Fields)|(Filter)|(Find)|(Flush)|(GetChildren)|(GetChunk)|(GetRows)|(GetString)|(HelpContext)|(HelpFile)|(Index)|(InfoMessage)|(IsolationLevel)|(Item)|(LineSeparator)|(LoadFromFile)|(LockType)|(MarshalOptions)|(MaxRecords)|(Mode)|(Move)|(MoveComplete)|(MoveFirst)|(MoveLast)|(MoveNext)|(MovePrevious)|(MoveRecord)|(Name)|(NativeError)|(NextRecordset)|(Number)|(NumericScale)|(Open)|(OpenSchema)|(OriginalValue)|(PageCount)|(PageSize)|(Parameters)|(ParentURL)|(Position)|(Precision)|(Prepared)|(Properties)|(Provider)|(Read)|(ReadText)|(RecordChangeComplete)|(RecordCount)|(RecordsetChangeComplete)|(RecordType)|(Refresh)|(Requery)|(Resync)|(RollbackTrans)|(RollbackTransComplete)|(Save)|(SaveToFile)|(Seek)|(SetEOS)|(Size)|(SkipLine)|(Sort)|(Source)|(SQLState)|(Stat)|(State)|(Status)|(StayInSync)|(Supports)|(Type)|(UnderlyingValue)|(Up&#100;ate)|(Up&#100;ateBatch)|(Value)|(Version)|(WillChangeField)|(WillChangeRecord)|(WillChangeRecordset)|(WillConnect)|(Willex ecute)|(WillMove)|(Write)|(WriteText))\b/,<br/> _style:&#39;color:#990099;&#39;<br/> },<br/> &#39;const&#39;:<br/> {<br/> _match: /\b((vbArray)|(vbBinaryCompare)|(vbBlack)|(vbBlue)|(vbBoolean)|(vbByte)|(vbCr)|(vbCrLf)|(vbCurrency)|(vbCyan)|(vbDataObject)|(vbDate)|(vbDecimal)|(vbDouble)|(vbEmpty)|(vbError)|(vbFirstFourDays)|(vbFirstFullWeek)|(vbFirstJan1)|(vbFormFeed)|(vbFriday)|(vbGeneralDate)|(vbGreen)|(vbInteger)|(vbLf)|(vbLong)|(vbLongDate)|(vbLongTime)|(vbMagenta)|(vbMonday)|(vbNewLine)|(vbNull)|(vbNullChar)|(vbNullString)|(vbObject)|(vbObjectError)|(vbRed)|(vbSaturday)|(vbShortDate)|(vbShortTime)|(vbSingle)|(vbString)|(vbSunday)|(vbTab)|(vbTextCompare)|(vbThursday)|(vbTuesday)|(vbUseSystem)|(vbUseSystemDayOfWeek)|(vbVariant)|(vbVerticalTab)|(vbWednesday)|(vbWhite)|(vbYellow))\b/,<br/> _style:&#39;color:#009999;&#39;<br/> },<br/> event:<br/> {<br/> _match:&#39;/\b((Initialize)|(Terminate)|(application_onstart)|(application_onend)|(session_onstart)|(session_onend))\b/&#39;,<br/> _style:&#39;color:blue;&#39;<br/> },<br/> operator:<br/> {<br/> _match:/(\+|-|=|\*|\/|\bmod\b|^|\s_|&amp;)/,<br/> _style:&#39;color:RoyalBlue;font-weight:bold;&#39;<br/> }<br/> }<br/> }&lt;/pre&gt;<br/>&lt;p&gt;　　再放一张效果图：&lt;/p&gt;<br/>&lt;img src=&#34;attachments/month_1002/201022194427.gif&#34; alt=&#34; &#34;/&gt;<br/><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://fanxiaojie.com/article.asp?id=74</link>
			<title><![CDATA[Asprain论坛的安装包终于公布了！]]></title>
			<author>fanxiaojie@yeah.net(fanxiaojie)</author>
			<category><![CDATA[原创代码]]></category>
			<pubDate>Tue,26 Jan 2010 18:25:10 +0800</pubDate>
			<guid>http://fanxiaojie.com/index.asp?id=74</guid>
		<description><![CDATA[&lt;P&gt;真是万分激动，我的心血啊！&lt;/P&gt;<br/>&lt;P&gt;&lt;BR&gt;下载程序请去这里：&lt;/P&gt;<br/>&lt;P&gt;&lt;A href=&#34;<a href="http://www.asprain.com/topic.asp?id=115" target="_blank" rel="external">http://www.asprain.com/topic.asp?id=115</a>&#34;&gt;<a href="http://www.asprain.com/topic.asp?id=115" target="_blank" rel="external">http://www.asprain.com/topic.asp?id=115</a>&lt;/A&gt;&lt;/P&gt;<br/>&lt;P&gt;或者&lt;/P&gt;<br/>&lt;P&gt;&lt;A href=&#34;<a href="http://code.google.com/p/asprain/" target="_blank" rel="external">http://code.google.com/p/asprain/</a>&#34;&gt;<a href="http://code.google.com/p/asprain/" target="_blank" rel="external">http://code.google.com/p/asprain/</a>&lt;/A&gt;&lt;/P&gt;<br/>&lt;P&gt;在过去的一个月里，特别是最近几天，我看到很多人都一再在问：Asprain论坛的程序到底什么时候提供下载啊？虽然我之前已经一再说明会在1月28日之前把安装包放出来提供下载的，但是还是有人不断地问。我能体会到大家的期待。&lt;/P&gt;<br/>&lt;P&gt;我感到很开心，又感到抱歉。我于是只能尽可能地加班加点，加快动作。同时我也知道欲速则不达，我得尽可能地仔细。&lt;/P&gt;<br/>&lt;P&gt;我很久以前就有这样的想法，那就是：当我把这个论坛程序做好之后，我要把它做成能够在线安装的。一般的网站系统都需要下载一个包，然后解压成无数个小文件，然后再用flashfxp把这无数个小文件一个一个地转到服务器上去，然后再连接数据库。做网站的人们似乎已经习惯了这种方法。但是，之前有一个网站程序却是一个例外，那就是目前国内最流行的个人博客网站系统PJBLOG。我发现它的安装包解压后只有寥寥几个文件，传上去之后在线安装解压，安装起来速度很快。我很诧异它是怎样做到这一点的，并希望能够下载到这个打包压缩工具。不过，据PJBLOG的开发小组的一个成员跟我讲，PJBLOG的压缩工具是他们自己开发的。于是我想：我也应该能够自己开发一个打包工具的。&lt;/P&gt;<br/>&lt;P&gt;其实我的论坛程序的打包原理很平常，就是把一个个文件全部作为OLE类型的数据保存到一个mdb文件里，再把这个mdb文件的扩展名改为asa，在线解压的时候，就把这些文件从asa里读出来，用fso写入到服务器空间里。不仅文件可以这样保存到一个asa文件里，在安装过程中用来创建数据表的sql语句也可以这样写入asa文件里。&lt;/P&gt;<br/>&lt;P&gt;很多人一再置疑我的论坛程序能承受多大的访问线程。他们一般认为asp程序不能承受大量的访问线程的。说实在，我觉得他们的怀疑真是毫无道理。在我看来，一个网站能承受多大的访问量，更多是由服务器硬件本身决定的，或者由虚拟主机的IIS容量决定的。至于程序本身，需要做的只是尽可能地减少不必要的运算浪费来提高访问速度。如果服务器硬件资源有限的话，程序再好也不能做到“人有多大胆、地有多高产”的。浙江大学校内的学生论坛CC98，每天有五六千在挂站，服务器也没有当掉过。除了曾经有几次因为学生惹了事，被学校关过服务器。而且CC98还并没有用到任何ajax效果。因此，用了大量的ajax效果的asprain，为什么要担心它承受不了大量的访问量和并发联接数呢？&lt;/P&gt;<br/>&lt;P&gt;何况，现在还有很多很多论坛，在线人数并不多的。比如说世界之窗论坛，每天一般在线人数都不到1000人。而且世界之窗论坛已经不算是冷清的论坛了。用dizcuz!论坛搭的番茄花园论坛，我记得三年前，有一次雷磊刚刚把新版本的番茄光盘放出来时，引来无数人的哄抢，我当时也想第一时间去下载番茄光盘，可是网站访问已经非常慢了，页面点开很不容易。当时番茄的在线人数在两千八百人左右。据说后来雷磊不得不换一台服务器以提高访问容量。我希望所有的鼓吹asp只能承受很小的访问量、鼓吹PHP能承受很大的访问量的胡言乱语者，能够看到这些事实，不要再乱说自己都不相信的话。&lt;/P&gt;<br/>&lt;P&gt;曾经有个家伙很诚恳很傲慢地对我说：你一定没有碰到过高并发量、高访问。对此我回答道：请问你碰到过高并发量、高访问吗？啊啊。&lt;/P&gt;<br/>&lt;P&gt;说实在，一个单台服务器的web论坛平均在线人数有5000人的，除了CC98之外，我再也没有见过另一个论坛在线人数有这么多的。而像天涯社区啊、淘宝网的社区啊、网易的社区啊，它们能容纳几万几十万人在线，并不是因为他们用了什么无比牛B的语言，而是因为他们用了多台服务器。&lt;/P&gt;<br/>&lt;P&gt;以前，我多次说过我的目标用户是小网站、小论坛。其实说起来也不能这么绝对。我所说的小网站，只是相对于天涯社区、淘宝网社区、网易社区这样的有很多台服务器的大型论坛而言的，因此CC98这样的日常在线人数有五千多人的论坛也是我所说的小网站、小论坛。&lt;/P&gt;<br/>&lt;P&gt;关于我的目标用户的定位，我可以举几个例子：比如说像&lt;A href=&#34;<a href="http://www.iconfans.com" target="_blank" rel="external">http://www.iconfans.com</a>&#34;&gt;<a href="http://www.iconfans.com" target="_blank" rel="external">http://www.iconfans.com</a>&lt;/A&gt;（icon粉丝论坛）这样的论坛，比如说像&lt;A href=&#34;<a href="http://bbs.pjhome.net" target="_blank" rel="external">http://bbs.pjhome.net</a>&#34;&gt;<a href="http://bbs.pjhome.net" target="_blank" rel="external">http://bbs.pjhome.net</a>&lt;/A&gt;（PJBLOG的官方论坛）这样的论坛，比如说像&lt;A href=&#34;<a href="http://www.baobeihuijia.com/bbs/" target="_blank" rel="external">http://www.baobeihuijia.com/bbs/</a>&#34;&gt;<a href="http://www.baobeihuijia.com/bbs/" target="_blank" rel="external">http://www.baobeihuijia.com/bbs/</a>&lt;/A&gt;（宝贝回家论坛）这样的论坛。前两个网站都是个人搭建的，但是用众并非只是个人，他们有一个固定的访问群体，虽然人数不多。后一个则是一个公益性的论坛，是由一个公益团体搭建的，也有一大群较为固定的专注会员。另外还有像天仙MM尔玛依娜的粉丝论坛（以前访问过，但是地址忘了）类似的名人粉丝论坛，等等，都是我的目标用户。相信这些网站现在数量很多，而且以后还会继续增长。&lt;/p&gt;<br/>&lt;p&gt;另外还有一大块目标市场，就是各中小学、中专、技校、职高的校园论坛、师生交流论坛，一些教科研部门的内部论坛、一些公司企业（比如说外贸纺织公司、船舶航运公司等生产贸易企业）的内部论坛。我相信将来很多中小学、中专、技术、职高都会有自己的师生交流论坛的，而且因为很多学校都是有校园局域网的，因此就算政策想禁也禁不了的。同样的，许多公司企业，它们也往往有企业内部的局域网，为了加强员工的团队凝聚力，他们也有可能会想到在局域网里建个论坛。现在德天网络、康盛联想都在试图转型，德天网络正在加大力度开发网店系统，康盛联想则在加大力度开发SNS网站系统和各种各样的网页游戏。但是我会一直专注于做论坛的。我要把论坛这个东西的用户体验做到极致，让网民畅所欲言。&lt;/P&gt;<br/>&lt;P&gt;有些人警告我说：现在国内正在严格审核论坛，将来有可能禁止个人建论坛，你开发这个程序前景有很大的风险。&lt;/P&gt;<br/>&lt;P&gt;对此，我的回答是：&lt;/P&gt;<br/>&lt;P&gt;如果说将来有可能严格审核论坛的话，我相信肯定是把所有的社区、社交网站、所有能让网民自由贴图片、写文字的网站都包括进去的，而不可能只严格审核纯粹的论坛。而且，充满援交妹的社交网站应该是首当其冲要被发现一批打击一批的。虽然那些社交网站可能并没有什么**图片、AV视频，但是如果那么多暖昧交意是在那里谈成的，你想政府会放过他们的吗？相较之下，校园论坛、师生交流论坛、科研所的论坛、公司内部的论坛、公益团体的论坛、某些爱好者论坛这些纯粹的论坛，反而是情有可缘，远远排在被打击的队伍的最后面。&lt;/P&gt;<br/>&lt;P&gt;还有人一再怀疑我为什么还要开发Access版。一再试图说服我放弃Access版的论坛。在他们眼里，Access数据库的弱点就像眼中钉一样难受。但是我发誓：我绝不放弃Access版的论坛的开发。理由有好几个。第一：有些很小很小的只有几十人的学生团体，他们想在校园局域网上建一个交流论坛，他们并不想去买虚拟主机服务器，他们用自己的个人电脑搭一个论坛，对它们来说，sqlserver2005数据库安装体积太大了，真没有必要。相较之下，Access数据库虽然小一点，慢一点（微处其微），但是其实已经够用了。sqlserver2005的开发员版安装起来也要两个钟头呢！而且安装起来要经过至少十三个界面。第二，我见过的在线人数最多的单服务器web论坛CC98，最初也是用Access的动网论坛系统搭建的。只是后来访问者越来越多，才改成sql版的。所以我无论如何都不会放弃开发入门级的Asp+Access版的论坛系统的。&lt;/P&gt;<br/>&lt;P&gt;关于我再接下来要做的事情，我想列出一些计划来：&lt;/P&gt;<br/>&lt;P&gt;我需要抓紧时间把Access版的安装包放出来。我需要不断地修正程序的bug。&lt;/P&gt;<br/>&lt;P&gt;我需要制作&lt;A href=&#34;<a href="http://www.asprain.net" target="_blank" rel="external">http://www.asprain.net</a>&#34;&gt;www.asprain.net&lt;/A&gt;的官方网站，就像&lt;A href=&#34;<a href="http://www.phpwind.com" target="_blank" rel="external">http://www.phpwind.com</a>&#34;&gt;www.phpwind.com&lt;/A&gt;一样，在这个网站里，人们可以看到历个版本的更新、下载皮肤、插件，将来我要推出商业版和商业服务的时候，也需要这个官方网站。&lt;/P&gt;<br/>&lt;P&gt;我需要找更多的友情链接，并尽可能地在各个下载网站里上传我的程序。&lt;/P&gt;<br/>&lt;P&gt;我需要把在线编辑器做得更棒，比如说，加入在线截屏功能。现在QQ邮箱和网易邮箱都已经有这个功能了。我相信这个功能是很棒很有用的。&lt;/P&gt;<br/>&lt;P&gt;我需要做出论坛的手机版，可以像微博那样用手机方便地发帖、发表心情。&lt;/P&gt;<br/>&lt;P&gt;我要继续翻译我还没有完成的asp&amp;amp;xml系列教程，和许多jquery插件的作用说明书，以及persits公司开发的asp组件的使用说明书。&lt;/P&gt;<br/>&lt;P&gt;还有其它的，我想想再写。&lt;/P&gt;<br/>]]></description>
		</item>
		
			<item>
			<link>http://fanxiaojie.com/article.asp?id=70</link>
			<title><![CDATA[悼念南非前总统Frederik Willem·de Klerk]]></title>
			<author>fanxiaojie@yeah.net(fanxiaojie)</author>
			<category><![CDATA[原创代码]]></category>
			<pubDate>Fri,08 Jan 2010 15:27:42 +0800</pubDate>
			<guid>http://fanxiaojie.com/index.asp?id=70</guid>
		<description><![CDATA[&lt;p&gt;最近听说南非前总统Frederik Willem de Klerk逝世了，一位对中国人来说不算熟悉的巨人静静地离开了这个人间。我想给他写一篇悼念文章。&lt;/p&gt;<br/>&lt;p&gt;F·W·de Klerk1936年出生于南非最大的城市约翰内斯堡的一个政治世家，他的父亲Jan de Klerk曾经担任过南非参议院议长，他的兄弟Willem de Klerk是一个自由报人及一个民主党的创始人之一。F·W·de Klerk本人毕业于波切夫斯特鲁姆大学，获得过农业和法学学士学位。1959年他与Marike Willemse结婚，婚后育有二子一女。&lt;/p&gt;<br/>&lt;p&gt;1969年F·W·de Klerk当选为众议员，1978年进入内阁，成为邮电和社会福利部部长。之后他又陆续地担任了体育和文化部部长、矿产和能源规划部部长、内务部长和国民教育与规划部部长等职。1982年他成为约翰内斯堡所在的德兰士瓦省的国家党领袖，1985年他成为众议院部长联度会议主席。&lt;/p&gt;<br/>&lt;p&gt;作为国民教育部部长的F·W·de Klerk，它曾经是一个在大学校园里实行种族隔离制度的支持者。作为德兰士瓦国民党领袖，他曾经不接受改革主张。但是，背着一个非常保守的名声走过了漫长的政治生涯之后，随着国内外政治风向的剧变，他背叛了自己的政党。&lt;/p&gt;<br/>&lt;p&gt;1989年，F·W·de Klerk当选为南非总统，取代了当时的南非总统博塔。博塔曾经是一个非常固执的种族隔离制的贯彻者，曾经出动军警镇压黑人群体示威，但是当他大选失败之后，心态却有了很大的改变。1989年，临近卸任的博塔会见了还在狱中的纳尔逊·曼德拉，彼此留下了深刻的印象，后者终于在1990年得到了释放。&lt;/p&gt;<br/>&lt;p&gt;F·W·de Klerk走上政治舞台的时间和戈尔巴乔夫差不多，而且他和戈尔巴乔夫一样在变革到来的前期为变革的最终到来做了大量的工作，将一张十分有可能发生的自下而上的流血革命变成了一场自上而下的不流血革命。1990年，F·W·de Klerk宣布给予非洲国民大会党合法地位，并释放纳尔逊·曼德拉。1990年2月2日，F·W·de Klerk宣布解除戒严，1991年2月，宣布废止种族隔离制度，6月，废除人口登记法、原住民土地法等法律，在法律上废除了种族隔离。&lt;/p&gt;<br/>&lt;p&gt;F·W·de Klerk的改革措施曾经激起了南非白人居民的强烈抗议和不满，当在议会投票表决隔离法律的废除时受到重重阻挠。但是最终他依靠全民公决渡过了难关。&lt;/p&gt;<br/>&lt;p&gt;F·W·de Klerk的改革态度对南非废除种族隔离之后的走向走了至关重要的作用。在上一世纪九十年代初，南非废除种族隔离制已经是势在必行不可阻挡，但是它很有可能变成一场惨烈的流血报复行为。而且，当时，正在狱中的纳尔逊·曼德拉在抗议的人群中并不受待见。主张非暴力不合作对付隔离当局的图图大主教也饱受抨击。我记得1989年获得诺贝尔和平奖的图图大主教曾经受到两方面的暗杀威胁：白人3K党党徒向他寄送子弹以恫吓，黑人暴力革命者向他寄送镰刀以示不满。但是F·W·de Klerk成功地将抗议者的不满转移到对大选的参与热情上。&lt;/p&gt;<br/>&lt;p&gt;1993年，在南非历史上首次不分种族的大选中，纳尔逊·曼德拉击败de Klerk和其它一些参选者，当选为南非总任黑人总统。之后曼德拉立即任命de Klerk为第二副总统，以使让他能够帮助自己稳定政局。话说，在1993年的南非大选中，还有其它的一些黑人政治派别的领导人参加了大选。但是最终同时能得到黑人和白人的信任的纳尔逊·曼德拉击败了其它对手获得了选举胜利。&lt;/p&gt;<br/>&lt;p&gt;de Klerk在总统任内时，还曾经建议组成了“真相与和解委员会”以调查种族隔离时期的真相，促成国内民众在政治上和解。另外，它还和曼德拉一起获得了1993年的诺贝尔和平奖。我看到从上一世纪八十年代到九十年代到现在，黝黑的非洲大地上发生过很多起惨绝人环的种族屠杀和报复惨案。这些惨案都是在殖民者离开、原来的种族隔离制度轰然倒地的时候发生的。但是南非却没有发生这中惨剧，即使有，也是能够控制在零星的刑事案件中的。这不能让人不佩服两位领导了这场革命的人：de Klerk和曼德拉的政治智慧。&lt;/p&gt;<br/>&lt;p&gt;今天我看到新闻里说南非现总统Jacob Zuma昨天娶了第四个老婆，祖鲁人出身的Jacob Zuma按照法律可以娶无限个老婆。为此他按照祖鲁人的习俗和新娘跳舞完婚。我从网上新闻里看到苍老的祖马只穿着传统的兽毛皮裙，什么衣服也不穿，和他的妻子、族民一起跳舞。他的族民们也都穿着兽毛皮裙，或者穿着草裙，什么衣服也不穿，在拍打着鼓点。我见到这一幕非常诧异，很难相信一个还算发达的国家的总统居然会这样做。而且祖马本人也曾经饱受腐败指控。而且，据可信资料，20岁就加入非洲国民大会党的Jacob Zuma只有小学学历，或者说小学都没有读完。Jacob Zuma的前任、南非前总统Thabo Mbeki还有高中教育经历，而且辍学后曾经在伦敦大学进修过。而南非现任总统居然连小学都没有读完？！我觉得这真不是好事，一个缺少基本的文化知识的“斗争者”能把一个国家带向哪？&lt;/p&gt;<br/>&lt;p&gt;一个前总统在卸任后担任副总统，在一般人看来是一件很诧异的事。很多政治家从最高位置上退下来之后就直接退休了，再也不愿意担任公职。另一个从总统位置上退下来后继续从事公职的人我只听说过的好像只有美国前总统约翰·昆西·亚当斯，他在从总统大位上退下来之后又担任了三届国会议员。但是Frederik Willem de Klerk却在大选败给对手之后坦然接受了曼德拉的邀请，成为第二副总统(第一副总统是后来成为南非第二位黑人总统的塔博·姆贝基)。1997年，Frederik Willem de Klerk完成一个任期之后功成身退，从此退出政治舞台。&lt;/p&gt;<br/>]]></description>
		</item>
		
			<item>
			<link>http://fanxiaojie.com/article.asp?id=69</link>
			<title><![CDATA[今天做了个网站财付通集成功能]]></title>
			<author>fanxiaojie@yeah.net(fanxiaojie)</author>
			<category><![CDATA[原创代码]]></category>
			<pubDate>Thu,24 Dec 2009 22:19:00 +0800</pubDate>
			<guid>http://fanxiaojie.com/index.asp?id=69</guid>
		<description><![CDATA[&lt;P&gt;今天总算把网站的财付通集成也搞定了。长吁一口气，很不轻松的。&lt;BR&gt;之前我希望让我的网站能同时集成支付宝和财付通。&lt;BR&gt;支付宝集成我一个月前就搞定了。之前已经有“情留蚊子”在他自己的博客&lt;A href=&#34;<a href="http://www.94qing.com/art/AliPay-API.html" target="_blank" rel="external">http://www.94qing.com/art/AliPay-API.html</a>&#34; target=_blank&gt;<a href="http://www.94qing.com/art/AliPay-API.html" target="_blank" rel="external">http://www.94qing.com/art/AliPay-API.html</a>&lt;/A&gt;里放出他开发的支付宝集成工具。&lt;BR&gt;虽然他写的程序不能直接搬用到我的网站上来，但是至少的，我只需要改写不多的内容就能把它搞定了。&lt;BR&gt;然后我从昨天开始做财付通集成功的。要做网站财付通集成首先得去它们的官方网站上申请企业版用户，地址是：&lt;A href=&#34;<a href="http://mch.tenpay.com/market/index.shtml" target="_blank" rel="external">http://mch.tenpay.com/market/index.shtml</a>&#34;&gt;<a href="http://mch.tenpay.com/market/index.shtml" target="_blank" rel="external">http://mch.tenpay.com/market/index.shtml</a>&lt;/A&gt;，申请右边的“即时到帐交易”就可以了，中介担保交易太麻烦了。&lt;BR&gt;申请的时候各种资料请如实填写。注意的是那个邮箱地址千万不要填写企业邮局的邮箱地址，也不要填写QQ域名邮箱的邮箱地址，一定要填写163邮箱或者qq邮箱这些邮箱地址。据说是企业邮局的邮箱和QQ域名邮箱是不能收证书邮件的。碍，郁闷啊。我之前申请过一个QQ域名邮箱，&lt;A href=&#34;mailto:webmaster@asprain.com&#34;&gt;webmaster@asprain.com&lt;/A&gt;，这次我在申请财付通企业版的时候就填写了这个邮箱了。谁知，整整等了四天都没有收到证书邮件。去联系财付通客服，才知道原来这邮箱是不能收证书邮件的。于是只好申请修改邮箱——非常费事。本来申请的时候只要在网上填写就可了了，谁知修改邮箱地址居然必须用传真把你的亲笔函件传真过去，还要附上身份证复印件或者敲上公章。没办法，最后我写好写了一个请求修改邮箱的函件，到街上找文印店传真了过去，真的很费事啊。&lt;BR&gt;不过话说回来，财付通的客服MM真的很尽心尽力的。&lt;BR&gt;你如果是用qq邮箱或者163邮箱申请财付通的话，一般一天功夫就能收到通过申请的邮件了，在邮件里，包含着你的商家编号（10位数字）、登录密码（初始登录密码为111111）还有一个32位密钥。另外还有一个附件是浏览器证书。可惜，我照着它们的要求做了一遍：把证书导进自己的IE浏览器里，然后到&lt;A href=&#34;<a href="https://mch.tenpay.com/" target="_blank" rel="external">https://mch.tenpay.com/</a>&#34;&gt;<a href="https://mch.tenpay.com/" target="_blank" rel="external">https://mch.tenpay.com/</a>&lt;/A&gt;里去登录，选择“证书登录”，居然浏览器连连报错，说证书不对。没办法，我只好选择“非证书登录”，这下倒没问题了。登录进去之后第一件事你得同意两个用户协议，都同意了之后财付通企业版就能用了。&lt;BR&gt;这个页面的下边有开发文档：&lt;A href=&#34;<a href="http://mch.tenpay.com/market/index.shtml" target="_blank" rel="external">http://mch.tenpay.com/market/index.shtml</a>&#34;&gt;<a href="http://mch.tenpay.com/market/index.shtml" target="_blank" rel="external">http://mch.tenpay.com/market/index.shtml</a>&lt;/A&gt;&lt;BR&gt;自己去下载吧！&lt;BR&gt;开发文档里有一个《腾讯公司财付通支付网关商户开发指南.doc》，里面有支付协议的详细说明——虽然是详细了，但是并不太好懂，我琢磨了一个晚上才基本理解了它的意思。还有四个版本的demo：asp、C++、jsp、php这四个版本。asp的那个版本我研究了一下，觉得它们写得真不好，代码糟糕得就像是一个只学asp三个月的年轻人写的。而且我仔细看了之后，才发现这四个demo里全都只包含支付协议，没有包含查询协议。而且支付协议是以get方式通知的。我觉得以get方式通知的话，而且没有经过查询确认的话，这个md5签名密钥是很容易伪造的呀。幸好，虽然demo里没有包含查询协议，但是那个《指南.doc》里有详细的查询协议说明，我就照着这个指南写出了这个包含查询确认的网站财付通集成组件。&lt;BR&gt;那个《指南.doc》里说，财付通支付的过程是：买家在商家的网站上下单，然后点“财付通支付”，跳转到财付通的网站里，通过财付通的网站把钱付到商家的帐上，财付通的服务器会用xmlhttp的方式向return_url所指定的地址发送支付成功能的get通知，在收到return_url里吐出的“&amp;lt;meta name=&#34;TENCENT_ONLINE_PAYMENT&#34; content=&#34;China TENCENT&#34;&amp;gt;”之后返回。&lt;BR&gt;我问过财付通的技术人员：万一没有收到return_url吐出的这句代码的话会怎么样？对方告诉我：财付通的服务器会连续向这个return_url发送三次支付成功通知的。（居然要连续发送三次啊？！我记得支付宝的支付成功通知是只发送一次的，之前我在开发支付宝集成功的的时候，用数据库记录下了所有的支付宝网站发来的通知内容，发现��支付一次只得到一次post通知，这次我在开发财付通集成功能的时候，用数据库记录下了财付通网站发来的所有的通知内容，确实发现支付一次会在不到三秒内连续通知三次的，有时候甚至通知了四次）。最终，买家支付成功之后，买家的浏览器又会跳转到return_url这个地址上的，而且后面还带着一长串包含着各种信息的querystring。所以要求商家在return_url这个地址里具有这些特点：包含&amp;lt;meta name=&#34;TENCENT_ONLINE_PAYMENT&#34; content=&#34;China TENCENT&#34;&amp;gt;这句代码，并能告诉买家支付是否成功了。验证是否成功取决于querystring里的所有的参数（除了sign这个参数之外）连缀起来，再连上一个商家密钥，再经过md5加密，看看能否和sign这个参数对得上号，对上号了就表明验证成功了，对不上号就表明验证没有成功。刚才我说：我觉得以get方式通知的话，而且没有经过查询确认的话，这个md5签名密钥是很容易伪造的。是的，因为既然sign的编码方式是公开的，get通知方式只需要在浏览器地址栏里加一些内容就能做到，那对****来说，恐怕是有空可钻的。但是如果再加上一个查询确认的话，****就没空可钻了。&lt;BR&gt;那个《指南.doc》里说，财付通的查询协议是这样的：商家的网站向财付通的网址&lt;A href=&#34;<a href="http://mch.tenpay.com/cgi-bin/cfbi_query_order_v3.cgi" target="_blank" rel="external">http://mch.tenpay.com/cgi-bin/cfbi_query_order_v3.cgi</a>&#34;&gt;<a href="http://mch.tenpay.com/cgi-bin/cfbi_query_order_v3.cgi" target="_blank" rel="external">http://mch.tenpay.com/cgi-bin/cfbi_query_order_v3.cgi</a>&lt;/A&gt;发出一个查询请求，查询请求里必须包含cmdno、date、bargainor_id、transaction_id、sp_billno、attach、output_xml、charset、sign这九个查询字段，然后财付通的网站会验证这前八个查询字段产生的md5编码和sign字段对不对得牢，如果对得牢的话就返回一个包含支付信息的xml，如果对不牢的话就会返回一个包含出错信息的xml。&lt;BR&gt;这xml的样式可以查看以下这个地址：&lt;BR&gt;&lt;A href=&#34;<a href="http://mch.tenpay.com/cgi-bin/cfbi_query_order_v3.cgi" target="_blank" rel="external">http://mch.tenpay.com/cgi-bin/cfbi_query_order_v3.cgi</a>?cmdno=2&amp;amp;date=20091224&amp;amp;bargainor_id=1205466501&amp;amp;transaction_id=1205466501200912241433025205&amp;amp;sp_billno=27&amp;amp;attach=1&amp;amp;output_xml=1&amp;amp;charset=GB2312&amp;amp;sign=E91C661D8CBF2A0E3D20BC5C3238DF57&#34;&gt;<a href="http://mch.tenpay.com/cgi-bin/cfbi_query_order_v3.cgi" target="_blank" rel="external">http://mch.tenpay.com/cgi-bin/cfbi_query_order_v3.cgi</a>?cmdno=2&amp;amp;date=20091224&amp;amp;bargainor_id=1205466501&amp;amp;transaction_id=1205466501200912241433025205&amp;amp;sp_billno=27&amp;amp;attach=1&amp;amp;output_xml=1&amp;amp;charset=GB2312&amp;amp;sign=E91C661D8CBF2A0E3D20BC5C3238DF57&lt;/A&gt;&lt;BR&gt;如果支付失败的话，或者支付不存在的话，retcode这个标签的值不是00，而是其它的一些值。因此这个标签可以鉴别是否支付成功。&lt;BR&gt;为了保证只要买家支付成功商家的数据库就立即能把支付状态更新到成功状态，而不是买家的浏览器地址从财付通的网站上跳转到商家的网站上来之后才更新数据库，商家的网站里必须对财付通的网站发来的get通知作出响应。但是怎样区分财付通网站发来的get通知和买家的浏览器的跳转呢？我的办法很简单，就是查询request.ServerVariables(&#34;http_user_agent&#34;)的值，我发现如果是财付通网站发来的get通知的话，request.ServerVariables(&#34;http_user_agent&#34;)的值为空，如果是买家的浏览器的跳转的话，request.ServerVariables(&#34;http_user_agent&#34;)的值是各式各样的浏览器的http_user_agent值，总而言之不会是空的。而且还可以通过验证cookies来区分，那买家在商家的网站上买东西肯定是要登录的喽，而财付通的网站发来的get通知，cookies肯定也是空的。不过为了保险，我采用验证request.ServerVariables(&#34;http_user_agent&#34;)是否为空的办法来区分请求来自浏览器跳转还是来自财付通网站的通知。&lt;/P&gt;<br/>&lt;P&gt;下面是我的开发文档，一共有三个文件，分别是cls_pay.asp，userpay.asp，tenpay.asp，大家瞧得懂的话就瞧吧。&lt;/P&gt;附件下载<br/>&lt;P&gt;&lt;A href=&#34;attachments/month_1002/2010222162730.txt&#34; target=_blank&gt;cls_pay.asp&lt;/A&gt;&lt;/P&gt;<br/>&lt;P&gt;&lt;A href=&#34;attachments/month_1002/2010222163021.txt&#34; target=_blank&gt;userpay.asp&lt;/A&gt;&lt;/P&gt;<br/>&lt;P&gt;&lt;A href=&#34;attachments/month_1002/2010222162943.txt&#34; target=_blank&gt;tenpayreturn.asp&lt;/A&gt;&lt;/P&gt;<br/>&lt;P&gt;&lt;/P&gt;<br/>&lt;P&gt;最后我还要说一些事情：我在开发过程中为了测试，向自己的企业版财付通帐号充值了几十次，最后完工之后，我问那客服：这企业版财付通帐户里的钱，能在拍拍上买东西花掉的吗？她说：不能的。只能等帐户里的钱超过500元之后自动打到你的银行卡里，并扣掉1%的费用。啊？居然是这样的。我问：那，不能在拍拍上花掉，别的地方也不能花的吗？她说：不能的，只能等攒到500元后自动结帐到你的银行卡里。&lt;BR&gt;我听了别提多郁闷了，心里想我的小店猴年马月才能攒到有人向我付500元钱啊？&lt;/P&gt;]]></description>
		</item>
		
			<item>
			<link>http://fanxiaojie.com/article.asp?id=67</link>
			<title><![CDATA[一个jquery日期选取插件]]></title>
			<author>fanxiaojie@yeah.net(fanxiaojie)</author>
			<category><![CDATA[原创代码]]></category>
			<pubDate>Sun,06 Dec 2009 21:57:11 +0800</pubDate>
			<guid>http://fanxiaojie.com/index.asp?id=67</guid>
		<description><![CDATA[&lt;p&gt;高兴地发现自己的博客又能访问了。&lt;/p&gt;<br/>&lt;p&gt;之前因为上海宝漕路机房大整顿，我倒霉的自己的博客无辜被殃及。千诅万咒那些建黄站的人不得好死！&lt;/p&gt;<br/>&lt;p&gt;为了庆祝自己的博客重新开放，我在这里放一个自己刚刚写的jquery日期插件,&lt;/p&gt;<br/>&lt;img src=&#34;attachments/month_0912/2009126213743.png&#34; alt=&#34; &#34;/&gt;<br/>&lt;p&gt;也许人们会说：日期选取插件已经这么多了，为什么还要自己写一个啊？&lt;/p&gt;<br/>&lt;p&gt;其实我一开始也试图在网上找合适的日期选取插件。但是我发现了两个大问题：那些老外写的插件，多数日期格式是这样子的：DD/MM/YYYY，或者MM/DD/YYYY，而不是中国人习惯的那种写法：YYYY-MM-DD。另外，月份是写成Jan,Feb,,,这样的，而不是“一月”、“二月”。所以我想写一个自己的日期插件。而且我做到了它。&lt;/p&gt;<br/>&lt;p&gt;看我是怎样写的吧：以下内容保存为canelder.js&lt;/p&gt;<br/>&lt;pre name=&#34;code&#34; class=&#34;javascript&#34;&gt;(function($){<br/>$.sel&#101;ctDate=function(obj,settings){var $d=new Date();var DateSettings={date:new Date(),startYear:$d.getFullYear()-10,endYear:$d.getFullYear()+15,dateFormat:&#34;yyyy-mm-dd&#34;};DateSettings=$.extend(DateSettings,settings);if(typeof(DateSettings.date)==&#34;string&#34;){nowDate=new Date();nowDate.setFullYear(parseInt(DateSettings.date.split(&#34;-&#34;)[0]));nowDate.setMonth(parseInt(DateSettings.date.split(&#34;-&#34;)[1])-1);nowDate.setDate(parseInt(DateSettings.date.split(&#34;-&#34;)[2]));}if(typeof(DateSettings.date)==&#34;object&#34;){nowDate=DateSettings.date};var showDate=function(obj){var strYear=new Array();var strMonth=new Array();var mon=new Array(&#39;一&#39;,&#39;二&#39;,&#39;三&#39;,&#39;四&#39;,&#39;五&#39;,&#39;六&#39;,&#39;七&#39;,&#39;八&#39;,&#39;九&#39;,&#39;十&#39;,&#39;十一&#39;,&#39;十二&#39;);for(var i=0;i&amp;lt;12;i++){if(i==nowDate.getMonth()){strMonth.push(&#39;&amp;lt;option value=&#34;&#39;+(i+1)+&#39;&#34; sel&#101;cted=&#34;sel&#101;cted&#34;&amp;gt;&#39;+mon[i]+&#39;月&amp;lt;/option&amp;gt;&#39;);}else{strMonth.push(&#39;&amp;lt;option value=&#34;&#39;+(i+1)+&#39;&#34;&amp;gt;&#39;+mon[i]+&#39;月&amp;lt;/option&amp;gt;&#39;);}}for(var j=DateSettings.startYear;j&amp;lt;=DateSettings.endYear;j++){if(j==nowDate.getFullYear()){strYear.push(&#39;&amp;lt;option value=&#34;&#39;+j+&#39;&#34; sel&#101;cted=&#34;sel&#101;cted&#34;&amp;gt;&#39;+j+&#39;年&amp;lt;/option&amp;gt;&#39;);}else{strYear.push(&#39;&amp;lt;option value=&#34;&#39;+j+&#39;&#34;&amp;gt;&#39;+j+&#39;年&amp;lt;/option&amp;gt;&#39;);}}var getDayStr=function(){var year;var month;var nextyear;var nextmonth;year=parseInt($year.val());month=parseInt($mon.val());var sel&#101;ctD=new Date(year,month-1,1);if(month==12){nextyear=year+1;nextmonth=0;}else{nextyear=year;nextmonth=month;}var $ul=$(document.cr&#101;ateElement(&#34;ul&#34;)).addClass(&#39;day&#39;).appendTo($calenderBody).append(&#39;&amp;lt;li&amp;gt;日&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;一&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;二&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;三&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;四&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;五&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;六&amp;lt;/li&amp;gt;&#39;);var nextD=new Date(nextyear,nextmonth,1);var $date=$(document.cr&#101;ateElement(&#39;ul&#39;)).addClass(&#39;date&#39;).appendTo($calenderBody);var $day =parseInt(Math.abs(nextD-sel&#101;ctD)/1000/60/60/24);for(var ii=0;ii&amp;lt;sel&#101;ctD.getDay();ii++){$(&#39;&amp;lt;li&amp;gt; &amp;lt;/li&amp;gt;&#39;).appendTo($date);}for(var nn=1;nn&amp;lt;=$day;nn++){if(nn==nowDate.getDate())$(&#39;&amp;lt;li class=&#34;today&#34;&amp;gt;&amp;lt;a href=&#34;#&#34;&amp;gt;&#39;+nn+&#39;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&#39;).appendTo($date);else $(&#39;&amp;lt;li&amp;gt;&amp;lt;a href=&#34;#&#34;&amp;gt;&#39;+nn+&#39;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&#39;).appendTo($date);}$(&#39;li:eq(6),li:eq(13),li:eq(20),li:eq(27),li:eq(34)&#39;,$date).addClass(&#39;Sat&#39;);$(&#39;li:eq(0),li:eq(7),li:eq(14),li:eq(21),li:eq(28),li:eq(35)&#39;,$date).addClass(&#39;Sun&#39;);};var changeDate=function(){$calenderBody.empty();getDayStr();$(&#39;a&#39;,$calenderBody).click(function(){getdate($(this).text());return false;})};var pos=obj.offset();var $calender=$(document.cr&#101;ateElement(&#39;div&#39;)).addClass(&#39;calender&#39;).appendTo(document.body).css({&#39;left&#39;:pos.left+34,&#39;right&#39;:pos.top+24});var $close=$(&#39;&amp;lt;a href=&#34;#&#34;&amp;gt;&amp;amp;times;&amp;lt;/a&amp;gt;&#39;).appendTo($calender).css(&#39;float&#39;,&#39;right&#39;).click(function(){$calender.fadeOut();return false;});var $year=$(document.cr&#101;ateElement(&#39;sel&#101;ct&#39;)).html(strYear.join(&#34;&#34;)).appendTo($calender).change(function(){changeDate();});var $mon=$(document.cr&#101;ateElement(&#39;sel&#101;ct&#39;)).html(strMonth.join(&#34;&#34;)).appendTo($calender).change(function(){changeDate();});var $calenderBody=$(document.cr&#101;ateElement(&#39;div&#39;)).addClass(&#39;calenderBody&#39;).appendTo($calender);getDayStr();$(&#39;a&#39;,$calenderBody).click(function(){getdate($(this).text());return false;});$(&#39;&amp;lt;hr /&amp;gt;&#39;).appendTo($calender);$(&#39;&amp;lt;a href=&#34;#&#34;&amp;gt;今天&amp;lt;/a&amp;gt;&#39;).appendTo($calender).click(function(){var y=nowDate.getFullYear();m=parseInt(nowDate.getMonth())+1;d=nowDate.getDate();filldate(y,m,d);return false;});var getdate=function(day){var y=$year.val();var m=$mon.val();var d=day||nowDate.getDate();filldate(y,m,d)};var filldate=function(y,m,d){var returndate=DateSettings.dateFormat.replace(&#34;yyyy&#34;,y).replace(&#34;mm&#34;,m).replace(&#34;dd&#34;,d);$(obj).val(returndate);$calender.fadeOut();return false;}};showDate(obj);} <br/>})(jQuery);&lt;/pre&gt;<br/>&lt;p&gt;以下内容保存为demo.html&lt;/p&gt;<br/>&lt;pre name=&#34;code&#34; class=&#34;javascript&#34;&gt;&amp;lt;!DOCTYPE html PUBLIC &#34;-//W3C//DTD XHTML 1.0 Transitional//EN&#34; &#34;<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" target="_blank" rel="external">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</a>&#34;&amp;gt;<br/>&amp;lt;html xmlns=&#34;<a href="http://www.w3.org/1999/xhtml" target="_blank" rel="external">http://www.w3.org/1999/xhtml</a>&#34;&amp;gt;<br/>&amp;lt;head&amp;gt;<br/>&amp;lt;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=utf-8&#34; /&amp;gt;<br/>&amp;lt;title&amp;gt;simple jQuery date-picker plugin&amp;lt;/title&amp;gt;<br/>&amp;lt;style type=&#39;text/css&#39;&amp;gt;<br/>.calender {width:168px;height:auto;font-size:12px; margin-right:14px; border-top:1px solid #f8f9fa;border:2px solid #dddddd;padding:4px 6px;background:#a7a9aa;position:absolute;}<br/>.calender ul {list-style-type:none; height:auto;margin:0; padding:0;clear:both;width:168px;}<br/>.calender .day {background-color:#D0FFD0;height:16px;margin:3px 0;}<br/>a{text-decoration:none;}<br/>.calender li{float:left; width:24px; height:18px; line-height:16px; text-align:center;list-style-type:none;}<br/>.calender li a{text-decoration:none; font-family:Tahoma; font-size:12px; color:#333333;display:block;width:22px;height:16px;border-top:1px #ffffff solid;border-left:1px solid #ffffff;border-bottom:1px solid #666666;border-right:1px solid #666666;text-align:center;background:#f5f7f9;}<br/>.calender li.Sat a{color:#2080D0;}.calender li.Sun a{color:#cc0000;}<br/>.calender li.today a{background:#FFF440;font-weight:bold;}<br/>.calender li a:hover {border-left:1px solid #666666;border-top:1px solid #666666;border-bottom:1px solid #ffffff;border-right:1px solid #ffffff;}<br/>.calenderBody {clear:both;width:168px;margin-top:8px;min-height:106px;}<br/>&amp;lt;/style&amp;gt;<br/>&amp;lt;script type=&#34;text/javascript&#34; src=&#34;jquery-1.3.2.min.js&#34;&amp;gt;&amp;lt;/script&amp;gt;<br/>&amp;lt;script type=&#34;text/javascript&#34; src=&#34;calender.js&#34;&amp;gt;&amp;lt;/script&amp;gt;<br/>&amp;lt;script type=&#34;text/javascript&#34;&amp;gt;<br/>$(function(){$(&#39;#date&#39;).click(function(){$.sel&#101;ctDate($(this));})})<br/>&amp;lt;/script&amp;gt;<br/>&amp;lt;/head&amp;gt;<br/>&amp;lt;body&amp;gt;<br/>&amp;lt;input type=&#34;text&#34; readonly name=&#34;date&#34; id=&#34;date&#34;/&amp;gt;<br/>&amp;lt;/body&amp;gt;<br/>&amp;lt;/html&amp;gt;&lt;/pre&gt;<br/>&lt;p&gt;这个东东，我在IE6、IE7、IE8、firefox、chrome、safri、opera里都测试过可用了。&lt;/p&gt;<br/>&lt;p&gt;调用方法示例：&lt;/p&gt;<br/>&lt;pre name=&#34;code&#34; class=&#34;javascript&#34;&gt;$.sel&#101;ctDate($(this),{&#34;date&#34;:&#34;1999-11-1&#34;,&#34;startYear&#34;:1990,&#34;endYear&#34;:1999,dateFormat:&#34;MM/DD/YYYY&#34;});&lt;/pre&gt;<br/>&lt;p&gt;表示打开九十年代的日历，返回的日期格式是英国式的“MM/DD/YYYY”。dateFormat可用的值有&#34;MM/DD/YYYY&#34;、“DD/MM/YYYY”以及&#34;YYYY-MM-DD&#34;,默认值是&#34;YYYY-MM-DD&#34;。&lt;/p&gt;<br/>]]></description>
		</item>
		
			<item>
			<link>http://fanxiaojie.com/article.asp?id=66</link>
			<title><![CDATA[为自己正在开发中的论坛程序设计的logo ]]></title>
			<author>fanxiaojie@yeah.net(fanxiaojie)</author>
			<category><![CDATA[原创代码]]></category>
			<pubDate>Mon,23 Nov 2009 01:09:15 +0800</pubDate>
			<guid>http://fanxiaojie.com/index.asp?id=66</guid>
		<description><![CDATA[logo图片:&lt;img src=&#34;attachments/month_0911/200911231432.gif&#34; alt=&#34; &#34;/&gt;<br/>logo文字:&lt;img src=&#34;attachments/month_0911/2009112311018.gif&#34; alt=&#34; &#34;/&gt;<br/>88*31的小logo&lt;img src=&#34;attachments/month_0911/200911231651.gif&#34; alt=&#34; &#34;/&gt;<br/>80*15的小logo&lt;img src=&#34;attachments/month_0911/200911231840.gif&#34; alt=&#34; &#34;/&gt;]]></description>
		</item>
		
			<item>
			<link>http://fanxiaojie.com/article.asp?id=65</link>
			<title><![CDATA[写了一个小巧的拾色工具]]></title>
			<author>fanxiaojie@yeah.net(fanxiaojie)</author>
			<category><![CDATA[原创代码]]></category>
			<pubDate>Tue,10 Nov 2009 14:52:34 +0800</pubDate>
			<guid>http://fanxiaojie.com/index.asp?id=65</guid>
		<description><![CDATA[&lt;p&gt;写了一个小巧的jquery拾色工具,代码简单得不得了,只有这么几行: &lt;/p&gt;<br/>&lt;pre name=&#34;code&#34; class=&#34;javascript&#34;&gt;(function($){ <br/>$.fn.pickColor=function(callback)<br/> {<br/> var itemColors=[&#34;#FFFFFF&#34;,&#34;#E5E4E4&#34;,&#34;#D9D8D8&#34;,&#34;#C0BDBD&#34;,&#34;#A7A4A4&#34;,&#34;#8E8A8B&#34;,&#34;#827E7F&#34;,&#34;#767173&#34;,&#34;#5C585A&#34;,&#34;#000000&#34;,&#34;#FEFCDF&#34;,&#34;#FEF4C4&#34;,&#34;#FEED9B&#34;,&#34;#FEE573&#34;,&#34;#FFED43&#34;,&#34;#F6CC0B&#34;,&#34;#E0B800&#34;,&#34;#C9A601&#34;,&#34;#AD8E00&#34;,&#34;#8C7301&#34;,&#34;#FFDED3&#34;,&#34;#FFC4B0&#34;,&#34;#FF9D7D&#34;,&#34;#FF7A4E&#34;,&#34;#FF6600&#34;,&#34;#E95D00&#34;,&#34;#D15502&#34;,&#34;#BA4B01&#34;,&#34;#A44201&#34;,&#34;#8D3901&#34;,&#34;#FFD2D0&#34;,&#34;#FFBAB7&#34;,&#34;#FE9A95&#34;,&#34;#FF7A73&#34;,&#34;#FF483F&#34;,&#34;#FE2419&#34;,&#34;#F10B00&#34;,&#34;#D40A00&#34;,&#34;#940000&#34;,&#34;#6D201B&#34;,&#34;#FFDAED&#34;,&#34;#FFB7DC&#34;,&#34;#FFA1D1&#34;,&#34;#FF84C3&#34;,&#34;#FF57AC&#34;,&#34;#FD1289&#34;,&#34;#EC0078&#34;,&#34;#D6006D&#34;,&#34;#BB005F&#34;,&#34;#9B014F&#34;,&#34;#FCD6FE&#34;,&#34;#FBBCFF&#34;,&#34;#F9A1FE&#34;,&#34;#F784FE&#34;,&#34;#F564FE&#34;,&#34;#F546FF&#34;,&#34;#F328FF&#34;,&#34;#D801E5&#34;,&#34;#C001CB&#34;,&#34;#8F0197&#34;,&#34;#E2F0FE&#34;,&#34;#C7E2FE&#34;,&#34;#ADD5FE&#34;,&#34;#92C7FE&#34;,&#34;#6EB5FF&#34;,&#34;#48A2FF&#34;,&#34;#2690FE&#34;,&#34;#0162F4&#34;,&#34;#013ADD&#34;,&#34;#0021B0&#34;,&#34;#D3FDFF&#34;,&#34;#ACFAFD&#34;,&#34;#7CFAFF&#34;,&#34;#4AF7FE&#34;,&#34;#1DE6FE&#34;,&#34;#01DEFF&#34;,&#34;#00CDEC&#34;,&#34;#01B6DE&#34;,&#34;#00A0C2&#34;,&#34;#0084A0&#34;,&#34;#EDFFCF&#34;,&#34;#DFFEAA&#34;,&#34;#D1FD88&#34;,&#34;#BEFA5A&#34;,&#34;#A8F32A&#34;,&#34;#8FD80A&#34;,&#34;#79C101&#34;,&#34;#3FA701&#34;,&#34;#307F00&#34;,&#34;#156200&#34;,&#34;#D4C89F&#34;,&#34;#DAAD88&#34;,&#34;#C49578&#34;,&#34;#C2877E&#34;,&#34;#AC8295&#34;,&#34;#C0A5C4&#34;,&#34;#969AC2&#34;,&#34;#92B7D7&#34;,&#34;#80ADAF&#34;,&#34;#9CA53B&#34;];<br/> var $colorBox=$(document.cr&#101;ateElement(&#34;div&#34;)).css({&#34;width&#34;:&#34;100px&#34;,&#34;height&#34;:&#34;100px&#34;,&#34;position&#34;:&#34;absolute&#34;,&#34;border&#34;:&#34;1px solid #999999&#34;,&#34;line-height&#34;:&#34;10px&#34;});<br/> $.each(itemColors,function(n,v)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;var $item=$(&#39;&amp;lt;a href=&#34;&#34; title=&#34;&#39;+v+&#39;&#34;&amp;gt;&amp;lt;img src=&#34;&#34; width=&#34;10&#34; height=&#34;10&#34; border=&#34;0&#34; style=&#34;background:&#39;+v+&#39;;&#34; /&amp;gt;&amp;lt;/a&amp;gt;&#39;).click(function(){callback(v);$colorBox.remove();return false;}).appendTo($colorBox);<br/>&nbsp;&nbsp;})<br/> $colorBox.ins&#101;rtAfter(this).hover(function(){},function(){$colorBox.remove();});<br/> }<br/>})(jQuery); &lt;/pre&gt;<br/>&lt;p&gt;请把上面的代码保存为colorpicker.js &lt;/p&gt;<br/>&lt;p&gt;需要用到的图片如下:&lt;/p&gt;<br/>&lt;img src=&#34;attachments/month_0911/20091110144913.gif&#34; alt=&#34; &#34;/&gt;<br/>&lt;p&gt;调用方法如下:&lt;/p&gt;<br/>&lt;pre name=&#34;code&#34; class=&#34;html&#34;&gt; &amp;lt;!DOCTYPE html PUBLIC &#34;-//W3C//DTD XHTML 1.0 Strict//EN&#34; &#34;<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" target="_blank" rel="external">http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd</a>&#34;&amp;gt; <br/>&amp;lt;html xmlns=&#34;<a href="http://www.w3.org/1999/xhtml" target="_blank" rel="external">http://www.w3.org/1999/xhtml</a>&#34;&amp;gt; <br/>&amp;lt;head&amp;gt; <br/>&amp;lt;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=gb2312&#34; /&amp;gt; <br/>&amp;lt;title&amp;gt;我的拾色器&amp;lt;/title&amp;gt; <br/>&amp;lt;script language=&#34;javascript&#34; type=&#34;text/javascript&#34; src=&#34;jquery-1.3.2.min.js&#34;&amp;gt;&amp;lt;/script&amp;gt; <br/>&amp;lt;script language=&#34;javascript&#34; type=&#34;text/javascript&#34; src=&#34;colorpicker.js&#34;&amp;gt;&amp;lt;/script&amp;gt; <br/>&amp;lt;/head&amp;gt; <br/>&amp;lt;body&amp;gt; <br/>&amp;lt;!--.main-wrap,#main End--&amp;gt; <br/>&amp;lt;img src=&#34;color.png&#34; onclick=&#34;var $this=$(this);$this.pickColor(function(color){$this.css(&#39;background&#39;,color);});&#34;/&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;/br /&amp;gt; <br/>&amp;lt;input type=&#34;text&#34; size=&#34;7&#34; maxlength=&#34;7&#34; value=&#34;#ffffff&#34; onclick=&#34;var $this=$(this);$this.pickColor(function(color){$this.css(&#39;background&#39;,color);$this.val(color);$this.val(color);});&#34; /&amp;gt; <br/>&amp;lt;/body&amp;gt; <br/>&amp;lt;/html&amp;gt; &lt;/pre&gt;<br/>&lt;p&gt;不错吧!嘎嘎! &lt;/p&gt;<br/>&lt;p&gt;找张截图显示效果:&lt;/p&gt;<br/>&lt;img src=&#34;attachments/month_0911/20091110145123.png&#34; alt=&#34; &#34;/&gt;]]></description>
		</item>
		
			<item>
			<link>http://fanxiaojie.com/article.asp?id=63</link>
			<title><![CDATA[又为ajax上传工具重新写了一个服务器端上传程序]]></title>
			<author>fanxiaojie@yeah.net(fanxiaojie)</author>
			<category><![CDATA[原创代码]]></category>
			<pubDate>Mon,26 Oct 2009 12:36:02 +0800</pubDate>
			<guid>http://fanxiaojie.com/index.asp?id=63</guid>
		<description><![CDATA[&lt;p&gt;之前写了一个ajax上传工具。但是只是客户端的工具是我写的，服务器端的那个程序，我是修改了一个网上流传的无组件上传类。因为当时我还不懂什么adodb.stream什么的。但是我依然觉得它不够简洁。因为我知道它是可以一次性处理多个文件而且循环处理的。但是ajax上传工具一次只上传一个文件。为了让服务器资源能省的尽量省，我又不懈地研究，重新写了这么一个上传文件。把下面的代码保存为upload.asp吧：&lt;/p&gt;<br/>&lt;pre name=&#34;code&#34; class=&#34;asp&#34;&gt;&amp;lt;%@LANGUAGE=&#34;VBSCRIPT&#34; CODEPAGE=&#34;936&#34;%&amp;gt;<br/>&amp;lt;%Option Explicit<br/>Response.Buffer = True<br/>response.charset = &#34;gb2312&#34;<br/>Const uploadfolder=&#34;uploadpic&#34;<br/>Const allowExt=&#34;jpg,jpeg,gif,png,rar,doc,zip,xls,pdf,swf,avi,mp3,txt,htm,html&#34;<br/><br/>Function BytestoStr(filestr)<br/>&#160;&#160;&#160;&#160;dim skipflag : skipflag = 0<br/>&#160;&#160;&#160;&#160;dim varlen,clow,i<br/>&#160;&#160;&#160;&#160;dim content : content = &#34;&#34;<br/>&#160;&#160;&#160;&#160;if not isnull(filestr) then<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;varlen = lenb(filestr)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;for i=1 to varlen<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if skipflag=0 then<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;clow = midb(filestr,i,1)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if ascb(clow) &amp;gt; 127 then<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;content = content &amp;amp; chr(ascw(midb(filestr,i+1,1) &amp;amp; clow))<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;skipflag = 1<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;content = content &amp;amp; chr(ascb(clow))<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;skipflag = 0<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end if<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;next<br/>&#160;&#160;&#160;&#160;end if<br/>&#160;&#160;&#160;&#160;BytestoStr = content<br/>End Function<br/><br/>Function getFilepath(ext)<br/>&#160;&#160;&#160;&#160;dim folderpath,fso,filename<br/>&#160;&#160;&#160;&#160;folderpath=server.mappath(uploadfolder)<br/>&#160;&#160;&#160;&#160;set fso=server.cr&#101;ateobject(&#34;Scripting.FileSystemObject&#34;)<br/>&#160;&#160;&#160;&#160;if Fso.FolderExists(folderpath)=false then fso.Cr&#101;ateFolder(folderpath)<br/>&#160;&#160;&#160;&#160;folderpath=folderpath&amp;amp;&#34;\&#34;&amp;amp;date()<br/>&#160;&#160;&#160;&#160;fileinfo=uploadfolder&amp;amp;date()<br/>&#160;&#160;&#160;&#160;if Fso.FolderExists(folderpath)=false then fso.Cr&#101;ateFolder(folderpath)<br/>&#160;&#160;&#160;&#160;filename=cstr(timer()*100)&amp;amp;&#34;.&#34;&amp;amp;ext<br/>&#160;&#160;&#160;&#160;getFilepath=folderpath&amp;amp;&#34;\&#34;&amp;amp;filename<br/>&#160;&#160;&#160;&#160;fileinfo=fileinfo&amp;amp;&#34;/&#34;&amp;amp;filename<br/>&#160;&#160;&#160;&#160;set Fso=nothing<br/>End Function<br/><br/>Function CheckExt(fileinfo)<br/>&#160;&#160;&#160;&#160;dim re<br/>&#160;&#160;&#160;&#160;set re=new regexp<br/>&#160;&#160;&#160;&#160;re.global=false<br/>&#160;&#160;&#160;&#160;re.ignorecase=true<br/>&#160;&#160;&#160;&#160;re.pattern=&#34;filename=&#34;&#34;[^&#34;&#34;]+\.(\w{2,4})&#34;&#34;&#34;<br/>&#160;&#160;&#160;&#160;if re.test(fileinfo)=false then<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;response.write &#34;{&#34;&#34;err&#34;&#34;:&#34;&#34;\u4E0A\u4F20\u6587\u4EF6\u4E0D\u6B63\u786E&#34;&#34;,&#34;&#34;msg&#34;&#34;:&#34;&#34;&#34;&#34;}&#34;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;CheckExt=false<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set re=nothing<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;exit function<br/>&#160;&#160;&#160;&#160;end if<br/>&#160;&#160;&#160;&#160;re.pattern=&#34;^[\s\S]+filename=&#34;&#34;[^&#34;&#34;]+\.(\w{2,4})&#34;&#34;[\s\S]+$&#34;<br/>&#160;&#160;&#160;&#160;Ext=re.replace(fileinfo,&#34;$1&#34;)<br/>&#160;&#160;&#160;&#160;Ext=lcase(Ext)<br/>&#160;&#160;&#160;&#160;re.pattern=&#34;^(&#34;&amp;amp;replace(allowExt,&#34;,&#34;,&#34;)|(&#34;)&amp;amp;&#34;)$&#34;<br/>&#160;&#160;&#160;&#160;if re.test(Ext)=false then<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;response.write &#34;{&#34;&#34;err&#34;&#34;:&#34;&#34;\u6587\u4EF6\u7C7B\u578B\u4E0D\u6B63\u786E&#34;&#34;,&#34;&#34;msg&#34;&#34;:&#34;&#34;&#34;&#34;}&#34;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;CheckExt=false<br/>&#160;&#160;&#160;&#160;else<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;CheckExt=true<br/>&#160;&#160;&#160;&#160;end if<br/>&#160;&#160;&#160;&#160;set re=nothing<br/>End Function<br/><br/>If Request.serverVariables(&#34;request_method&#34;)=&#34;POST&#34; then<br/>&#160;&#160;&#160;&#160;if Request.TotalBytes&amp;gt;204800 then<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;response.write &#34;{&#34;&#34;err&#34;&#34;:&#34;&#34;\u6587\u4EF6\u592A\u5927\u4E86\2C\u4E0A\u4F20\u6587\u4EF6\u4E0D\u80FD\u8D85\u8FC7200K&#34;&#34;,&#34;&#34;msg&#34;&#34;:&#34;&#34;&#34;&#34;}&#34;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;response.end<br/>&#160;&#160;&#160;&#160;end if<br/>&#160;&#160;&#160;&#160;dim oStream,oBinary,istart,iseparate,ifinish,ilength,bcrlf,sStream,fileinfo,filepath,ext<br/>&#160;&#160;&#160;&#160;bcrlf=ChrB(13)&amp;amp;ChrB (10)<br/>&#160;&#160;&#160;&#160;set oStream=server.cr&#101;ateobject(&#34;adodb.stream&#34;)<br/>&#160;&#160;&#160;&#160;oStream.Type = 1<br/>&#160;&#160;&#160;&#160;oStream.Mode = 3<br/>&#160;&#160;&#160;&#160;oStream.Open<br/>&#160;&#160;&#160;&#160;oBinary=Request.BinaryRead (Request.TotalBytes)<br/>&#160;&#160;&#160;&#160;oStream.write oBinary<br/>&#160;&#160;&#160;&#160;istart=instrb(oBinary,bcrlf&amp;amp;bcrlf)+3<br/>&#160;&#160;&#160;&#160;iseparate=leftb(oBinary,instrb(oBinary,bcrlf)-1)<br/>&#160;&#160;&#160;&#160;fileinfo=leftb(oBinary,istart-4)<br/>&#160;&#160;&#160;&#160;fileinfo=BytestoStr(fileinfo)<br/>&#160;&#160;&#160;&#160;if CheckExt(fileinfo)=false then<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;oStream.close<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;set oStream=nothing<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;response.end<br/>&#160;&#160;&#160;&#160;end if<br/>&#160;&#160;&#160;&#160;filepath=getFilepath(ext)<br/>&#160;&#160;&#160;&#160;set sStream=server.cr&#101;ateobject(&#34;adodb.stream&#34;)<br/>&#160;&#160;&#160;&#160;sStream.Type = 1<br/>&#160;&#160;&#160;&#160;sStream.Mode = 3<br/>&#160;&#160;&#160;&#160;sStream.Open<br/>&#160;&#160;&#160;&#160;ifinish=instrb(istart,oBinary,iseparate)-3<br/>&#160;&#160;&#160;&#160;ilength=ifinish-istart<br/>&#160;&#160;&#160;&#160;oStream.position=istart<br/>&#160;&#160;&#160;&#160;oStream.Copyto sStream,ilength<br/>&#160;&#160;&#160;&#160;sStream.savetofile filepath,2<br/>&#160;&#160;&#160;&#160;sStream.close<br/>&#160;&#160;&#160;&#160;oStream.close<br/>&#160;&#160;&#160;&#160;set sStream=nothing<br/>&#160;&#160;&#160;&#160;set oStream=nothing<br/>&#160;&#160;&#160;&#160;response.write &#34;{&#34;&#34;err&#34;&#34;:&#34;&#34;&#34;&#34;,&#34;&#34;msg&#34;&#34;:&#34;&#34;&#34;&amp;amp;fileinfo&amp;amp;&#34;&#34;&#34;}&#34;<br/>End If<br/>%&amp;gt;&lt;/pre&gt;<br/>&lt;p&gt;这个上传程序，上面有两个参数可以手工修改，一个是上传文件夹，另一个是允许上传的文件格式。它会把上传的文件按日期分存到不同的文件夹里，如果该文件夹不存在，则自动创建。然后文件名是当前时间的厘秒数加扩展名。命名方式其实可以按自己的意愿重新写过的。改那个getfilepath函数就好了。&lt;/p&gt;<br/>&lt;p&gt;那个ajax上传组件在这里：&lt;a href=&#34;<a href="http://www.fanxiaojie.com/article.asp?id=57" target="_blank" rel="external">http://www.fanxiaojie.com/article.asp?id=57</a>&#34; target=&#34;_blank&#34;&gt;<a href="http://www.fanxiaojie.com/article.asp?id=57" target="_blank" rel="external">http://www.fanxiaojie.com/article.asp?id=57</a>&lt;/a&gt;&lt;/p&gt;<br/>]]></description>
		</item>
		
			<item>
			<link>http://fanxiaojie.com/article.asp?id=62</link>
			<title><![CDATA[写了一个完美的msgbox,可是怎么也舍不得拿出来分享]]></title>
			<author>fanxiaojie@yeah.net(fanxiaojie)</author>
			<category><![CDATA[原创代码]]></category>
			<pubDate>Sun,25 Oct 2009 22:16:40 +0800</pubDate>
			<guid>http://fanxiaojie.com/index.asp?id=62</guid>
		<description><![CDATA[&lt;p&gt;之前在<a href="http://bbs.jquery.org.cn" target="_blank" rel="external">http://bbs.jquery.org.cn</a>上看到一个msgbox东东,&lt;a href=&#34;<a href="http://bbs.jquery.org.cn/read.php?tid-7115-keyword-msg.html" target="_blank" rel="external">http://bbs.jquery.org.cn/read.php?tid-7115-keyword-msg.html</a>&#34; target=&#34;_blank&#34;&gt;<a href="http://bbs.jquery.org.cn/read.php?tid-7115-keyword-msg.html" target="_blank" rel="external">http://bbs.jquery.org.cn/read.php?tid-7115-keyword-msg.html</a>&lt;/a&gt;&lt;/p&gt;<br/>&lt;p&gt;我把它下载下来用,但是发现了很多问题.比如说,它居然在IE 6.0浏览器中那个弹出框跑到页面最下面去了。在Opera浏览器中也显示很不正常。而且，更讨厌的是，如果页面长一点，超过一屏，而且点击打开框时，页面正滚在页面底部话，在IE 7、IE 8中，这个框会出现在页面上方的，也就是在屏幕外面，必须把滚动条滚上去才能看到。对一些不熟悉的人来说，他们会感到奇怪，因为没有看到这个框，所以不知道这个框跑到哪里去了。而且那个遮挡层实际上只能盖住一屏。另外，当鼠标点一下它的时候，偶然它还会乱跑。&lt;/p&gt;<br/>&lt;p&gt;这段时间以来，我在实际应用中不断地琢磨、修改、琢磨、修改它，终于把它改得在所有的浏览器中都显示一致了。我所指的所有浏览器指的是IE6、IE7、IE8、firefox3、chrome2、Opera10、Saferi4。而且它再也不会乱跑了。而且它还可以改作alert框、confirm框来使用。&lt;/p&gt;<br/>&lt;p&gt;我真高兴自己的心血和努力换来的这些突破。不过，我在想：我应该把这个沥心呕血之作拿到网上去给人分享吗？&lt;/p&gt;<br/><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://fanxiaojie.com/article.asp?id=61</link>
			<title><![CDATA[用jquery写了一个简短的分页插件]]></title>
			<author>fanxiaojie@yeah.net(fanxiaojie)</author>
			<category><![CDATA[原创代码]]></category>
			<pubDate>Sun,25 Oct 2009 21:36:29 +0800</pubDate>
			<guid>http://fanxiaojie.com/index.asp?id=61</guid>
		<description><![CDATA[&lt;p&gt;这个分页插件用起来很简单,就是,在网页头上写&amp;lt;script type=&#34;text/javascript&#34; src=&#34;jquery.1.3.2-min.js&#34;&amp;gt;&amp;lt;/script&amp;gt;<br/>&amp;lt;script type=&#34;text/javascript&#34; src=&#34;page.js&#34;&amp;gt;&amp;lt;/script&amp;gt;&lt;/p&gt;<br/>&lt;p&gt;然后,在网页中加入一个table,比如说这样写:&lt;/p&gt;<br/>&lt;pre name=&#34;code&#34; class=&#34;html&#34;&gt;&amp;lt;table class=&#34;page&#34; cellspacing=&#34;0&#34; cellpadding=&#34;0&#34; cols=&#34;9&#34;&amp;gt;<br/>&amp;lt;caption&amp;gt;&amp;lt;/caption&amp;gt;<br/>&nbsp;&nbsp;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;列1&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;列2&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;列3&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;<br/>&nbsp;&nbsp;&amp;lt;tr height=&#34;19&#34;&amp;gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&amp;lt;td height=&#34;19&#34; align=&#34;right&#34; width=&#34;72&#34;&amp;gt;1&amp;lt;/td&amp;gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&amp;lt;td align=&#34;right&#34; width=&#34;72&#34;&amp;gt;2&amp;lt;/td&amp;gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&amp;lt;td align=&#34;right&#34; width=&#34;72&#34;&amp;gt;3&amp;lt;/td&amp;gt;<br/>&nbsp;&nbsp;&amp;lt;/tr&amp;gt;<br/>&nbsp;&nbsp;&amp;lt;tr height=&#34;19&#34;&amp;gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&amp;lt;td height=&#34;19&#34; align=&#34;right&#34;&amp;gt;4&amp;lt;/td&amp;gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&amp;lt;td align=&#34;right&#34;&amp;gt;5&amp;lt;/td&amp;gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&amp;lt;td align=&#34;right&#34;&amp;gt;6&amp;lt;/td&amp;gt;<br/>&nbsp;&nbsp;&amp;lt;/tr&amp;gt;<br/>&nbsp;&nbsp;&amp;lt;tr height=&#34;19&#34;&amp;gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&amp;lt;td height=&#34;19&#34; align=&#34;right&#34;&amp;gt;7&amp;lt;/td&amp;gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&amp;lt;td align=&#34;right&#34;&amp;gt;8&amp;lt;/td&amp;gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&amp;lt;td align=&#34;right&#34;&amp;gt;9&amp;lt;/td&amp;gt;<br/>&nbsp;&nbsp;&amp;lt;/tr&amp;gt;<br/>&nbsp;&nbsp;&amp;lt;tr height=&#34;19&#34;&amp;gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&amp;lt;td height=&#34;19&#34; align=&#34;right&#34;&amp;gt;...&amp;lt;/td&amp;gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&amp;lt;td align=&#34;right&#34;&amp;gt;...&amp;lt;/td&amp;gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&amp;lt;td align=&#34;right&#34;&amp;gt;...&amp;lt;/td&amp;gt;<br/>&nbsp;&nbsp;&amp;lt;/tr&amp;gt;<br/>&nbsp;&nbsp;&amp;lt;tr height=&#34;19&#34;&amp;gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&amp;lt;td height=&#34;19&#34; align=&#34;right&#34;&amp;gt;118&amp;lt;/td&amp;gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&amp;lt;td align=&#34;right&#34;&amp;gt;119&amp;lt;/td&amp;gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&amp;lt;td align=&#34;right&#34;&amp;gt;120&amp;lt;/td&amp;gt;<br/>&nbsp;&nbsp;&amp;lt;/tr&amp;gt;<br/>&amp;lt;/table&amp;gt;&lt;/pre&gt;<br/>&lt;p&gt;注意了,这个table需要有一个&lt;caption&gt;元素,用来放分页的手柄,另外,还要有一个cols属性,用来存放pagesize。然后，再在网页头上加上这么一句&lt;/p&gt;<br/>&lt;pre name=&#34;code&#34; class=&#34;html&#34;&gt;&amp;lt;script type=&#34;text/javascript&#34;&amp;gt;<br/>$.ready(function(){<br/>$.page(&#34;table.page&#34;);<br/>})<br/>&amp;lt;/script&amp;gt;&lt;/pre&gt;<br/>&lt;p&gt;这样就好了。它会自动分页了。这个page.js的内容是：&lt;/p&gt;<br/>&lt;pre name=&#34;code&#34; class=&#34;javascript&#34;&gt;(function($){<br/>$.page=function(divId){<br/>&#160;&#160;&#160;&#160;var $y=$(divId);<br/>&#160;&#160;&#160;&#160;var table=$(&#34;tr:has(td)&#34;,$y);<br/>&#160;&#160;&#160;&#160;var row=table.length;<br/>&#160;&#160;&#160;&#160;var pageSize=parseInt($y.attr(&#34;cols&#34;));<br/>&#160;&#160;&#160;&#160;var allPage=parseInt(((row+pageSize-1)/pageSize),10);<br/>&#160;&#160;&#160;&#160;var currentPage=1;<br/>&#160;&#160;&#160;&#160;table.hide();<br/>&#160;&#160;&#160;&#160;var $menu=$(&#34;caption&#34;,$y);<br/>&#160;&#160;&#160;&#160;$menu.append(&#34;&amp;lt;span id=&#39;pre&#39;&amp;gt;&amp;amp;lt;&amp;lt;/span&amp;gt;&#34;);<br/>&#160;&#160;&#160;&#160;for(var i=1;i&amp;lt;=allPage;i++){$(&#34;&amp;lt;span&amp;gt;&#34;+i+&#34;&amp;lt;/span&amp;gt;&#34;).click(function(){showRow($(&#34;span&#34;,$menu).index(this));}).appendTo($menu);}<br/>&#160;&#160;&#160;&#160;$menu.append(&#34;&amp;lt;span id=\&#34;next\&#34;&amp;gt;&amp;amp;gt;&amp;lt;/span&amp;gt;&#34;);<br/>&#160;&#160;&#160;&#160;$(&#34;#pre&#34;).click(function(){showPre();});<br/>&#160;&#160;&#160;&#160;$(&#34;#next&#34;).click(function(){showNext();});<br/>&#160;&#160;&#160;&#160;showRow(1);<br/>&#160;&#160;&#160;&#160;function showRow(page){currentPage=parseInt(page);<br/>&#160;&#160;&#160;&#160;table.hide();<br/>&#160;&#160;&#160;&#160;var first=(currentPage-1)*pageSize;<br/>&#160;&#160;&#160;&#160;var last=pageSize*currentPage;<br/>&#160;&#160;&#160;&#160;if(last&amp;gt;row) last=row;<br/>&#160;&#160;&#160;&#160;for(var i=first;i&amp;lt;last;i++){table.eq(i).show();}<br/>&#160;&#160;&#160;&#160;$(&#34;span&#34;,$menu).removeClass(&#34;current&#34;);<br/>&#160;&#160;&#160;&#160;$(&#34;span:eq(&#34;+currentPage+&#34;)&#34;,$menu).addClass(&#34;current&#34;)<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;function showPre(){var p;if(currentPage==1){p=allPage;}else{p=currentPage-1;};showRow(p);}<br/>&#160;&#160;&#160;&#160;function showNext(){var p;if(currentPage==allPage){p=1;}else{p=currentPage+1;}showRow(p);}<br/>&#160;&#160;&#160;&#160;}<br/>})(jQuery);&lt;/pre&gt;<br/>&lt;p&gt;为了更合适些，最好再加入这样的css代码：&lt;/p&gt;<br/>&lt;pre name=&#34;code&#34; class=&#34;css&#34;&gt;table.page caption span{cursor:pointer;padding:0 8px;}<br/>table.page caption span.current{background:#f8f8f8;color:#ff0000;}<br/>table.page{background:#999999;}&lt;/pre&gt;<br/>&lt;p&gt;它会自动把包含&amp;lt;th&amp;gt;的行作为表头固定着的。&lt;/p&gt;<br/>]]></description>
		</item>
		
</channel>
</rss>
