<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[网站制作博客 - 程序]]></title>
<link>http://www.huison.cn/blog/</link>
<description><![CDATA[北京网站制作公司，主营范围企业网站建设服务为主的公司！]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog2 v2.4]]></copyright>
<webMaster><![CDATA[hoogl@126.com(HuIson)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>网站制作博客</title> 
	<url>http://www.huison.cn/blog/images/logos.gif</url> 
	<link>http://www.huison.cn/blog/</link> 
	<description>网站制作博客</description> 
</image>

			<item>
			<link>http://www.huison.cn/blog/default.asp?id=286</link>
			<title><![CDATA[PHP 判断/移除 BOM(UTF-8)]]></title>
			<author>hoogl@126.com(Huison)</author>
			<category><![CDATA[程序]]></category>
			<pubDate>Thu,22 Oct 2009 15:51:58 +0800</pubDate>
			<guid>http://www.huison.cn/blog/default.asp?id=286</guid>	
		<description><![CDATA[BOM: 萬國碼檔案簽名 BOM (Byte o&#114;der Mark, U+FEFF) <br/><br/>BOM 的內容可以表示 UNICODE 是哪種編碼, 但是在接收到的檔案, 要拆解後寫入 DB, 看到 BOM 就覺得有點 ooxx. <br/><br/>在 utf8_encode 看到兩段程式可以來測試 寫入/移除 BOM. <br/><br/><strong>將寫入的檔案內容前加 BOM </strong><br/>&lt;?php<br/>function writeUTF8File($filename,$content)<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;$f = fopen($filename, &#39;w&#39;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;fwrite($f, pack(&#34;CCC&#34;, 0xef,0xbb,0xbf));<br/>&nbsp;&nbsp;&nbsp;&nbsp;fwrite($f,$content);<br/>&nbsp;&nbsp;&nbsp;&nbsp;fclose($f);<br/>}<br/>?&gt; <br/><br/><strong>移除 BOM function</strong> <br/>&lt;?php<br/>function removeBOM($str = &#39;&#39;)<br/>{<br/>&nbsp;&nbsp; if (substr($str, 0,3) == pack(&#34;CCC&#34;,0xef,0xbb,0xbf)) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $str = substr($str, 3);<br/>&nbsp;&nbsp; }<br/>&nbsp;&nbsp; return $str;<br/>}<br/>?&gt; <br/><br/>由此上述 BOM = pack(&#34;CCC&#34;,0xef,0xbb,0xbf), 所以移除 BOM 的寫法可用上面的 removeBOM function 或 下述其一: <br/>str_replace(&#34;\xef\xbb\xbf&#34;, &#39;&#39;, $bom_content);<br/>preg_replace(&#34;/^\xef\xbb\xbf/&#34;, &#39;&#39;, $bom_content);<br/><br/>另外看到 判斷此字串是不是 UTF-8 的 function: <br/>function isUTF8($string)<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;return (utf8_encode(utf8_decode($string)) == $string);<br/>}]]></description>
		</item>
		
			<item>
			<link>http://www.huison.cn/blog/default.asp?id=284</link>
			<title><![CDATA[asp统计字符串中每个字符出现的次数]]></title>
			<author>hoogl@126.com(Huison)</author>
			<category><![CDATA[程序]]></category>
			<pubDate>Mon,28 Sep 2009 00:50:21 +0800</pubDate>
			<guid>http://www.huison.cn/blog/default.asp?id=284</guid>	
		<description><![CDATA[在网上看到这个题目：<br/><span style="color:Red">用户在文本框中任意输入字符和数字，当用户单击命令按钮时，统计各个字母和数字出现的次数，并将其在浏览器中输出。</span><br/><br/>想起之前看过一篇相关的文章，自己无聊就写了一下。<textarea name="code" class="Vb" rows="15" cols="100">function t(c)
if c=&#34;&#34; then exit function
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;c = trim(c)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;b = left(c,1)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;d = replace(c,b,&#34;&#34;)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;response.write(b&amp;&#34;:&#34;&amp;(len(c)-len(d))&amp;&#34;&lt;br&gt;&#34;)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if len(d)&gt;0 then t(d)
end function</textarea><br/>调用方法：<br/><textarea name="code" class="VB" rows="15" cols="100">dim a
a = &#34;a23b3a&#34;
t(a)</textarea><br/>统计结果：<br/>a:2<br/>2:1<br/>3:2<br/>b:1]]></description>
		</item>
		
			<item>
			<link>http://www.huison.cn/blog/default.asp?id=278</link>
			<title><![CDATA[(转)ASP 中常见的错误 80004005 信息]]></title>
			<author>hoogl@126.com(Fishthink)</author>
			<category><![CDATA[程序]]></category>
			<pubDate>Thu,18 Jun 2009 09:03:14 +0800</pubDate>
			<guid>http://www.huison.cn/blog/default.asp?id=278</guid>	
		<description><![CDATA[<strong>错误信息</strong><br/>Microsoft JET Database Engine 错误 &#39;80004005&#39; 未指定的错误 （Provider 错误）<br/><br/>原因：<br/>权限问题，系统缓存目录权限不足<br/>解决方法：<br/>把系统盘如 C:\WINNT\Temp 目录权限加上 Everyone 可读取权限<br/><br/><strong>错误信息</strong><br/>Microsoft OLE DB Provider for ODBC Drivers error &#39;80004005&#39; <br/>[Microsoft][ODBC Microsoft Access 97 Driver] The Microsoft Jet database <br/>engine cannot open the file &#39;(unknown)&#39;. It is already opened exclusively <br/>by another user, o&#114; you need permission to view its data. <br/><br/>原因： <br/>这个错误发生在当IIS使用匿名帐号(通常是IUSR)时,该帐号在NT中对数据库所在的目录 <br/>没有正确的权限.（这就是为什么在Win95和PWS下没问题，因为win95根本就没有目录权限这一说） <br/>检查文件和目录的权限. 确定你能够在该目录中有能够新建和删除临时文件的权限。 <br/>这些临时文件其实是数据库建立在同一个目录下的文件, 但是要注意的是，有可能这些文件 <br/>也可能建立在别的目录，例如 /Winnt. <br/><br/>使用NT的文件监视程序监视文件失败时到底是访问了什么目录。 <br/>这个NT的文件监视程序可以在这个地方下载 <a href="http://www.sysinternals.com." target="_blank">http://www.sysinternals.com.</a> <br/><br/>如果你对数据库使用了一个网络地址，例如映射地址，就要检查一下共享文件和目录的权限， <br/><br/>还要检查一下数据源文件（DSN）是否被别的程序标志成为正在使用中， <br/>这些别的程序一般是Visual InterDev，关闭任何一个InterDev中的正打开和数据库连接的项目。 <br/><br/>这个错误还可能发生在这种情况：如果在DSN中使用了一个UNC路径（就是通用命名协议），请改用 <br/>本地路径进行测试，因为如果对本地数据库使用UNC也可能出错。 <br/>还可能发生在这种情况，如果服务器要访问Access中的一个表，而这个表却联接在一个网络服务器上。 <br/><br/><strong>错误信息：</strong> <br/>Microsoft OLE DB Provider for ODBC Drivers error &#39;80004005&#39; <br/>[Microsoft][ODBC Microsoft Access 97 Driver] Couldn&#39;t use &#39;(unknown)&#39;; file <br/>already in use. <br/><br/>原因： <br/>多人使用时数据库被锁定。 <br/><br/><strong>错误信息：</strong> <br/>Microsoft OLE DB Provider for ODBC Drivers error &#39;80004005&#39; <br/>[Microsoft][ODBC Driver Manager] Data source name not found and no default <br/>driver specified. <br/><br/>原因： <br/>最可能的原因是 ConnectString 是一个在 global.asa 中初始化的 Session 变量 ，但是 global.asa <br/>却没有正常工作。解决办法是，检查赋值时是否正确：（在你的asp中加入下面的代码） <br/><br/>&lt;%= &#34;&#39;auth_user&#39; is &#34; &amp; request.servervariables(&#34;auth_user&#34;)%&gt; <br/>&lt;P&gt; <br/>&lt;%= &#34;&#39;auth_type&#39; is &#34; &amp; request.servervariables(&#34;auth_type&#34;)%&gt; <br/>&lt;P&gt; <br/>&lt;%= &#34;connection string is &#34; &amp; session(&#34;your_connectionstring&#34;)%&gt; <br/>&lt;P&gt; <br/><br/>还有一个原因就是你在你的 ConnectString 中加入了多余的空格，例如 <br/>DSN = MyDSN; Database = Pubs; <br/>试试改成下面这个样子： <br/>DSN=MyDSN;Database=Pubs; <br/><br/>如果是 global.asa 还没有工作，检查该文件是否在运用程序的根目录中,或者是虚拟目录的根目录中。 <br/><br/>还有可能错误出现的原因是 DSN 名称没找着，这可以采用我提供的 id=36767 的办法解决。 <br/>最后是检查是否安装了最新的驱动程序，既是否是最新的 MDAC 版本。 <br/><br/><strong>错误信息</strong> <br/>Microsoft OLE DB Provider for ODBC Drivers error &#39;80004005&#39; <br/>[Microsoft][ODBC Driver Manager] Data source name not ?? <br/><br/>原因： <br/>这个错误有可能是出现在你的计算机上软件安装（或则反安装）的顺序上。 <br/>如果ODBC的版本不一致的话，就会发生该错误。 <br/>解决办法是安装最新版本的MDAC <br/><br/><strong>错误信息：</strong> <br/>Microsoft OLE DB Provider for ODBC Drivers error &#39;80004005&#39; <br/>[Microsoft][ODBC Access 97 ODBC driver Driver]General error Unable to open <br/>registry key &#39;DriverId&#39;. <br/><br/>原因： <br/>这个错误发生在爱从注册表中读取数值的时候。 使用regedit32.exe检查你的注册表的权限。 <br/>你也可以使用NT中的注册表监视程序（NTRegMon）来看读取失败信息。 该程序到这找：<a href="http://www.sysinternals.com" target="_blank">http://www.sysinternals.com</a> <br/><br/><strong>错误信息：</strong> <br/>Microsoft OLE DB Provider for ODBC Drivers error &#39;80004005&#39; <br/>[Microsoft][ODBC SQL Server Driver][dbnmpntw]ConnectionOpen (Cr&#101;ateFile()). <br/><br/>原因： <br/>两个原因：当一个数据库中包含有分别在不用机器上的许可关系时， <br/>这也可能发生在同一台机器上，当你给一个关系设置了UNC路径，而另一个关系却是本地路径。 <br/>错误原因是： <br/>当用户使用IIS匿名帐号登录后，对本地这台机器而言他是有权的，但是对于一个UNC路径的机器， <br/>另外这台机器是不会认为你当前匿名登录的帐号在它那上面也是合法的。 <br/>这样它就不允许你访问它上面的资源，导致错误。 <br/><br/>两个解决办法： <br/>1. 在IIS工具中，改变IIS匿名帐号成另外一个基于域的帐号。（也就是不使用匿名登录） <br/>2. 或则在那台你要访问资源的机器上也创建一个和当前匿名帐号同样的帐号，使用同样的密码。 <br/><br/><strong>错误信息： </strong><br/>Microsoft OLE DB Provider for ODBC Drivers error &#39;80004005&#39; Microsoft][ODBC <br/>Microsoft SQL Driver] Logon Failed() <br/><br/>原因： <br/>该错误是由 SQL Server 产生的，当它不接受或则不能够认识这个登录帐号的时候，或者没有使用管理员身份登录， <br/>也可能是在NT中没有SQL影射帐号造成的。 <br/><br/>使用系统管理员帐号(SA)登录，一般密码应该为空.注意，这时必须使用 CoonectString 而不能够使用DSN文件。 <br/>因为DSN中没有保存用户名和密码。 <br/>检查NT是否给SQL映射了帐号。 <br/><br/><strong>错误信息：</strong> <br/>Microsoft OLE DB Provider for ODBC Drivers error &#39;80004005&#39; <br/>[Microsoft][ODBC SQL Server Driver][SQL Server] Login failed- User: Reason: <br/>Not defined as a valid user of a trusted SQL Server connection. <br/><br/>原因： <br/>原因同上。 <br/>试试这个办法：在 SQL Server 的 Enterprise Manager 中，选择 Server/SQL Server/Configure[ASCII <br/>133]/Security Options/Standard. <br/>如果是运行在 IIS4 中，取消选择该项目的 Password Synchronization 选项。 <br/><br/><strong>错误信息：</strong> <br/>Microsoft OLE DB Provider for ODBC Drivers error &#39;80004005&#39; <br/>[Microsoft][ODBC Microsoft Access 97 Driver] Couldn&#39;t lock file. <br/><br/>原因： <br/>也许是没有正确的权限生成Access数据库的锁定文件(.ldb) <br/>默认时，该文件和你的数据库是同一个目录的。 <br/>给匿名帐号全权访问数据库共享目录的权限。 <br/><br/>有时是因为文件是因为共享时有意使用了只读的权限限制。试试使用下面的代码。 <br/>Set Conn = Server.Cr&#101;ateObject(&#34;ADODB.Connection&#34; <br/>Conn.Mode = adModeShareDenyWrite &#39;8 <br/><br/><strong>错误信息： </strong><br/>Microsoft OLE DB Provider for ODBC Drivers error &#39;80004005&#39; <br/>[Microsoft][ODBC Microsoft Access 97 Driver] &#39;(unknown)&#39; isn&#39;t a valid <br/>path. Make sure that the path name is spelled correctly and that you are <br/>connected to the server on which the file resides. <br/><br/>原因： <br/>路径非法。最可能发生在当 Global.asa 和 CoonecntString 被使用到另外一台机器上的时候。 <br/><br/><strong>错误信息：</strong> <br/>Microsoft OLE DB Provider for ODBC Drivers error &#39;80004005&#39; <br/>[Microsoft][ODBC SQL Server Driver][SQL Server] The query and the views in <br/>it exceed the limit of 16 tables.<br/><br/>原因： <br/>查询太复杂了，对查询有限制。 <br/><br/><strong>错误信息：</strong> <br/>Microsoft OLE DB Provider for ODBC Drivers error &#39;80004005&#39; <br/>[Microsoft][ODBC SQL Server Driver][DBMSSOCN] General network error. Check <br/>your network document <br/><br/>原因： <br/>当装有 SQL Server 的机器改名的时候。但是 DSN 还使用了原来的机器名。]]></description>
		</item>
		
			<item>
			<link>http://www.huison.cn/blog/default.asp?id=275</link>
			<title><![CDATA[使用Adodb.Stream下载大文件的问题]]></title>
			<author>hoogl@126.com(Fishthink)</author>
			<category><![CDATA[程序]]></category>
			<pubDate>Wed,06 May 2009 18:00:52 +0800</pubDate>
			<guid>http://www.huison.cn/blog/default.asp?id=275</guid>	
		<description><![CDATA[使用Adodb.Stream下载文件，如下代码<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.huison.cn/blog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">Response.ContentType = &#34;application/octet-stream&#34; <br/>response.AddHeader &#34;Content-Disposition&#34;,&#34;attachment;filename=&#34; &amp; objRs(&#34;Attach_Name&#34;)&amp; filetype <br/>Set Stream = Server.Cr&#101;ateObject(&#34;ADODB.Stream&#34;) <br/>Stream.type=1 <br/>Stream.Open <br/>Stream.LoadFromFile server.mappath(objRs(&#34;Attach_path&#34;)) <br/>Response.BinaryWrite Stream.Read <br/>Stream.Close <br/>Set Stream = Nothing</div></div><br/>当下载文件小于4M时没问题，大于4M时出错，提示 ：<br/><br/>Response对象错误 &#39;ASP 0251 : 80004005&#39;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>超过响应缓冲区限制<br/><br/>问题出在IIS的配制中AspBufferingLimit只有4M，所以有如下几种解决办法：<br/><br/>1、修改IIS的配制<br/><br/>停止IIS服务，然后用记事本修改C:\WINDOWS\system32\inetsrv\MetaBase.xml 中的:&nbsp;&nbsp; <br/>&nbsp;&nbsp; AspBufferingLimit=&#34;4194304&#34;&nbsp;&nbsp;&nbsp;&nbsp;//即默认4M&nbsp;&nbsp; <br/>&nbsp;&nbsp;改为:&nbsp;&nbsp; <br/>&nbsp;&nbsp; AspBufferingLimit=&#34;8388608&#34;&nbsp;&nbsp;&nbsp;&nbsp;//改为8M或更多，自己决定<br/><br/>2、如果不想修改IIS的默认配制就要修改代码了。<div class="UBBPanel"><div class="UBBTitle"><img src="http://www.huison.cn/blog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">Response.Buffer=False ‘将Response.Buffer设为否 <br/>Response.ContentType = &#34;application/octet-stream&#34; <br/>response.AddHeader &#34;Content-Disposition&#34;,&#34;attachment;filename=&#34; &amp; objRs(&#34;Attach_Name&#34;)&amp; filetype <br/>Set Stream = Server.Cr&#101;ateObject(&#34;ADODB.Stream&#34;) <br/>Stream.type=1 <br/>Stream.Open <br/>Stream.LoadFromFile server.mappath(objRs(&#34;Attach_path&#34;)) <br/>offset = 0 <br/>ChunkSize = 2048*1024 ‘ChunkSize小于IIS配制文件中的AspBufferingLimit项所设置的大小 <br/>TotalSize = Stream.Size <br/>while offset &lt; TotalSize <br/>if (TotalSize - offset &lt; ChunkSize) then <br/>ChunkSize = TotalSize – offset <br/>end if <br/>strChunk = Stream.Read(ChunkSize) <br/>Response.BinaryWrite strChunk <br/>offset = offset + ChunkSize <br/>wend <br/>Stream.Close</div></div><br/>或者<div class="UBBPanel"><div class="UBBTitle"><img src="http://www.huison.cn/blog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">Response.Buffer= true ‘使用缓冲区 <br/>Response.Clear <br/>Response.ContentType = &#34;application/octet-stream&#34; <br/>response.AddHeader &#34;Content-Disposition&#34;,&#34;attachment;filename=&#34; &amp; objRs(&#34;Attach_Name&#34;)&amp; filetype <br/>Set Stream = Server.Cr&#101;ateObject(&#34;ADODB.Stream&#34;) <br/>Stream.type=1 <br/>Stream.Open <br/>Stream.LoadFromFile server.mappath(objRs(&#34;Attach_path&#34;)) <br/>offset = 0 <br/>ChunkSize = 2048*1024 <br/>TotalSize = Stream.Size <br/>while offset &lt; TotalSize <br/>if (TotalSize - offset &lt; ChunkSize) then <br/>ChunkSize = TotalSize – offset <br/>end if <br/>strChunk = Stream.Read(ChunkSize) <br/>Response.BinaryWrite strChunk <br/>response.flush ‘这句很重要，它把缓冲区的数据据推出去 <br/>offset = offset + ChunkSize <br/>wend <br/>Stream.Close</div></div>]]></description>
		</item>
		
			<item>
			<link>http://www.huison.cn/blog/default.asp?id=260</link>
			<title><![CDATA[session 丢失?没有了?]]></title>
			<author>hoogl@126.com(Huison)</author>
			<category><![CDATA[程序]]></category>
			<pubDate>Tue,07 Oct 2008 09:12:42 +0800</pubDate>
			<guid>http://www.huison.cn/blog/default.asp?id=260</guid>	
		<description><![CDATA[(session 和application分不清的去去百度一下……)<br/><br/> 1. 检查是否超时,默认是20分钟,设置的方法是Session.TimeOut=30;<br/><br/>2. 检查代码有无Session.Abandon()之类的。<br/><br/>3. ASP.NET中使用了ACCESS数据库，而且数据库是放在bin目录中的。解决方法是不要放会更新的文件在BIN目录中。<br/><br/>4. 从同一个页面传到另一个页面才能延续同一个session,也就是说session不可跨域,同时客户端一关闭浏览器或一关闭浏览页 Session也消失了,再次访问时又会创建新的Session 但还会在服务器上存活等待超时,只是调用不到了.&nbsp;&nbsp;另外比如在第一个页面置了SESSION，然后REDIRECT去第二个页面。解决方法是在REDIRECT中设置endResponse为FALSE。<br/><br/>5. Iframe丢Session的原因：session是客户端和服务器端共同认证的，客户端存储标识，通过附加在页面的头发送给服务器端，服务器进行识别，如果符合条件就可以获得相应的session操作权。<br/><br/>但如果页面是来自框架的，而框架的父页和框架不是一个站点的话，客户端默认是禁止向页面附加头信息的，这样服务器端就无法识别客户端框架里面的页面，自然不能操作Session。<br/><br/> 解决办法: Response.AddHeader(&#34;P3P&#34;, &#34;CP=CAO PSA OUR&#34;)&#39; 或者在Window服务中将ASP.NET State Service 启动。<br/><br/>6. 有些杀病毒软件会去扫描您的Web.Config文件，那时Session肯定掉，这是微软的说法。解决办法: 使杀病毒软件屏蔽扫描Web.Config文件(程序运行时自己也不要去编辑它)<br/><br/> 7. Asp.net 默认配置下，Session莫名丢失的原因及解决办法<br/><br/>(原文<a href="http://www.cnblogs.com/supersand/archive/2006/05/20/404919.html" target="_blank">http://www.cnblogs.com/supersand/archive/2006/05/20/404919.html</a>)<br/><br/>正常操作情况下Session会无故丢失。因为程序是在不停的被操作，排除Session超时的可能。另外，Session超时时间被设定成60分钟，不会这么快就超时的。<br/><br/>这次到CSDN上搜了一下帖子，发现好多人在讨论这个问题，然后我又google了一下，发现微软网站上也有类似的内容。<br/><br/>现在我就把原因和解决办法写出来。<br/><br/>原因：<br/><br/>由于Asp.net程序是默认配置，所以Web.Config文件中关于Session的设定如下：<br/>&lt;sessionState mode=&#39;InProc&#39; stateConnectionString=&#39;tcpip=127.0.0.1:42424&#39; sqlConnectionString=&#39;data source=127.0.0.1;Trusted_Connection=yes&#39; cookieless=&#39;true&#39; timeout=&#39;60&#39;/&gt;<br/><br/>我们会发现sessionState标签中有个属性mode，它可以有3种取值：InProc、StateServer?SQLServer（大小写敏感）。默认情况下是InProc，也就是将Session保存在进程内（IIS5是aspnet_wp.exe，而IIS6是W3wp.exe），这个进程不稳定，在某些事件发生时，进程会重起，所以造成了存储在该进程内的Session丢失。<br/><br/>哪些情况下该进程会重起呢？微软的一篇文章告诉了我们：<br/>1、配置文件中processModel标签的memoryLimit属性<br/>2、Global.asax或者Web.config文件被更改<br/>3、Bin文件夹中的Web程序（DLL）被修改<br/>4、杀毒软件扫描了一些.config文件。<br/>更多的信息请参考PRB: Session variables are lost intermittently in ASP.NET applications<br/><br/>解决办法：<br/><br/>前面说到的sessionState标签中mode属性可以有三个取值，除了InProc之外，还可以为StateServer、SQLServer。这两种存Session的方法都是进程外的，所以当aspnet_wp.exe重起的时候，不会影响到Session。<br/><br/>现在请将mode设定为StateServer。StateServer是本机的一个服务，可以在系统服务里看到服务名为ASP.NET State Service的服务，默认情况是不启动的。当我们设定mode为StateServer之后，请手工将该服务启动。<br/><br/>这样，我们就能利用本机的StateService来存储Session了，除非电脑重启或者StateService崩掉，否则Session是不会丢的（因Session超时被丢弃是正常的）。<br/><br/>除此之外，我们还可以将Session通过其他电脑的StateService来保存。具体的修改是这样的。同样还在sessionState标签中，有个stateConnectionString=&#39;tcpip=127.0.0.1:42424&#39;属性，其中有个ip地址，默认为本机（127.0.0.1），你可以将其改成你所知的运行了StateService服务的电脑IP，这样就可以实现位于不同电脑上的Asp.net程序互通Session了。<br/><br/>如果你有更高的要求，需要在服务期重启时Session也不丢失，可以考虑将mode设定成SQLServer，同样需要修改sqlConnectionString属性。关于使用SQLServer保存Session的操作，请访问这里。<br/><br/>在使用StateServer或者SQLServer存储Session时，所有需要保存到Session的对象除了基本数据类型（默认的数据类型，如int、string等）外，都必须序列化。只需将[Serializable]标签放到要序列化的类前就可以了。<br/>如：<br/>[Serializable]<br/>public class MyClass<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;......<br/>}<br/><br/>原帖位置 <a href="http://search.csdn.net/Expert/topic/1671/1671641.xml?temp=.240597" target="_blank">http://search.csdn.net/Expert/topic/1671/1671641.xml?temp=.240597</a><br/><br/>tenghongc(洋锅)： <br/>session其时是一种特殊的cookie<br/>单独用不会出问题，<br/>但是切记不要和cookie混用！！！<br/>请检查你的站点里有没用过cookie!<br/>如果有的话，请你全部用session或者cookie<br/>我以前也碰到这种情况！<br/>折磨了我好一段时间！<br/>后来在书上无意间看到说session和cookie混用不一定会出问题！<br/>但有时cookie会影响session的传递！<br/>因为session是利用cookie技术来临时保存用户数据的！<br/>我后来只用session，不用cookie就好了！<br/>你可以试试看！<br/><br/>cboy2003(三碗（cpubook.com))<br/>session变量“丢失”的问题 <br/><br/>谈到了那么多的概念，终于可以说道实质性的问题了，session对象是web应用程序中最重要的对像之一，正是它的存<br/>在，使得我们可以在跨网页间传送数据，分辨不同用户成为可能。我们只要将变量制定给session即可实现。这一过程即<br/>session(&#34;temp&#34;)=temp即可。但最近不少网友都有这样的疑问，就是当我们在一个网页间设定了一个session变量后，到另<br/>一个网页，却消失了。这是什么样的原因呢。<br/>根据上面的概念，我们可以将其原因，和处理办法总结如下。<br/>1：asp网页跨了多个web应用程序：<br/>这个原因就是你的另一个网页可能是另一个web应用程序。以前，一些资料过分的强调了会话变量的单一性，好像一个<br/>用户连接到一个web主机之后，只可能创建一个会话变量，这是不对的，分辨会话变量的依据正是我们上面所提到的web应<br/>用程序范围，而不是单独根据用户而建立的，你可以试一试下面的一段代码。<br/>test.asp<br/>&lt;% @ language=vbscript %&gt;<br/>&lt;%<br/>session(&#34;temp&#34;)=&#34;temp&#34;<br/>Response.Write session.SessionID &#39;sessionID用来分辨一个应用程序间的单独客户。<br/>%&gt;<br/><br/>将test.asp分别拷贝到两个不同的虚拟目录下。你就可以看到，他是两个不同的值了。所以，可能你的网页跨了不同的应<br/>用程序。<br/>当然，这种情况对于初学者可能碰到，对于有经验的人可能犯的是这样的错误，即他们本身为一个根目录，但在制定虚<br/>拟目录时将其子目录又设为一个虚拟目录了，就如同我们上面提到的第二个表结构一样。这样他同样成为了两个不同的web<br/>应用程序。也就不难解释为什么会出错了。<br/><br/>2：可能是启动了多个同一应用程序。<br/>第一种情况很好发现，也容易改正，但这第二种情况就不容易发现，也较难改正。这里我们引入一个另一个的概念。多<br/>个同一应用程序共存，（好长呀，关键是微软的概念我忘了，这个是我自己起的。呵呵！），它的意思从这个定义上很好<br/>理解，就是对于同一个应用程序。同一时间可以在内存中存在多个。如我们常见的acdsee.exe,你可以通过点击启动多个<br/>acdsee.exe。而另外一种则不能，我们就不说它的定义了（如果说的话，就是相同应用程序不共存，呵呵！）在同一时间<br/>内，如果已经启动了一个应用程序，则不能再启动相同的应用的应用程序了。如foxmail.exe，当你启动了一个<br/>foxmail.exe后，就只可能在内存中存在一个foxmail.如果你在启动，则不会再开一个foxmail窗口了。<br/>而我们的ie属于前者，你可以通过点击ie，启动多个ie应用程序。此时，我们做下面另一个测试。你将上面的代码<br/>test.asp放入一个虚拟目录中。然后，你点击ie启动（注意：是通过点击Ie启动，不是按CTRL+N，也不是在一个ie窗口点<br/>击文件，重新打开一个窗口）此时，你可以发现，他们虽然是同一个地址，同一个用户，但sessionID还是不同的，当然，<br/>你还可以建另一个文件。如<br/>test2.asp<br/>&lt;% @ language=vbscript %&gt;<br/>&lt;%<br/>response.write session(&#34;temp&#34;)<br/>%&gt;<br/>这时，你在另一个ie窗口下，你就会发现session(&#34;temp&#34;)为空，也就是说，我们刚才明明在test.asp中附了值，而且<br/>test2.asp和test.asp在同一虚拟目录下，但session(&#34;temp&#34;)却丢失了。原来，相对于相同的asp应用程序。不同的ie相对<br/>的却是不同的asp应用程序。（有点像绕口令难懂是吧。）不过，我们已经明白了它的起因，相信不难解决他。<br/>这里还要注意的是，我们刚才一再提到的是通过点击Ie，而不是通过按CTRL+N，也不是在一个ie窗口点击文件，重新<br/>打开一个窗口，这里要说明的是如果你通过在一个ie窗口打开的窗口，它属于派生窗口，而不是共生窗口，就是说，此时<br/>的另一个窗口属于和其上一个窗口是继承关系，属于同一个应用程序范围。<br/>3：连接不当<br/>其实，大部分的网友碰到的问题是通过点击页面中的连接新开窗口而发现session变量丢失的。他同按ctrl+N新开窗口<br/>的意义相同。但此时为什么会出问题呢？我们来分析一下它的连接方式。可能为&lt;a href=&#34;xx.asp&#34; traget=_blank&gt;click <br/>me &lt;/a&gt;通过这样点击的连接同ctrl+n 是相同的，应该不会出问题。还有一种连接式通过脚本控制的如<br/>window.open &#34;xx.asp&#34;,&#34;name&#34;,&#34;toolbar=no&#34;这样的代码，他就可能发生这样的问题。如果通过点击ie开了多个共生窗口<br/>（许多网友为了节省时间，他们喜欢开多个窗口。比如我。）。就是他可能在新开的窗口中如果含有相同的name的窗口。<br/>则此时，就可能发生连接不当导致session丢失，其实，原因还是通第二种一样。还有一种更极端的方式开新窗口，通过用<br/>document.write 在一个脚本中动态写出新的页面，而该页面的url是不存在的，这样就更可能出问题了，应为session正是<br/>通过url,http来追踪的。所以如果其页面地址是动态的话。则session就根本无法追踪了。<br/><br/>相信通过以上例子的分析，可能会解释你在应用session中出现的大部分问题。但不是全部（如过你禁用cookie的话，<br/>呵呵！）但是，如果你将以上的概念都弄懂，则可以解决你在应用session中出现的所用问题了。]]></description>
		</item>
		
			<item>
			<link>http://www.huison.cn/blog/default.asp?id=250</link>
			<title><![CDATA[ASP常用函数:HTMLFilter()]]></title>
			<author>hoogl@126.com(Huison)</author>
			<category><![CDATA[程序]]></category>
			<pubDate>Wed,03 Sep 2008 22:53:16 +0800</pubDate>
			<guid>http://www.huison.cn/blog/default.asp?id=250</guid>	
		<description><![CDATA[<textarea name="code" class="vb" rows="15" cols="100">&lt;%
&#39;过滤HTML各种标签样式脚本
&#39;来源:<a href="http://jorkin.reallydo.com/article.asp?id=521" target="_blank">http://jorkin.reallydo.com/article.asp?id=521</a>
&#39;需要RegReplace函数: <a href="http://jorkin.reallydo.com/article.asp?id=345" target="_blank">http://jorkin.reallydo.com/article.asp?id=345</a>

Function HTMLFilter(sHTML, sFilters)
&nbsp;&nbsp;&nbsp;&nbsp;If sHTML &amp; &#34;&#34; = &#34;&#34; Then Exit Function
&nbsp;&nbsp;&nbsp;&nbsp;If sFilters &amp; &#34;&#34; = &#34;&#34; Then sFilters = &#34;SCRIPT,OBJECT&#34;
&nbsp;&nbsp;&nbsp;&nbsp;Dim aFilters
&nbsp;&nbsp;&nbsp;&nbsp; aFilters = Split(UCase(sFilters), &#34;,&#34;)
&nbsp;&nbsp;&nbsp;&nbsp;For i = 0 To UBound(aFilters)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sel&#101;ct Case UCase(Trim(aFilters(i)))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Case &#34;JORKIN&#34;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Do While InStr(sHTML, &#34;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#34;) &gt;0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sHTML = Replace(sHTML, &#34;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#34;, &#34;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#34;)
&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;Case &#34;SCRIPT&#34;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;// 去除脚本&lt;scr ipt&gt;&lt;/scr ipt&gt;及 onload 等
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sHTML = RegReplace(sHTML, &#34;&lt;SCRIPT[\s\S]*?&lt;/SCRIPT&gt;&#34;, &#34;&#34;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sHTML = RegReplace(sHTML, &#34;\s[on].+?=\s+?([\&#34;&#34;|\&#39;])(.*?)\1&#34;, &#34;&#34;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sHTML = RegReplace(sHTML, &#34;(JAVASCRIPT|JSCRIPT|VBSCRIPT|VBS):&#34;, &#34;$1：&#34;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Case &#34;FIXIMG&#34;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sHTML = RegReplace(sHTML, &#34;&lt;IMG.*?\sSRC=([^\&#34;&#34;\&#39;\s][^\&#34;&#34;\&#39;\s&gt;]*).*?&gt;&#34;, &#34;&lt;img src=$2 border=0&gt;&#34;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sHTML = RegReplace(sHTML, &#34;&lt;IMG.*SRC=([\&#34;&#34;\&#39;]?)(.\1\S+).*?&gt;&#34;, &#34;&lt;img src=$2 border=0&gt;&#34;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Case &#34;TABLE&#34;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;// 去除表格&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;th&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sHTML = RegReplace(sHTML, &#34;&lt;/?TABLE[^&gt;]*&gt;&#34;, &#34;&#34;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sHTML = RegReplace(sHTML, &#34;&lt;/?TBODY[^&gt;]*&gt;&#34;, &#34;&#34;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sHTML = RegReplace(sHTML, &#34;&lt;(/?)TR[^&gt;]*&gt;&#34;, &#34;&lt;$1p&gt;&#34;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sHTML = RegReplace(sHTML, &#34;&lt;/?TH[^&gt;]*&gt;&#34;, &#34; &#34;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sHTML = RegReplace(sHTML, &#34;&lt;/?TD[^&gt;]*&gt;&#34;, &#34; &#34;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Case &#34;CLASS&#34;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;// 去除样式类class=&#34;&#34;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sHTML = RegReplace(sHTML, &#34;(&lt;[^&gt;]+) CLASS=[^ |^&gt;]+([^&gt;]*&gt;)&#34;, &#34;$1 $2&#34;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sHTML = RegReplace(sHTML, &#34;\sCLASS\s*?=\s*?([\&#34;&#34;|\&#39;])(.*?)\1&#34;, &#34;&#34;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Case &#34;STYLE&#34;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;// 去除样式style=&#34;&#34;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sHTML = RegReplace(sHTML, &#34;(&lt;[^&gt;]+) STYLE=[^ |^&gt;]+([^&gt;]*&gt;)&#34;, &#34;$1 $2&#34;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sHTML = RegReplace(sHTML, &#34;\sSTYLE\s*?=\s*?([\&#34;&#34;|\&#39;])(.*?)\1&#34;, &#34;&#34;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Case &#34;XML&#34;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;// 去除XML&lt;?xml&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sHTML = RegReplace(sHTML, &#34;&lt;?XML[^&gt;]*&gt;&#34;, &#34;&#34;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Case &#34;NAMESPACE&#34;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;// 去除命名空间&lt;o:p&gt;&lt;/o:p&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sHTML = RegReplace(sHTML, &#34;&lt;\/?[a-z]+:[^&gt;]*&gt;&#34;, &#34;&#34;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Case &#34;FONT&#34;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;// 去除字体&lt;font&gt;&lt;/font&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sHTML = RegReplace(sHTML, &#34;&lt;/?FONT[^&gt;]*&gt;&#34;, &#34;&#34;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Case &#34;MARQUEE&#34;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;// 去除字幕&lt;marquee&gt;&lt;/marquee&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sHTML = RegReplace(sHTML, &#34;&lt;/?MARQUEE[^&gt;]*&gt;&#34;, &#34;&#34;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Case &#34;OBJECT&#34;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;// 去除对象&lt;object&gt;&lt;param&gt;&lt;embed&gt;&lt;/object&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sHTML = RegReplace(sHTML, &#34;&lt;/?OBJECT[^&gt;]*&gt;&#34;, &#34;&#34;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sHTML = RegReplace(sHTML, &#34;&lt;/?PARAM[^&gt;]*&gt;&#34;, &#34;&#34;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sHTML = RegReplace(sHTML, &#34;&lt;/?EMBED[^&gt;]*&gt;&#34;, &#34;&#34;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Case &#34;COMMENT&#34;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;// 去除HTML注释, 会处理&lt;script&gt;和&lt;style&gt;内注释, 慎用
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sHTML = RegReplace(sHTML, &#34;&lt;!--[\s\S]*?--&gt;&#34;, &#34;&#34;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Case Else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;// 去除其它标签
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sHTML = RegReplace(sHTML, &#34;&lt;/?&#34; &amp; aFilters(i) &amp; &#34;[^&gt;]*?&gt;&#34;, &#34;&#34;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End Sel&#101;ct
&nbsp;&nbsp;&nbsp;&nbsp;Next
&nbsp;&nbsp;&nbsp;&nbsp;HTMLFilter = sHTML
End Function

&#39;功能:使用正则表示式对字符串进行替换
&#39;来源:<a href="http://jorkin.reallydo.com/article.asp?id=345" target="_blank">http://jorkin.reallydo.com/article.asp?id=345</a>

Function RegReplace(Str, PatternStr, RepStr)
&nbsp;&nbsp;&nbsp;&nbsp;Dim NewStr, regEx
&nbsp;&nbsp;&nbsp;&nbsp;NewStr = Str
&nbsp;&nbsp;&nbsp;&nbsp;If IsNull(NewStr) Then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RegReplace = &#34;&#34;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit Function
&nbsp;&nbsp;&nbsp;&nbsp;End If
&nbsp;&nbsp;&nbsp;&nbsp;Set regEx = New RegExp
&nbsp;&nbsp;&nbsp;&nbsp;regEx.IgnoreCase = True
&nbsp;&nbsp;&nbsp;&nbsp;regEx.Global = True
&nbsp;&nbsp;&nbsp;&nbsp;regEx.Pattern = PatternStr
&nbsp;&nbsp;&nbsp;&nbsp;NewStr = regEx.Replace(NewStr, RepStr)
&nbsp;&nbsp;&nbsp;&nbsp;RegReplace = NewStr
End Function
%&gt;</textarea>]]></description>
		</item>
		
			<item>
			<link>http://www.huison.cn/blog/default.asp?id=237</link>
			<title><![CDATA[生活名片2.1版发布]]></title>
			<author>hoogl@126.com(Huison)</author>
			<category><![CDATA[程序]]></category>
			<pubDate>Mon,21 Jul 2008 09:51:42 +0800</pubDate>
			<guid>http://www.huison.cn/blog/default.asp?id=237</guid>	
		<description><![CDATA[ <img src="http://www.huison.cn/blog/images/smilies/17.gif" border="0" style="margin:0px 0px -2px 0px" alt=""/> 这两天比较闲,就生活名片网友反馈比较多的问题进行了一些修正:<br/><br/>新增config.asp配置页面;<br/>可管理城市分类;<br/>可管理项目类别;<br/>设置信息是否需要审核;<br/>*设置默认城市和类别;<br/>管理用户名和密码;<br/>*前台标识语字数增最多至100字,可滚动显示;<br/>*联系方式的更正;<br/>*后台新增批量删除功能;<br/>*增加分页功能;<br/>*数据库升级请在服务器端运行db_up&#100;ate.asp文件;<br/>*整站文件结构调整;<br/><br/>带*号均为此次升级的内容,其实是2.0基础上升级的.<br/><br/>即将更新的内容有:<br/>后台推荐功能;<br/>前台信息搜索功能;<br/><br/>本人美工不是很好,如有朋友肯帮助美化,将感激不尽:)<br/><strong>做精简的程序,做简单的生活名片!</strong><br/><br/>下载地址:<a href="http://down.chinaz.com/soft/23282.htm" target="_blank">http://down.chinaz.com/soft/23282.htm</a>]]></description>
		</item>
		
			<item>
			<link>http://www.huison.cn/blog/default.asp?id=231</link>
			<title><![CDATA[PHP学习中常用到的函数]]></title>
			<author>hoogl@126.com(Huison)</author>
			<category><![CDATA[程序]]></category>
			<pubDate>Wed,25 Jun 2008 15:48:28 +0800</pubDate>
			<guid>http://www.huison.cn/blog/default.asp?id=231</guid>	
		<description><![CDATA[<span style="color:Red">sesion_unregister(xxx),是把xxx 名的session变量从session文件中清楚<br/>session_unset().是把session文件清空，也就是N个session_unregister(???)的调用<br/>session_destory()，最彻底了，是直接删除session文件了</span><br/><br/><span style="color:Blue">addslashes — 使用反斜线引用字符串<br/>返回字符串，该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号（&#39;）、双引号（&#34;）、反斜线（\）与 NUL（NULL 字符）。<br/>stripslashes 与其相反.</span><br/><br/><span style="color:Maroon"><strong>实例掌握PHP异常处理</strong> <br/>用 try...catch <br/>/* PDO连接mysql数据库,如果没看过PDO，先看下PDO的构造函数，要不跳过例1看例2 */ <br/>$dsn = &#39;mysql:host=localhost;dbname=testdb&#39;; <br/>$user = &#39;dbuser&#39;; <br/>$password = &#39;dbpass&#39;; <br/>try { <br/>$dbh = new PDO($dsn, $user, $password); //创建数据库连接对象容易出现异常 <br/>echo &#39;如果上面出现异常就不能显示我了&#39;; <br/>} catch (PDOException $e) { <br/>echo &#39;Connection failed: &#39; . $e-＞__toString(); <br/>} <br/>?＞ </span><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.huison.cn/blog/default.asp?id=230</link>
			<title><![CDATA[PHP的局部变量和全局变量]]></title>
			<author>hoogl@126.com(Huison)</author>
			<category><![CDATA[程序]]></category>
			<pubDate>Wed,25 Jun 2008 10:01:28 +0800</pubDate>
			<guid>http://www.huison.cn/blog/default.asp?id=230</guid>	
		<description><![CDATA[就像大部份的结构化程序，有所谓的全局变量与局部变量，PHP 在这方面也是有相同的处理方式。 <br/>在 PHP 的程序执行时，系统会在内存中保留一块全局变量的区域。实际运用时，可以透过 $GLOBALS[&#34;变量名称&#34;] 将需要的变量取出。在用户自定的函数或程序中，就可以用 $GLOBALS 数组取出需要的变量。当然别忘了 PHP 的变量有分大小写，搞错了大小写可是叫一百年，变量也不会出来。 <br/><br/>$GLOBALS 数组是 PHP 程序中比较特殊的变量，不必定义，系统会自动匹配相关的变量在里面。在函数中，也不必管 $GLOBALS 数组是否已经做全局定义，就可以直接使用了。 <br/><br/>和 $GLOBALS 变量类似的还有 $php_errormsg 字符串变量。若 PHP 的配置文件 (php.ini/php3.ini) 中的 track_errors 选项打开的话，会有全局变量 $php_errormsg 可以看到错误的信息。 <br/><br/>在 PHP 中，全局变量的有效范围 (scope) 仅限于主要程序中，不会影响到函数中同名的变量，也就是全局变量与局部变量互不侵犯。若要变量能通透到函数中，就要用到 $GLOBALS 数组或是使用 global 定义。 <br/><br/>例如，在自行开发的函数中，要取得目前执行 PHP 程序页面的文件名，就可以用 $GLOBALS[&#34;PHP_SELF&#34;] 取出 $PHP_SELF 的值。 <br/><br/>&lt;?php <br/>// 本程序使用 $GLOBALS 数组 <br/>function myfunc() { <br/>echo $GLOBALS[&#34;PHP_SELF&#34;]; <br/>} <br/>myfunc(); <br/>?&gt; <br/><br/><br/>下面是错误的示范，请勿模仿，上面的才是正确的示范。 <br/><br/>&lt;?php <br/>// 这是错误的示范 <br/>function errfunc() { <br/>echo $PHP_SELF; <br/>} <br/>errfunc(); <br/>?&gt; <br/><br/><br/>但是这个错误的示范要是改成下例就没问题了 <br/><br/>&lt;?php <br/>// 本程序使用全局定义 <br/>function myfunc() { <br/>global $PHP_SELF; <br/>echo $PHP_SELF; <br/>} <br/>myfunc(); <br/>?&gt; <br/><br/><br/>在变量前面加上 global 的名称，就是定义该变量为全局变量。用这种方式，就不需使用 $GLOBALS 数组，也能让变量进入自行开发的函数中。 <br/><br/>接下来先看静态变量的例子 <br/><br/>&lt;?php <br/>// 静态变量的例子 <br/>function myfunc() { <br/>static $mystr; <br/>$mystr.=&#34;哈&#34;; <br/>echo $mystr.&#34;&lt;br&gt;n&#34;; <br/>} <br/>myfunc(); // 哈 <br/>myfunc(); // 哈哈 <br/>myfunc(); // 哈哈哈 <br/>?&gt; <br/><br/><br/>函数在执行时所产生的变量，在函数结束时就消失了，有时因为程序的需要，函数在循环中，当不希望变量在每次执行完函数就消失的话，静态变量 (static variable) 就派上用场了。上例中，使用 $mystr 变量之前，先在变量前面加上 static，即表示变量 $mystr 是静态变量，当每次执行 myfunc() 函数时，$mystr 的值会一直增加，每执行一次就多一个哈字。若将 static 的静态变量定义拿掉，就没办法累加哈字了。 <br/><br/>&lt;?php <br/>// 不是静态变量的例子 (错误的) <br/>function myfunc() { <br/>$mystr.=&#34;哈&#34;; <br/>echo $mystr.&#34;&lt;br&gt;n&#34;; <br/>} <br/>myfunc(); // 哈 <br/>myfunc(); // 哈 <br/>myfunc(); // 哈 <br/>?&gt; <br/><br/><br/>再看一个比较实际的例子，它是处理表格的颜色，让隔行的颜色不同。 <br/><br/>&lt;?php <br/>function TdBackColor() { <br/>static $ColorStr; <br/>if ($ColorStr==&#34;808080&#34;) { <br/>$ColorStr=&#34;c0c0c0&#34;; <br/>} else { <br/>$ColorStr=&#34;808080&#34;; <br/>} <br/>return($ColorStr); <br/>} <br/>echo &#34;&lt;table border=1&gt;n&#34;; <br/>for ($i=0; $i&lt;10; $i++) { <br/>$ColorStr=TdBackColor(); <br/>echo &#34;&lt;tr&gt;&lt;td bgcolor=&#34;.$ColorStr.&#34;&gt;这是第&#34;.$i.&#34;行&lt;/td&gt;&lt;/tr&gt;n&#34;; <br/>} <br/>echo &#34;&lt;/table&gt;&#34;; <br/>?&gt; <br/><br/><br/>PHP 的变量使用技巧上，最令人觉得不可思议的则是变量的变量 (variable variable)。这是充分利用 PHP 特性玩出的特殊技巧 <br/><br/>&lt;?php <br/>$a = &#34;Hello&#34;; <br/>$$a = &#34;world&#34;; <br/>echo &#34;$a, $hello&#34;; // Hello, world <br/>echo &#34;$a, ${$a}&#34;; // 注意:在echo语句中$$x被写成${$x}，这是让PHP知道你要输出的是变量的变量而不是一个$字符与$x变量<br/>?&gt; <br/><br/>mdean@kcnet.com 举出一个更绝的例子 (24-Apr-1999)，他称为变量的函数 (variable function) <br/><br/>&lt;?php <br/>function myCallbackFunction() <br/>{ <br/>print(&#34;Hello from callback&#34;); <br/>} <br/><br/>function myFunction($callback) <br/>{ <br/>$callback(); <br/>} <br/>// call to myFunction passing callback <br/>// function as parameter <br/>myFunction(&#34;myCallbackFunction&#34;); <br/>?&gt; ]]></description>
		</item>
		
			<item>
			<link>http://www.huison.cn/blog/default.asp?id=229</link>
			<title><![CDATA[explode和split的区别]]></title>
			<author>hoogl@126.com(Huison)</author>
			<category><![CDATA[程序]]></category>
			<pubDate>Mon,23 Jun 2008 16:40:43 +0800</pubDate>
			<guid>http://www.huison.cn/blog/default.asp?id=229</guid>	
		<description><![CDATA[下午分析网上下载的一个源码的时候,因为ASP习惯用split分解字符串,但是在这里始终出错!<br/>Warning: split() [function.split]: REG_EMPTY in...<br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://www.huison.cn/blog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">$file=split(&#34;|hyenpkjvlg|&#34;,join(&#34;&#34;,file(&#34;$datadir/&#34;.$list[$i])));<br/>$file=explode(&#34;|hyenpkjvlg|&#34;,join(&#34;&#34;,file(&#34;$datadir/&#34;.$list[$i])));</div></div><br/><br/>看了帮助文档,群里也问了人(还是那句话:群里始终解决不了问题).得出结果:<br/><br/><span style="color:Red">explode函数只支持用字符分隔，然而split是用正则表达式，当然使用split可以处理一些复杂的字符串分析问题。而explode需要有一定的规则。</span><br/><br/><strong>得出:split分隔符中不能带有&#34;|&#34;,目前还没有发现有什么其它的不一样!</strong>]]></description>
		</item>
		
</channel>
</rss>