<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[WindKer'Blog]]></title>
<link>http://www.icediary.net/</link>
<description><![CDATA[分享程序生活的点点滴滴！！]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[470280558@qq.com(WindKer)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>WindKer&#39;Blog</title>
	<url>http://www.icediary.net/images/logos.gif</url>
	<link>http://www.icediary.net/</link>
	<description>WindKer&#39;Blog</description>
</image>

			<item>
			<link>http://www.icediary.net/article.asp?id=273</link>
			<title><![CDATA[frame, iframe, frameset 的区别 ]]></title>
			<author>470280558@qq.com(WindKer)</author>
			<category><![CDATA[Div/Css]]></category>
			<pubDate>Fri,12 Mar 2010 15:35:23 +0800</pubDate>
			<guid>http://www.icediary.net/default.asp?id=273</guid>
		<description><![CDATA[框架概念 ： <br/>所谓框架便是网页画面分成几个框窗，同时取得多个 URL。只需要 &lt;FRAMESET&gt; &lt;FRAME&gt; 即可，而所有框架标记需要放在一个总起的 html 档，这个档案只记录了该框架 如何划分，不会显示任何资料，所以不必放入 &lt;BODY&gt; 标记，浏览这框架必须读取这档 案而不是其它框窗的档案。&lt;FRAMESET&gt; 是用以划分框窗，每一框窗由一个 &lt;FRAME&gt; 标 记所标示，&lt;FRAME&gt;必须在 &lt;FRAMESET&gt; 范围中使用。如下例： <br/>&lt;frameset cols=&#34;50%,*&#34;&gt; <br/>&lt;frame name=&#34;hello&#34; src=&#34;up2u.html&#34;&gt; <br/>&lt;frame name=&#34;hi&#34; src=&#34;me2.html&#34;&gt; <br/>&lt;/frameset&gt; <br/>此例中 &lt;FRAMESET&gt; 把画面分成左右两相等部分，左便是显示 up2u.html，右边则会显示 me2.html 这档案，&lt;FRAME&gt; 标记所标示的框窗永远是按由上而下、由左至右的次序。 <br/><br/>本节与 Composer 教室的【运用框架】大部分相同，只是本节增加了内容及较为详细，正 如其它篇章一样并不会提及网页制作工具，若阁下学会了 HTML 相信你亦不会选用 Composer ， FrontPage 一类的工具了。 <br/><br/>■ &lt;FRAMESET&gt; &lt;FRAME&gt; ： <br/><br/>&lt;FRAMESET&gt; 称框架标记，用以宣告HTML文件为框架模式，并设定视窗如何分割。 <br/>&lt;FRAME&gt; 则只是设定某一个框窗内的参数属性。 <br/>&lt;FRAMESET&gt; 参数设定： <br/>例子：&lt;frameset rows=&#34;90,*&#34; frameborder=&#34;0&#34; border=0 framespacing=&#34;2&#34; bordercolor=&#34;#008000&#34;&gt; <br/><br/>COLS=&#34;90,*&#34; <br/>垂直切割画面(如分左右两个画面)，接受整数值、百分数， * 则代表占用馀下空 间。数值的个数代表分成的视窗数目且以逗号分隔。例如COLS=&#34;30,*,50%&#34; 可以 切成叁个视窗，第一个视窗是 30 pixels 的宽度，为一绝对分割，第二个视窗是当 分配完第一及第叁个视窗後剩下的空间，第叁个视窗则占整个画面的 50% 宽度 为 一相对分割。您可自己调整数字。 <br/>ROWS=&#34;120,*&#34; <br/>就是横向切割，将画面上下分开，数值设定同上。唯 COLS 与 ROWS 两参数尽量 不要同在一个 &lt;FRAMESET&gt; 标记中，因 Netacape 偶然不能显示这类形的框架，尽 采用多重分割。 <br/>frameborder=&#34;0&#34; <br/>设定框架的边框，其值只有 0 和 1 ， 0 表示不要边框， 1 表示要显示边框。（避 免使用 yes 或 no ） <br/>border=&#34;0&#34; <br/>设定框架的边框厚度，以 pixels 为单位。 <br/>bordercolor=&#34;#008000&#34; <br/>设定框架的边框颜色。颜色值请参考【调色原理】。 <br/>framespacing=&#34;5&#34; <br/>表示框架与框架间的保留空白的距离。 <br/>&lt;FRAME&gt; 参数设定： <br/>例子：&lt;frame name=&#34;top&#34; src=&#34;a.html&#34; marginwidth=&#34;5&#34; marginheight=&#34;5&#34; scrolling=&#34;Auto&#34; frameborder=&#34;0&#34; noresize framespacing=&#34;6&#34; bordercolor=&#34;#0000FF&#34;&gt; <br/><br/>SRC=&#34;a.html&#34; <br/>设定此框窗中要显示的网页档案名称，每个框窗一定要对应着一个网页档案。你可 使用绝对路径或相对路径，有关此两者详见於【连结进阶】 。 <br/>NAME=&#34;top&#34; <br/>设定这个框窗的名称，这样才能指定框架来作连结，必须但任意命名。 <br/>frameborder=0 <br/>设定框架的边框，其值只有 0 和 1 ， 0 表示不要边框， 1 表示要显示边框。（避 免使用 yes 或 no ） <br/>framespacing=&#34;6&#34; <br/>表示框架与框架间的保留空白的距离。 <br/>bordercolor=&#34;#008000&#34; <br/>设定框架的边框颜色。颜色值请参考【HTML 剖析】。 <br/>scrolling=&#34;Auto&#34; <br/>设定是否要显示卷轴，YES 表示要显示卷轴，NO 表示无论如何都不要显示， AUTO是视情况显示。 <br/>noresize <br/>设定不让使用者可以改变这个框框的大小，亦没有设定此参数，使用者可以很随 意地拉动框架，改变其大小。 <br/>marginhight=5 <br/>表示框架高度部份边缘所保留的空间。 <br/>marginwidth=5 <br/>表示框架宽度部份边缘所保留的空间。 <br/>以下是一些例子：（与 Composer 教室的【运用框架】相同） <br/><br/>例子 HTML Code <br/>&lt;frameset rows=&#34;80,*&#34;&gt; <br/>&lt;frame name=&#34;top&#34; src=&#34;a.html&#34;&gt; <br/>&lt;frame name=&#34;bottom&#34; src=&#34;b.html&#34;&gt; <br/>&lt;/frameset&gt; <br/><br/>例子 HTML Code <br/>&lt;frameset rows=&#34;80,*,80&#34;&gt; <br/>&lt;frame name=&#34;top&#34; src=&#34;a.html&#34;&gt; <br/>&lt;frame name=&#34;middle&#34; src=&#34;b.html&#34;&gt; <br/>&lt;frame name=&#34;bottom&#34; src=&#34;c.html&#34;&gt; <br/>&lt;/frameset&gt; <br/><br/>例子 HTML Code <br/>&lt;frameset cols=&#34;150,*&#34;&gt; <br/>&lt;frameset rows=&#34;80,*&#34;&gt; <br/>&lt;frame name=&#34;upper_left&#34; src=&#34;a.html&#34;&gt; <br/>&lt;frame name=&#34;lower_left&#34; src=&#34;b.html&#34;&gt; <br/>&lt;/frameset&gt; <br/>&lt;frame name=&#34;right&#34; src=&#34;c.html&#34;&gt; <br/>&lt;/frameset&gt; <br/><br/>例子 HTML Code <br/>&lt;frameset rows=&#34;80,*&#34;&gt; <br/>&lt;frame name=&#34;top&#34; src=&#34;a.html&#34;&gt; <br/>&lt;frameset cols=&#34;150,*&#34;&gt; <br/>&lt;frame name=&#34;lower_left&#34; src=&#34;b.html&#34;&gt; <br/>&lt;frame name=&#34;lower_right&#34; src=&#34;c.html&#34;&gt; <br/>&lt;/frameset&gt; <br/>&lt;/frameset&gt; <br/>例子 HTML Code <br/>&lt;frameset cols=&#34;150,*&#34;&gt; <br/>&lt;frame name=&#34;left&#34; src=&#34;a.html&#34;&gt; <br/>&lt;frameset rows=&#34;80,*&#34;&gt; <br/>&lt;frame name=&#34;upper_right&#34; src=&#34;b.html&#34;&gt; <br/>&lt;frame name=&#34;lower_right&#34; src=&#34;c.html&#34;&gt; <br/>&lt;/frameset&gt; <br/>&lt;/frameset&gt; <br/><br/><br/>■ &lt;NOFRAMES&gt; ： <br/>当别人使用的浏览器太旧，不支援框架这个功能时，他看到的将会是一片空白。为了避免 这种情况，可使用 &lt;NOFRAMES&gt; 这个标记，当使用者的浏览器看不到框架时，他就会看到 &lt;NOFRAMES&gt; 与 &lt;/NOFRAMES&gt; 之间的内容，而不是一片空白。这些内容可以是提醒 浏览转用新的浏览器的字句，甚至是一个没有框架的网页或能自动切换至没有框架的版本 亦可。 <br/>应用方法： <br/>在&lt;frameset&gt; 标记范围加入 &lt;/NOFRAMES&gt; 标记，以下是一个例子： <br/><br/>&lt;frameset rows=&#34;80,*&#34;&gt; <br/>&lt;noframes&gt; <br/>&lt;body&gt; <br/>很抱歉，阁下使用的浏览器不支援框架功能，请转用新的浏览器。 <br/>&lt;/body&gt; <br/>&lt;/noframes&gt; <br/>&lt;frame name=&#34;top&#34; src=&#34;a.html&#34;&gt; <br/>&lt;frame name=&#34;bottom&#34; src=&#34;b.html&#34;&gt; <br/>&lt;/frameset&gt; <br/>若浏览器支援框架，那麽它不会理会 &lt;noframes&gt; 中的东西，但若浏览器不支援框架，由 於不认识所有框架标记，不明的标记会被略过，标记包围的东西便被解读出来，所以放在 &lt;noframes&gt;范围内的文字会被显示。 <br/><br/>■ &lt;IFRAME&gt; ：&nbsp;&nbsp;<br/><br/>这标记只适用於 IE(comet:也使用于FireFox)。 它的作用是在一页网页中间插入一个框窗以显示另一个文件。它是 一个围堵标记，但围着的字句只有在浏览器不支援 iframe 标记时才会显示，如&lt;noframes&gt; 一样，可以放些提醒字句之类。通常 iframe 配合一个辨认浏览器的 JavaScript 会较好，若 JavaScript 认出该浏览器并非 Internet Explorer 便会切换至另一版本。PS：一定要使用&lt;/iframe&gt;关闭，否则后面的内容显示不出来。 <br/>&lt;iframe&gt; 的参数设定如下： <br/>例子： &lt;iframe src=&#34;iframe.html&#34; name=&#34;test&#34; align=&#34;MIDDLE&#34; width=&#34;300&#34; height=&#34;100&#34; marginwidth=&#34;1&#34; marginheight=&#34;1&#34; frameborder=&#34;1&#34; scrolling=&#34;Yes&#34;&gt; &lt;/iframe&gt; <br/><br/>src=&#34;iframe.html&#34; <br/>欲显示於此框窗的文件来源除档案名称，必要加上相对或绝对路径。 <br/>name=&#34;test&#34; <br/>此框窗名称，这是连结标记的 target 参数所需要的， <br/>align=&#34;MIDDLE&#34; <br/>可选值为 left, right, top, middle, bottom，作用不大 <br/>width=&#34;300&#34; height=&#34;100&#34; <br/>框窗的宽及长，以 pixels 为单位。 <br/>marginwidth=&#34;1&#34; marginheight=&#34;1&#34; <br/>该插入的文件与框边所保留的空间。 <br/>frameborder=&#34;1&#34; <br/>使用 1 表示显示边框， 0 则不显示。（可以是 yes 或 no） <br/>scrolling=&#34;Yes&#34; <br/>使用 Yes 表示容许卷动（内定）， No 则不容许卷动。<br/>引自：<a href="http://benlsoft.javaeye.com/blog/353605" target="_blank" rel="external">http://benlsoft.javaeye.com/blog/353605</a>]]></description>
		</item>
		
			<item>
			<link>http://www.icediary.net/article.asp?id=272</link>
			<title><![CDATA[回车后提交表单兼容firefox]]></title>
			<author>470280558@qq.com(WindKer)</author>
			<category><![CDATA[JS/Ajax]]></category>
			<pubDate>Thu,11 Mar 2010 14:56:16 +0800</pubDate>
			<guid>http://www.icediary.net/default.asp?id=272</guid>
		<description><![CDATA[&lt;script type=&#34;text/javascript&#34;&gt;<br/>&lt;!--<br/><br/>if(document.addEventListener){<br/>document.addEventListener(&#34;keypress&#34;,fireFoxHandler, true);<br/>}else{<br/>document.attachEvent(&#34;onkeypress&#34;,ieHandler);<br/>}<br/>function fireFoxHandler(evt){<br/>&nbsp;&nbsp;if(evt.keyCode==13){<br/>&nbsp;&nbsp;&nbsp;&nbsp;chk();<br/>&nbsp;&nbsp;}<br/>}<br/>function ieHandler(evt){<br/>&nbsp;&nbsp;if(evt.keyCode==13){<br/>&nbsp;&nbsp;&nbsp;&nbsp;chk();<br/>&nbsp;&nbsp;}<br/>}<br/><br/>//--&gt;<br/>&lt;/script&gt;<br/>chk()为执行的函数，可以用来检测表单或者其他，已测可用]]></description>
		</item>
		
			<item>
			<link>http://www.icediary.net/article.asp?id=271</link>
			<title><![CDATA[access防下载 nodown表]]></title>
			<author>470280558@qq.com(WindKer)</author>
			<category><![CDATA[ASP]]></category>
			<pubDate>Tue,09 Mar 2010 12:06:13 +0800</pubDate>
			<guid>http://www.icediary.net/default.asp?id=271</guid>
		<description><![CDATA[一般网站的核心就是数据库，ASP则大多采用mdb数据库，方便网站移植，减少成功。如果其被Down了，那么这个网站也就岌岌可危了！对于数据库的防下载处理，通常都是将其格式由“MDB”改为“ASP”或“ASA”等一些扩展名，并在其中加入一个防下载字段，这个字段是如何加入的呢？ <br/>　　首先用Access打开MDB数据库，切换“对象”中的“表”为“查询”，然后双击“在设计视图中创建查询”，在弹出的“显示表”窗口中，不添加任何表，直接点“关闭”，这样“工具栏”中就多了一个“SQL”按钮，点击这个按钮或在“查询”窗口中点右键，选择其中的“SQL视图”，就会打开一个查询窗口，如图1，其实这个窗口就是Access的SQL命令输入窗口（刺猬提示：在MSSQL数据库中，有“查询分析器”可以调试SQL语句。而在ACCESS 数据库内，就可以采用这种方法来调试SQL语句了）。<br/>接下来就可以创建防下载字段了，分两步进行：<br/><br/>　　第一步：先创建一个表，在SQL命令窗口内输入如下内容：“Cr&#101;ate Table [nodown]([notdown] oleobject)”<br/>然后点击工具栏中的“!”（运行），这样，就会在当前数据库内创建一个“nodown”表，其中的字段名称为“notdown”，字段类型为“OLE对象”。<br/><br/>　　第二步：将SQL查询窗口中的内容更改为如下命令：“Ins&#101;rt into [nodown](notdown) values(0x3C25)”<br/>这一句的意思是向“nodown”表的“notdown”字段中插入“0x3C25”数据（“0x3C25”为字符“&lt;%”的16进制）。<br/><br/>　　执行完毕后，再次查看数据库中的“表”，就会发现其中已多了一个“nodown”表，打开之后字段显示的是“长二进制数据”，瞧！是不是和某些专业ASP程序中的防下载字段模样一致！<br/>&nbsp;&nbsp; 最后，更改数据库扩展名“MDB”为“ASP”，在本地的IIS中测试，返回的信息如下：<br/><br/>错误类型：<br/>Active Server Pages, ASP 0116 (0x80004005)<br/>Script 块缺少脚本关闭标记(% &gt;)。<br/><br/>　　因为前面插入的是“&lt;%”，所以当数据库变成ASP格式后，就会出现“缺少脚本关闭标记”的错误，在这里，出现错误却是好事哟！因为它说明前面设置的防下载是成功滴！<br/>引自：<a href="http://hi.baidu.com/55661267/blog/item/df500e2f130fae3c1f308958.html" target="_blank" rel="external">http://hi.baidu.com/55661267/blog/item/df500e2f130fae3c1f308958.html</a><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.icediary.net/article.asp?id=270</link>
			<title><![CDATA[asp动态include文件]]></title>
			<author>470280558@qq.com(WindKer)</author>
			<category><![CDATA[ASP]]></category>
			<pubDate>Mon,08 Mar 2010 14:06:10 +0800</pubDate>
			<guid>http://www.icediary.net/default.asp?id=270</guid>
		<description><![CDATA[以下为代码部分:<br/>&lt;! #include file=&#34;filename.asp&#34; --&gt;<br/><br/>宏限制,必须存在该文件并且会预先编译（不管前面是否加以条件） <br/><br/>经常有这样的要求，根据不同的需求要求include不同的文件,如各个人的不同设置，所以要求能动态include文件。 <br/><br/>代码如下： <br/><br/>以下为代码部分:<br/>Function include(filename)<br/>Dim re,content,fso,f,aspStart,aspEnd<br/><br/>set fso=Cr&#101;ateObject(&#34;Scripting.FileSystemObject&#34;)<br/>set f=fso.OpenTextFile(server.mappath(filename))<br/>content=f.ReadAll<br/>f.close<br/>set f=nothing<br/>set fso=nothing<br/><br/>set re=new RegExp<br/>re.pattern=&#34;^\s*=&#34;<br/>aspEnd=1<br/>aspStart=inStr(aspEnd,content,&#34;&lt;%&#34;)+2<br/>do while aspStart&gt;aspEnd+1 <br/>Response.write Mid(content,aspEnd,aspStart-aspEnd-2)<br/>aspEnd=inStr(aspStart,content,&#34;%\&gt;&#34;)+2<br/>Execute(re.replace(Mid(content,aspStart,aspEnd-aspStart-2),&#34;Response.Write &#34;))<br/>aspStart=inStr(aspEnd,content,&#34;&lt;%&#34;)+2<br/>loop<br/>Response.write Mid(content,aspEnd) <br/>set re=nothing<br/>End Function<br/>使用范例： <br/><br/>include(&#34;youinc.asp&#34;)<br/>引自：<a href="http://hi.baidu.com/xiaoxiaolq/blog/item/48228925e780cd6335a80ff5.html" target="_blank" rel="external">http://hi.baidu.com/xiaoxiaolq/blog/item/48228925e780cd6335a80ff5.html</a>]]></description>
		</item>
		
			<item>
			<link>http://www.icediary.net/article.asp?id=269</link>
			<title><![CDATA[ASP中GetRows的用法详解]]></title>
			<author>470280558@qq.com(WindKer)</author>
			<category><![CDATA[ASP]]></category>
			<pubDate>Mon,08 Mar 2010 14:00:48 +0800</pubDate>
			<guid>http://www.icediary.net/default.asp?id=269</guid>
		<description><![CDATA[NextRecordset 和 GetRows 大家可能用的很少！<br/>最近使用使用，不错的好东东！<br/>对提高批量查询，查询纪录集不是巨海量的情况很有效果<br/>NextRecordset 和 GetRows 是Recordset的两个属性（属性还是方法我是常溷淆是非#$#$，弄不清四下五除一）<br/><br/>GetRows ---&gt; 将recordset记录集提取到一个二维数组中，我们对recordset数据的行为就转移到该数组，可以早早的断开纪录集，不用再使用元数据操作，rs.movnext, while not rs.eof等可以省掉<br/><br/>NextRecordset ----&gt; 就是在一次提交多个查询，形成多个reordset结果集的情况下，提供一个离开当前工作的recordset，转移到第二个recordset的方法！<br/><br/>主要是用在多个Sel&#101;ct形成的结果集的情况<br/><br/>示例如下：<br/><br/>dim SQL,Rs,arrA,arrB,rowsA,rowsB<br/><br/>&#39;======提取数据库库记录====<br/><br/>（adodb.connection 的连接部分省略,假定CONN.open CONNstr）<br/>SQL=&#34; sel&#101;ct Ca1,Ca2,Ca3,Ca4 from TableA &#34; &#39;---------------Sel&#101;cta<br/>SQL=SQL&amp;&#34; sel&#101;ct Cb1,Cb2,Cb3,Cb4,Cb5 from TableB &#34; &#39;-------------Sel&#101;ctb<br/><br/>Set Rs=conn.execute(SQL) <br/>&#39;执行结果将有两个sel&#101;ct 的结果集，当前第一个sel&#101;ct的recordset处于激活状态<br/><br/>arrA=rs.GetRows &#39;----------取得Sel&#101;cta Recordset的二维数组<br/><br/>set rs=rs.NextRecordset <br/>&#39;------------最关键的一步，使用Nextrecordset激活下一个recordset<br/><br/>arrB=rs.GetRows &#39;----------再次取得第二个Sel&#101;ctb Recordset的二维数组<br/><br/>Rs.close<br/>set rs=nothing &#39;---------尽早释放数据库对象，关闭记录集<br/>CONN.close<br/>set CONN=Nothing<br/>这样，我们所有关于数据库的数据干干净净的提取完成，用最早的时间释放数据库资源 <br/>&#39;-----------//<br/><br/>&#39;========用取得的arrA arrB进行页面处理,显示数据结果======<br/>&#39;注意，arrA=GetRows 后得到的数组，第一维是代表列，第二维代表行<br/><br/>rowsA=ubound(arrA,2) &#39;----提取arrA的第二维下标，相当于取得recordset 的记录行数<br/>rowsB=ubound(arrB,2) &#39;-----同上，提取arrB的第二维下标<br/><br/>&#39;做数据循环：<br/><br/>&#39;第一个sel&#101;ct表的循环<br/><br/>ADO也提供更有效率方法来取得资料。GetRows 方法传回一个二维的阵列变数，每一行对应Recordset中的一笔记录，且每一列对应到记录中的栏位。此方法的语法如下：<br/><br/>varArray = rs.GetRows([Rows], [Start], [Fields])<br/><br/>Rows 是要读取记录的数量；如果想要取得Recordset所有记录，可用-1或省略此参数。Start 是指出第一个被读取记录的书籤；也可以是下列列举常数中的一个：0-adBookmarkCurrent（目前记录）、1-adBookmarkFirst（第一笔记录）、或2-adBookmarkLast（最后记录）。<br/><br/>Fields 是可选择的栏位名称阵列，其用来限制要读取的资料量。（也可指定单一栏位名称、单一栏位索引、或者一个栏位索引阵列）。当设定 Rows 为少于Recordset记录笔数时，第一笔未读取的记录变成现行记录。若省略 Rows 参数或设定为-1-adGetRowsRest或大于未读取的笔数时，GetRows 方法会读取所有记录并让Recordset在EOF状态，而不会产生任何错误。<br/><br/>当处理目的变数阵列的资料时，应该记得资料储存方式是有点相反的感觉：阵列中第一维定义Recordset的栏位（资料行），第二维定义Recordset的资料列。以下有个载入Recordset内所有记录某三个栏位的范例：<br/><br/>Dim values As Variant, fldIndex As Integer, recIndex As Integer<br/>values = rs.GetRows(, , Array(&#34;LastName&#34;, &#34;FirstName&#34;, &#34;BirthDate&#34;))<br/>For recIndex = 0 To UBound(values, 2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;For fldIndex = 0 To UBound(values)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Print values(fldIndex, recIndex),<br/>&nbsp;&nbsp;&nbsp;&nbsp;Next<br/>&nbsp;&nbsp;&nbsp;&nbsp;Print<br/>Next<br/><br/>GetRows 方法通常比一次读一笔记录的迴圈要来得快些，但使用这方法时，必须确定Recordset未包含太多记录；否则，会很容易以一个非常大的变数阵列来填满所有记忆体。基于相同的原因，得小心不要包括任何BLOB（Binary Large Object）或CLOB（Character Large Object）栏位；若如此做的化，应用程式一定会爆掉，特别是对于较大的Recordset而言。最后，记住此方法传回的变数阵列是以0为基底的；传回记录的笔数是UBound(values,2)+1，传回栏位数是UBound(value, 1)+1。<br/><br/>GetString 方法跟 GetRows 是类似的，不过其传回以单一字串形式存在的多重记录。GetString 语法如下：<br/><br/>GetString([Format], [NumRows], [ColDelimiter], [RowDelimiter], [NullExpr])<br/><br/>Format 是结果的格式。GetString 还可能支援更多格式，但是目前唯一支援的格式是2- adClipString，所以实际上没有任何选择。NumRows 是要取得的列数。（使用-1或省略此参数来读取所有剩下的记录。）ColDelimiter 是行的分隔字元（预设为Tab字元）。RowDelimiter 为记录的分隔字元（预设为换行字元）。NullExpr 是用来表示Null栏位的字串（预设为空字串）。文件中说明只有当Format= adClipString时，最后三个参数才可使用，但是这警告没有多大意义，因为（如之前所提）此格式是目前唯一支援的。以下有个例子，其透过 GetString 方法来将资料汇出成以分号分隔的文字档：<br/><br/>Dim i As Long<br/>Open &#34;datafile.txt&#34; For Output As #1<br/>For i = 0 To rs.Fields.Count _ 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39; Export field names.<br/>&nbsp;&nbsp;&nbsp;&nbsp;If i &gt; 0 Then Print #1, &#34;;&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Print #1, rs.Fields(i).Name;<br/>Next<br/>Print #1, &#34;&#34;<br/>rs.MoveFirst&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39; Export data.<br/>Print #1, rs.GetString(, , &#34;;&#34;, VBCrLf); &#39; Don&#39;t add an extra CR-LF here.<br/>Close #1<br/><br/>GetString 方法不允许只汇出栏位的子集合，也不允许修改汇出栏位的顺序。如果需要这些额外的功能，应该使用 GetRows 方法且自行建立结果字串。<br/><br/>大家应该都知道 Recordset 有个 GetRows 属性，但是真正使用的不多，我也是最近才用的！汗……<br/><br/>其实这个属性很简单，就是把数据集输出到一个数组中。但是实用性可不小，在这里我举一个例子说明一下GetRows的使用方法，大家举一反三能想到更多的用法！<br/><br/>比如一个分类的表 T_Cate，结构和数据如下：<br/><br/>ID&nbsp;&nbsp; |&nbsp;&nbsp; Title&nbsp;&nbsp; | Intro<br/>-----------------------------------------<br/>1&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp; 新闻&nbsp;&nbsp; | 这里是新闻<br/>2&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp; 教程&nbsp;&nbsp; | 这里是教程<br/>3&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp; 下载&nbsp;&nbsp; | 这里是下载<br/><br/>好了，表建立好了，数据也有了，下面我们就要用到GetRows咯！<br/><br/>程序代码：<br/><br/>Dim Rs_Cate<br/>Dim Arr_Cate<br/>Set Rs_Cate=Conn.ExeCute(&#34;Sel&#101;ct ID,Title,Intro FROM T_Cate o&#114;DER BY ID ASC&#34;)<br/>Arr_Cate=Rs_Cate.GetRows<br/>Set Rs_Cate=Nothing<br/><br/>好了表数据已经导出到数组了！下面我们将遍历这个数组<br/><br/>程序代码：<br/><br/>Dim Arr_CateNumS,Arr_CateNumI<br/>Arr_CateNumS=Ubound(Arr_Cate,2) &#39;得到数组中数据的下标<br/>For Arr_CateNumI=0 To Arr_CateNumS<br/>&nbsp;&nbsp;&nbsp;&nbsp;Response.Write(&#34;ID：&#34;&amp;Arr_Cate(0,Arr_CateNumI)&amp;&#34; | 标题：&#34;&amp;Arr_Cate(1,Arr_CateNumI)&amp;&#34; | 介绍：&#34;&amp;Arr_Cate(2,Arr_CateNumI)&amp;&#34;&lt;br&gt;&#34;)<br/>Next<br/><br/>呵呵，好了，输出的数据为：<br/>ID：1 | 标题：新闻 | 介绍：这里是新闻<br/>ID：2 | 标题：教程 | 介绍：这里是教程<br/>ID：3 | 标题：下载 | 介绍：这里是下载<br/><br/>引自：<a href="http://hi.baidu.com/%B2%E8%B2%A9%CA%BF/blog/item/6cd12922bf99c0ac4723e8c0.html" target="_blank" rel="external">http://hi.baidu.com/%B2%E8%B2%A9%CA%BF/blog/item/6cd12922bf99c0ac4723e8c0.html</a>]]></description>
		</item>
		
			<item>
			<link>http://www.icediary.net/article.asp?id=268</link>
			<title><![CDATA[javascript获取ckeditor编辑器的值]]></title>
			<author>470280558@qq.com(WindKer)</author>
			<category><![CDATA[JS/Ajax]]></category>
			<pubDate>Sat,06 Mar 2010 00:50:02 +0800</pubDate>
			<guid>http://www.icediary.net/default.asp?id=268</guid>
		<description><![CDATA[CKeditor编辑器是FCKeditor的升级版本<br/>想对于FCK来说，确实比较好用，加载速度也比较快<br/>以下是如果通过JS获取CKeditor编辑器的值，用于表单验证<br/><br/>if(CKEDITOR.instances.content.getData()==&#34;&#34;){<br/>alert(&#34;内容不能为空！&#34;);<br/>return false;<br/>}<br/><br/>content是textarea的name<br/>下次发下CKeditor的配置还有上传配置，我只弄了PHP的上传<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.icediary.net/article.asp?id=267</link>
			<title><![CDATA[本站新年风格发布pjv2.8]]></title>
			<author>470280558@qq.com(WindKer)</author>
			<category><![CDATA[Computer]]></category>
			<pubDate>Fri,12 Feb 2010 01:30:25 +0800</pubDate>
			<guid>http://www.icediary.net/default.asp?id=267</guid>
		<description><![CDATA[经过了一个晚上的努力，终于把风格修改好了。<br/>本风格是收集网络之上，应用到本站的。我的PJ版本是v2.8.5.157，不过原来的页面我以前也有做了修改<br/>本风格仅供学习交流之用，已测试浏览器 IE6 IE7 IE8 FIREFOX。<br/>喜欢本风格的朋友的可以加我的QQ交流！！<br/><img src="http://www.icediary.net/images/download.gif" alt="下载文件" style="margin:0px 2px -4px 0px"/> <a href="http://www.icediary.net/attachments/month_1002/0201021213014.rar" target="_blank">点击下载此文件</a><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.icediary.net/article.asp?id=266</link>
			<title><![CDATA[跟随鼠标移动的时钟]]></title>
			<author>470280558@qq.com(WindKer)</author>
			<category><![CDATA[JS/Ajax]]></category>
			<pubDate>Thu,11 Feb 2010 01:48:10 +0800</pubDate>
			<guid>http://www.icediary.net/default.asp?id=266</guid>
		<description><![CDATA[跟随鼠标移动的时钟<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.icediary.net/images/html.gif" style="margin:0px 2px -3px 0px"> HTML代码</div><div class="UBBContent"><TEXTAREA rows="8" id="temp26679">
<html>
<body style=&#34;background-color:#000000&#34;>

<SCRIPT language=JavaScript> 
dCol='ffffff';//date colour.
fCol='ffffff';//face colour.
sCol='FF6600';//seconds colour.
mCol='FF6600';//minutes colour.
hCol='FF6600';//hours colour.
ClockHeight=40;
ClockWidth=40;
ClockFromMouseY=0;
ClockFromMouseX=100;
 
d=new Array(&#34;SUNDAY&#34;,&#34;MONDAY&#34;,&#34;TUESDAY&#34;,&#34;WEDNESDAY&#34;,&#34;THURSDAY&#34;,&#34;FRIDAY&#34;,&#34;SATURDAY&#34;);
m=new Array(&#34;JANUARY&#34;,&#34;FEBRUARY&#34;,&#34;MARCH&#34;,&#34;APRIL&#34;,&#34;MAY&#34;,&#34;JUNE&#34;,&#34;JULY&#34;,&#34;AUGUST&#34;,&#34;SEPTEMBER&#34;,&#34;OCTOBER&#34;,&#34;NOVEMBER&#34;,&#34;DECEMBER&#34;);
date=new Date();
day=date.getDate();
year=date.getYear();
if (year < 2000) year=year+1900;
TodaysDate=&#34; &#34;+d[date.getDay()]+&#34; &#34;+day+&#34; &#34;+m[date.getMonth()]+&#34; &#34;+year;
D=TodaysDate.split('');
H='...';
H=H.split('');
M='....';
M=M.split('');
S='.....';
S=S.split('');
Face='1 2 3 4 5 6 7 8 9 10 11 12';
font='Arial';
size=1;
speed=0.6;
ns=(document.layers);
ie=(document.all);
Face=Face.split(' ');
n=Face.length;
a=size*10;
ymouse=0;
xmouse=0;
scrll=0;
props=&#34;<font face=&#34;+font+&#34; size=&#34;+size+&#34; color=&#34;+fCol+&#34;><B>&#34;;
props2=&#34;<font face=&#34;+font+&#34; size=&#34;+size+&#34; color=&#34;+dCol+&#34;><B>&#34;;
Split=360/n;
Dsplit=360/D.length;
HandHeight=ClockHeight/4.5
HandWidth=ClockWidth/4.5
HandY=-7;
HandX=-2.5;
scrll=0;
step=0.06;
currStep=0;
y=new Array();x=new Array();Y=new Array();X=new Array();
for (i=0; i < n; i++){y[i]=0;x[i]=0;Y[i]=0;X[i]=0}
Dy=new Array();Dx=new Array();DY=new Array();DX=new Array();
for (i=0; i < D.length; i++){Dy[i]=0;Dx[i]=0;DY[i]=0;DX[i]=0}
if (ns){
for (i=0; i < D.length; i++)
document.write('<layer name=&#34;nsDate'+i+'&#34; top=0 left=0 height='+a+' width='+a+'><center>'+props2+D[i]+'</font></center></layer>');
for (i=0; i < n; i++)
document.write('<layer name=&#34;nsFace'+i+'&#34; top=0 left=0 height='+a+' width='+a+'><center>'+props+Face[i]+'</font></center></layer>');
for (i=0; i < S.length; i++)
document.write('<layer name=nsSeconds'+i+' top=0 left=0 width=15 height=15><font face=Arial size=3 color='+sCol+'><center><b>'+S[i]+'</b></center></font></layer>');
for (i=0; i < M.length; i++)
document.write('<layer name=nsMinutes'+i+' top=0 left=0 width=15 height=15><font face=Arial size=3 color='+mCol+'><center><b>'+M[i]+'</b></center></font></layer>');
for (i=0; i < H.length; i++)
document.write('<layer name=nsHours'+i+' top=0 left=0 width=15 height=15><font face=Arial size=3 color='+hCol+'><center><b>'+H[i]+'</b></center></font></layer>');
}
if (ie){
document.write('<div id=&#34;Od&#34; style=&#34;position:absolute;top:0px;left:0px&#34;><div style=&#34;position:relative&#34;>');
for (i=0; i < D.length; i++)
document.write('<div id=&#34;ieDate&#34; style=&#34;position:absolute;top:0px;left:0;height:'+a+';width:'+a+';text-align:center&#34;>'+props2+D[i]+'</B></font></div>');
document.write('</div></div>');
document.write('<div id=&#34;Of&#34; style=&#34;position:absolute;top:0px;left:0px&#34;><div style=&#34;position:relative&#34;>');
for (i=0; i < n; i++)
document.write('<div id=&#34;ieFace&#34; style=&#34;position:absolute;top:0px;left:0;height:'+a+';width:'+a+';text-align:center&#34;>'+props+Face[i]+'</B></font></div>');
document.write('</div></div>');
document.write('<div id=&#34;Oh&#34; style=&#34;position:absolute;top:0px;left:0px&#34;><div style=&#34;position:relative&#34;>');
for (i=0; i < H.length; i++)
document.write('<div id=&#34;ieHours&#34; style=&#34;position:absolute;width:16px;height:16px;font-family:Arial;font-size:16px;color:'+hCol+';text-align:center;font-weight:bold&#34;>'+H[i]+'</div>');
document.write('</div></div>');
document.write('<div id=&#34;Om&#34; style=&#34;position:absolute;top:0px;left:0px&#34;><div style=&#34;position:relative&#34;>');
for (i=0; i < M.length; i++)
document.write('<div id=&#34;ieMinutes&#34; style=&#34;position:absolute;width:16px;height:16px;font-family:Arial;font-size:16px;color:'+mCol+';text-align:center;font-weight:bold&#34;>'+M[i]+'</div>');
document.write('</div></div>')
document.write('<div id=&#34;Os&#34; style=&#34;position:absolute;top:0px;left:0px&#34;><div style=&#34;position:relative&#34;>');
for (i=0; i < S.length; i++)
document.write('<div id=&#34;ieSeconds&#34; style=&#34;position:absolute;width:16px;height:16px;font-family:Arial;font-size:16px;color:'+sCol+';text-align:center;font-weight:bold&#34;>'+S[i]+'</div>');
document.write('</div></div>')
}
(ns)?window.captureEvents(Event.MOUSEMOVE):0;
function Mouse(evnt){
ymouse = (ns)?evnt.pageY+ClockFromMouseY-(window.pageYOffset):event.y+ClockFromMouseY;
xmouse = (ns)?evnt.pageX+ClockFromMouseX:event.x+ClockFromMouseX;
}
(ns)?window.onMouseMove=Mouse:document.onmousemove=Mouse;
function ClockAndAssign(){
time = new Date ();
secs = time.getSeconds();
sec = -1.57 + Math.PI * secs/30;
mins = time.getMinutes();
min = -1.57 + Math.PI * mins/30;
hr = time.getHours();
hrs = -1.575 + Math.PI * hr/6+Math.PI*parseInt(time.getMinutes())/360;
if (ie){
Od.style.top=window.document.body.scrollTop;
Of.style.top=window.document.body.scrollTop;
Oh.style.top=window.document.body.scrollTop;
Om.style.top=window.document.body.scrollTop;
Os.style.top=window.document.body.scrollTop;
}
for (i=0; i < n; i++){
 var F=(ns)?document.layers['nsFace'+i]:ieFace[i].style;
 F.top=y[i] + ClockHeight*Math.sin(-1.0471 + i*Split*Math.PI/180)+scrll;
 F.left=x[i] + ClockWidth*Math.cos(-1.0471 + i*Split*Math.PI/180);
 }
for (i=0; i < H.length; i++){
 var HL=(ns)?document.layers['nsHours'+i]:ieHours[i].style;
 HL.top=y[i]+HandY+(i*HandHeight)*Math.sin(hrs)+scrll;
 HL.left=x[i]+HandX+(i*HandWidth)*Math.cos(hrs);
 }
for (i=0; i < M.length; i++){
 var ML=(ns)?document.layers['nsMinutes'+i]:ieMinutes[i].style;
 ML.top=y[i]+HandY+(i*HandHeight)*Math.sin(min)+scrll;
 ML.left=x[i]+HandX+(i*HandWidth)*Math.cos(min);
 }
for (i=0; i < S.length; i++){
 var SL=(ns)?document.layers['nsSeconds'+i]:ieSeconds[i].style;
 SL.top=y[i]+HandY+(i*HandHeight)*Math.sin(sec)+scrll;
 SL.left=x[i]+HandX+(i*HandWidth)*Math.cos(sec);
 }
for (i=0; i < D.length; i++){
 var DL=(ns)?document.layers['nsDate'+i]:ieDate[i].style;
 DL.top=Dy[i] + ClockHeight*1.5*Math.sin(currStep+i*Dsplit*Math.PI/180)+scrll;
 DL.left=Dx[i] + ClockWidth*1.5*Math.cos(currStep+i*Dsplit*Math.PI/180);
 }
currStep-=step;
}
function Delay(){
scrll=(ns)?window.pageYOffset:0;
Dy[0]=Math.round(DY[0]+=((ymouse)-DY[0])*speed);
Dx[0]=Math.round(DX[0]+=((xmouse)-DX[0])*speed);
for (i=1; i < D.length; i++){
Dy[i]=Math.round(DY[i]+=(Dy[i-1]-DY[i])*speed);
Dx[i]=Math.round(DX[i]+=(Dx[i-1]-DX[i])*speed);
}
y[0]=Math.round(Y[0]+=((ymouse)-Y[0])*speed);
x[0]=Math.round(X[0]+=((xmouse)-X[0])*speed);
for (i=1; i < n; i++){
y[i]=Math.round(Y[i]+=(y[i-1]-Y[i])*speed);
x[i]=Math.round(X[i]+=(x[i-1]-X[i])*speed);
}
ClockAndAssign();
setTimeout('Delay()',20);
}
if (ns||ie)window.onload=Delay;
</SCRIPT>
</body>
</html>
</TEXTAREA><br/><INPUT onclick="runEx('temp26679')"  type="button" class="userbutton" value="运行此代码"/> <INPUT onclick="doCopy('temp26679')"  type="button" class="userbutton" value="复制此代码"/> <INPUT onclick="saveCode('temp26679')" type="button" class="userbutton" value="保存此代码"><br/> [Ctrl+A 全部选择 提示：你可先修改部分代码，再按运行]</div></div>]]></description>
		</item>
		
			<item>
			<link>http://www.icediary.net/article.asp?id=265</link>
			<title><![CDATA[Apache服务器使用.htaccess实现图片防盗链]]></title>
			<author>470280558@qq.com(WindKer)</author>
			<category><![CDATA[Lamp]]></category>
			<pubDate>Wed,10 Feb 2010 09:44:53 +0800</pubDate>
			<guid>http://www.icediary.net/default.asp?id=265</guid>
		<description><![CDATA[所谓盗链，是指其他网站直接链接我们网站上的文件，一般来说，盗链的对象大多为<br/><br/>很耗带宽的大体积文件，如图片、视频等。这样造成的后果主要有：增加了服务器的<br/><br/>流量负担，影响我们网站的访问速度。<br/>如果你用的是Apache服务器，那么使用.htaccess文件就可以很方便的进行设置，从<br/><br/>而防止其他站点的用户盗链我们站点的文件。<br/><br/>Apache中的.htaccess文件<br/>.htaccess文件是Apache中相当重要的配置文件，其格式为纯文本，它提供了针对目<br/><br/>录改变配置的方法，通过在一个特定的文档目录中放置一个包含一个或多个指令的文<br/><br/>件，以作用于此目录及其所有子目录。<br/><br/>通过.htaccess文件，可以实现简单地很多在IIS中很繁琐甚至无法实现的功能，如密<br/><br/>码保护、禁止显示目录列表、阻止/允许特定的IP地址、实现网址的301 重定向等等<br/><br/>。<br/><br/>正如上面所说，.htaccess文件将影响其所在的目录及其子目录，因此，如果我们要<br/><br/>保护的内容（此处以防止图片盗链为例，即图片）位于网站内多个目录下，可以考虑<br/><br/>将其放在根目录下；而如果图片有单独的子目录如“/images/”，则只需将其放置在<br/><br/>该目录下（当然也可以放到根目录中）。<br/><br/>需要注意的是，如果通过FTP方式将创建好的.htaccess上传到服务器上，传输模式应<br/><br/>为ASCII而非Binary。上传到服务器后，应将其属性通过 CHMOD修改为644 或“RW-R<br/><br/>–R–”，这样，可以保证服务器能够使用同时无法通过浏览器修改，当<br/><br/>然，.htaccess的可读属性也存在一定的风险：攻击者可通过它找出您要保护的对象<br/><br/>或认证文件位置——解决办法是将认证文件.htpasswd放到网站根目录之外，这样，<br/><br/>便无法通过网络找到它了。<br/><br/>使用.htaccess禁止盗链<br/>通过.htaccess来防止网站的图片、压缩文件、或视频等非Html文件被盗链的方法相<br/><br/>当简单，通过在该文件中加入几句命令即可保护我们宝贵的带宽。例如本站的设置如<br/><br/>下：<br/><br/>RewriteEngine on<br/>RewriteCond %{HTTP_REFERER} !^$ [NC]<br/>RewriteCond %{HTTP_REFERER} !webeta.cn [NC]<br/>RewriteCond %{HTTP_REFERER} !ikuaizi.com [NC]<br/>RewriteCond %{HTTP_REFERER} !zhuaxia.com [NC]<br/>RewriteCond %{HTTP_REFERER} !xianguo.com [NC]<br/>RewriteCond %{HTTP_REFERER} !google.com [NC]<br/>RewriteCond %{HTTP_REFERER} !bloglines.com [NC]<br/>RewriteCond %{HTTP_REFERER} !feedburner.com [NC]<br/>RewriteCond %{HTTP_REFERER} !feedsky.com [NC]<br/>RewriteRule .*\.(gif|jpg)$ <a href="http://domain.com/no.png" target="_blank" rel="external">http://domain.com/no.png</a> [R,NC,L]<br/><br/>简单的解释一下上述语句：<br/><br/>1、RewriteCond %{HTTP_REFERER} !^$ [NC]<br/><br/>允许空“HTTP_REFERER”的访问，即允许用户在浏览器地址栏中直接输入图片地址时<br/><br/>图片文件的显示。一般而言，这是可选的，不过，建议这么设置，如果强迫必须具有<br/><br/>“HTTP_REFERER”才能访问，可能会带来某些问题，比如说在用户通过代理服务器访<br/><br/>问时。<br/><br/>2、RewriteCond %{HTTP_REFERER} !domain.com [NC]<br/><br/>设置允许访问的HTTP来源，包括我们的站点自身、Google、Baidu、Bloglines、<br/><br/>Feedburner等。<br/><br/>3、RewriteRule .*\.(gif|jpg|png)$ <a href="http://domain.com/no.png" target="_blank" rel="external">http://domain.com/no.png</a> [R,NC,L]<br/><br/>定义被盗链时替代的图片，让所有盗链 jpg、gif、png 等文件的网页，显示根目录<br/><br/>下的 no.png 文件。注意：替换显示的图片不要放在设置防盗链的目录中，并且该图<br/><br/>片文件体积越小越好。当然你也可以不设置替换图片，而是使用下面的语句即可：<br/><br/>RewriteRule .*\.(gif|jpg|png)$ - [F]<br/><br/>4、说明一下其中的R、NC 和 L<br/><br/>R 就是转向的意思<br/>NC 指的是不区分大小写<br/>L 的作用是指明本次转向到此结束，后续的转向不受先前判断语句的影响<br/><br/>5、防止盗链的文件类型<br/><br/>上例中是 gif、jpg、png，而根据需要，可更改或添加其他文件类型，如rar、mov等<br/><br/>，不同文件扩展名间使用“|”分割。<br/><br/>这样的话，就可以基本做到简单的防止被盗链情况的发生，而且可以尽最大可能的减<br/><br/>少服务器流量的无畏消耗，当然了，如果你不在意这点流量的话，那么可以不用考虑<br/><br/>上述设置啦！<br/><br/>这是我在贴吧上面的看到的教程，转下来，尚未测试能不能行，正常来说是没问题的]]></description>
		</item>
		
			<item>
			<link>http://www.icediary.net/article.asp?id=264</link>
			<title><![CDATA[php之foreach语句  ]]></title>
			<author>470280558@qq.com(WindKer)</author>
			<category><![CDATA[Lamp]]></category>
			<pubDate>Fri,05 Feb 2010 10:05:18 +0800</pubDate>
			<guid>http://www.icediary.net/default.asp?id=264</guid>
		<description><![CDATA[php中的foreach语句主要用来操作数组(在php5中还可以用来操作对象)，它有两种格式，分别如下：<br/><br/>一：<br/><br/>foreach (array_e&#173;xpression as $val) {<br/>&nbsp;&nbsp;&nbsp;&nbsp; print($val.&#34;;&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp; ......<br/>}<br/><br/><br/>二：<br/><br/>foreach (array_e&#173;xpression as $key=&gt;$val) {<br/>&nbsp;&nbsp;&nbsp;&nbsp; print($key.&#34;=&gt;&#34;.$val.&#34;;&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp; ......<br/>}<br/><br/><br/>习惯了asp的朋友一定会郁闷了，可能忍不住会说：这啥玩意，看得人云里雾里。没错，我当初也一样，习惯了asp的写法，怎么看这东东怎么不顺眼，以致于有一段时间甚至让我对php产生了一种抵触情绪，不过不用怕，现在我们来将它慢慢的剖开，看看这个语句到底是如何使用的。<br/><br/>先来看第一个语句，这个语句比较简单，可以说跟asp中的for each大同小异，array_e&#173;xpression指的是一个数组表达式，as $val语句将顺序取得该数组的值并保存到$val变量中，此种方法只能取得数组内的值，而不能取得数组的下标索引值。例如：<br/><br/>$myArray=array(&#34;1&#34;=&gt;&#34;val1&#34;,&#34;2&#34;=&gt;&#34;val2&#34;,&#34;3&#34;=&gt;&#34;val3&#34;);<br/>foreach($myArray as $val) {<br/>&nbsp;&nbsp;&nbsp;&nbsp; print($val.&#34; &#34;);<br/>}<br/><br/>其结果会输出：val1 val2 val3<br/><br/><br/>再来看看第二种格式，第二种格式除了能像第一种格式一样得到数组内元素的值外，还能得到元素的索引值，并保存到$key变量中，如果数组的索引值未经过人工设定，则返回系统默认的设定值，<br/>看正面例子：<br/><br/>先看一个简单的一维数组：<br/><br/>$myArray=array(&#34;1&#34;=&gt;&#34;val1&#34;,&#34;2&#34;=&#34;val2&#34;,&#34;3&#34;=&gt;&#34;val3&#34;);<br/>foreach($myArray as $key=&gt;$val) {<br/>&nbsp;&nbsp;&nbsp;&nbsp; print($key.&#34;=&gt;&#34;.$val.&#34;;&#34;);<br/>}<br/><br/>该程序将出输出：1=&gt;val1;2=&gt;val2;3=&gt;val3;，接下来我们再来看一个复杂一点的二维数组遍历，程序如下：<br/><br/>$myArray=array(<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#34;1&#34;=&gt;array(&#34;11&#34;=&gt;&#34;val11&#34;,&#34;12&#34;=&gt;&#34;val12&#34;,&#34;13&#34;=&gt;&#34;val13&#34;),<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#34;2&#34;=&gt;array(&#34;21&#34;=&gt;&#34;val21&#34;,&#34;22&#34;=&gt;&#34;val22&#34;,&#34;23&#34;=&gt;&#34;val23&#34;),<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#34;3&#34;=&gt;array(&#34;31&#34;=&gt;&#34;val31&#34;,&#34;32&#34;=&gt;&#34;val32&#34;,&#34;33&#34;=&gt;&#34;val33&#34;)<br/>);<br/>print(&#34;&lt;ul&gt;&#34;);<br/>foreach($myArray as $key=&gt;$val) {<br/>&nbsp;&nbsp;&nbsp;&nbsp; print(&#34;&lt;li&gt;&#34;.$key.&#34;&lt;/li&gt;&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp; if (is_array($val)) {&nbsp;&nbsp;&nbsp;&nbsp; //判断$val的值是否是一个数组，如果是，则进入下层遍历<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print(&#34;&lt;ul&gt;&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach($val as $key=&gt;$val) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print(&#34;&lt;li&gt;&#34;.$key.&#34;=&gt;&#34;.$val.&#34;&lt;/li&gt;&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print(&#34;&lt;/ul&gt;&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp; }<br/>}<br/>print(&#34;&lt;/ul&gt;&#34;);<br/><br/>输出结果：<br/><br/>1 <br/>11=&gt;val11 <br/>12=&gt;val12 <br/>13=&gt;val13<br/>2 <br/>21=&gt;val21 <br/>22=&gt;val22 <br/>23=&gt;val23<br/>3 <br/>31=&gt;val31 <br/>32=&gt;val32 <br/>33=&gt;val33<br/>&lt;ul&gt; 和 &lt;li&gt;是 标签，作用是显示个实心小圆点和空心小圆点。<br/>由于上面的是一个二维数组，在第一次遍历后所得到的$val值将是一个数组，所以我在遍历中加了一个判断，以便进行二层数组遍历。大家仔细看下，就能看懂，很简单的，不要被上面那些乱七八糟的字符所吓到了，呵呵。如果有条件，你还可以把它们复制到本地phpserver上运行下，看看效果，再分析，这样就更容易明白了。<br/><br/>在php中除了foreach，还有一些函数也可以用来方便的操作数组，如list()，each()等。<br/><br/>本文转自：<a href="http://justnow2008.blog.sohu.com/82408835.html" target="_blank" rel="external">http://justnow2008.blog.sohu.com/82408835.html</a>]]></description>
		</item>
		
</channel>
</rss>
