<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Modern Fun － 摩登坊 &#187; 知识库</title>
	<atom:link href="http://www.steveluo.name/category/knowledge-base/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.steveluo.name</link>
	<description>Modernize our life!</description>
	<lastBuildDate>Wed, 21 Jul 2010 12:55:34 +0000</lastBuildDate>
	<language>zh-cn</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>jQuery中使用mouseleave代替mouseout</title>
		<link>http://www.steveluo.name/jquery-mouseleave-instead-of-mouseout/</link>
		<comments>http://www.steveluo.name/jquery-mouseleave-instead-of-mouseout/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 10:09:08 +0000</pubDate>
		<dc:creator>Steve Luo</dc:creator>
				<category><![CDATA[前端技术]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[前端]]></category>
		<category><![CDATA[网站]]></category>

		<guid isPermaLink="false">http://www.steveluo.name/?p=214</guid>
		<description><![CDATA[今天在写一个鼠标悬停下拉菜单过程中，遇到一个很抓狂的问题。既然是鼠标悬停效果，那就用到了jQuery的2个事件，mouseover和mouseout（在jQuery 1.3的API手册中只有这两个鼠标移入移出事件）。 先看下使用mouseout的效果： &#60;script type=&#34;text/javascript&#34; src=&#34;http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js&#34;&#62;&#60;/script&#62; &#60;div id=&#34;container&#34; style=&#34;width:300px;&#34;&#62; &#60;div id=&#34;title&#34; style=&#34;cursor:pointer; background:#ccc;&#34;&#62;使用了mouseout事件↓&#60;/div&#62; &#60;div id=&#34;list&#34; style=&#34;display:none;position:absolute; border:1px solid #ccc; width:300px;&#34;&#62; &#60;div&#62;第一行&#60;/div&#62; &#60;div&#62;第二行&#60;/div&#62; &#60;div&#62;第三行&#60;/div&#62; &#60;/div&#62; &#60;/div&#62; &#60;script type=&#34;text/javascript&#34;&#62; $(function(){ // 绑定鼠标移入标题时，显示下拉容器 var list = $(&#34;#list&#34;); $(&#34;#title&#34;).mouseover(function() { var offset = $(this).offset(); list.css(&#34;left&#34;, offset.left); list.css(&#34;top&#34;, offset.top+19); list.show(); }); // 绑定mouseout事件，无法实现我们的预期效果 $(&#34;#container&#34;).mouseout(function() { $(&#34;#list&#34;).hide(); }); }); &#60;/script&#62; Tips:您可以在运行代码前对其进行修改！ [...]]]></description>
			<content:encoded><![CDATA[<p>今天在写一个鼠标悬停下拉菜单过程中，遇到一个很抓狂的问题。既然是鼠标悬停效果，那就用到了jQuery的2个事件，mouseover和mouseout（在jQuery 1.3的API手册中只有这两个鼠标移入移出事件）。</p>
<p>先看下使用mouseout的效果：</p>
<div class="runcode">
<p><textarea name="runcode" style="height:300px;width:600px;font-size:12px" class="runcode_text" id="runcode_ZotzQn">
&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;div id=&quot;container&quot; style=&quot;width:300px;&quot;&gt;
    &lt;div id=&quot;title&quot; style=&quot;cursor:pointer; background:#ccc;&quot;&gt;使用了mouseout事件↓&lt;/div&gt;
    &lt;div id=&quot;list&quot; style=&quot;display:none;position:absolute; border:1px solid #ccc; width:300px;&quot;&gt;
        &lt;div&gt;第一行&lt;/div&gt;
        &lt;div&gt;第二行&lt;/div&gt;
        &lt;div&gt;第三行&lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
$(function(){
    // 绑定鼠标移入标题时，显示下拉容器
    var list = $(&quot;#list&quot;);
    $(&quot;#title&quot;).mouseover(function() {
        var offset = $(this).offset();
        list.css(&quot;left&quot;, offset.left);
        list.css(&quot;top&quot;, offset.top+19);
        list.show();
    });
    // 绑定mouseout事件，无法实现我们的预期效果
    $(&quot;#container&quot;).mouseout(function() {
        $(&quot;#list&quot;).hide();
    });
});
&lt;/script&gt;
</textarea></p>
<p><input type="button" value="运行代码" class="runcode_button" onclick="runcode_open_new('runcode_ZotzQn');"/> <input type="button" value="复制" class="runcode_button" onclick="runcode_copy('runcode_ZotzQn');"/> <input type="button" value="另存为" class="runcode_button" onclick="saveCode('runcode_ZotzQn','runcode_ZotzQn');"/> Tips:您可以在运行代码前对其进行修改！</p>
</div>
<p>我们发现使用mouseout时，鼠标只要在容器里一移动，就被出发了hide()，其实是因为mouseout事件也会影响到子元素，也就是事件可能被同时绑定到了该容器的子元素上，所以鼠标移出每个子元素也都会触发我们的hide()。<br />
<span id="more-214"></span><br />
经过网上一番调研~从jQuery 1.3开始新增了2个mouse事件，mouseenter和mouseleave。现在我们使用mouseleave事件，这个事件在jQuery手册上好像并没有提到&#8230;囧<br />
我们来看一下mouseleave事件是否能够解决这个问题。</p>
<div class="runcode">
<p><textarea name="runcode" style="height:300px;width:600px;font-size:12px" class="runcode_text" id="runcode_Gi9cyz">
&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;div id=&quot;container&quot; style=&quot;width:300px;&quot;&gt;
    &lt;div id=&quot;title&quot; style=&quot;cursor:pointer; background:#ccc;&quot;&gt;使用了mouseleave事件↓&lt;/div&gt;
    &lt;div id=&quot;list&quot; style=&quot;display:none;position:absolute; border:1px solid #ccc; width:300px;&quot;&gt;
        &lt;div&gt;第一行&lt;/div&gt;
        &lt;div&gt;第二行&lt;/div&gt;
        &lt;div&gt;第三行&lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
$(function(){
    // 绑定鼠标移入标题时，显示下拉容器
    var list = $(&quot;#list&quot;);
    $(&quot;#title&quot;).mouseover(function() {
        var offset = $(this).offset();
        list.css(&quot;left&quot;, offset.left);
        list.css(&quot;top&quot;, offset.top+19);
        list.show();
    });
    // 绑定mouseleave事件，效果很好
    $(&quot;#container&quot;).mouseleave(function() {
        $(&quot;#list&quot;).hide();
    });
});
&lt;/script&gt;
</textarea></p>
<p><input type="button" value="运行代码" class="runcode_button" onclick="runcode_open_new('runcode_Gi9cyz');"/> <input type="button" value="复制" class="runcode_button" onclick="runcode_copy('runcode_Gi9cyz');"/> <input type="button" value="另存为" class="runcode_button" onclick="saveCode('runcode_Gi9cyz','runcode_Gi9cyz');"/> Tips:您可以在运行代码前对其进行修改！</p>
</div>
<p>好了，我们的问题解决了，需要的朋友各取所需吧。</p>
<p>本文参考了<a href="http://amcucn.javaeye.com/blog/473251" target="_blank">jquery中解决div mouseout事件冒泡的问题</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.steveluo.name/jquery-mouseleave-instead-of-mouseout/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>CSS透明度在各浏览器下的兼容实现</title>
		<link>http://www.steveluo.name/css-opacity-all-browsers-hack/</link>
		<comments>http://www.steveluo.name/css-opacity-all-browsers-hack/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 03:30:18 +0000</pubDate>
		<dc:creator>Steve Luo</dc:creator>
				<category><![CDATA[前端技术]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[浏览器]]></category>

		<guid isPermaLink="false">http://www.steveluo.name/?p=208</guid>
		<description><![CDATA[几款浏览器对透明度的支持方式各不相同，为了保证在IE, Firefox, Chrome, Safari等主流浏览器下都能正常显示透明度的效果，我们可以定义一个透明度的class，因为一写就要写3条，省的每次都复制来复制去了。 具体代码如下： .transparent{ filter:alpha(opacity=60); /*支持 IE 浏览器*/ -moz-opacity:0.60; /*支持 FireFox 浏览器*/ opacity:0.60; /*支持 Chrome, Opera, Safari 等浏览器*/ }]]></description>
			<content:encoded><![CDATA[<p>几款浏览器对透明度的支持方式各不相同，为了保证在IE, Firefox, Chrome, Safari等主流浏览器下都能正常显示透明度的效果，我们可以定义一个透明度的class，因为一写就要写3条，省的每次都复制来复制去了。<br />
<strong>具体代码如下：</strong></p>
<pre name="code" class="css">
.transparent{
filter:alpha(opacity=60);  /*支持 IE 浏览器*/
-moz-opacity:0.60; /*支持 FireFox 浏览器*/
opacity:0.60;  /*支持 Chrome, Opera, Safari 等浏览器*/
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.steveluo.name/css-opacity-all-browsers-hack/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>使用jQuery清空file文件域的方法</title>
		<link>http://www.steveluo.name/jquery-clear-file-input-value/</link>
		<comments>http://www.steveluo.name/jquery-clear-file-input-value/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 04:53:37 +0000</pubDate>
		<dc:creator>Steve Luo</dc:creator>
				<category><![CDATA[前端技术]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[网站]]></category>
		<category><![CDATA[表单]]></category>

		<guid isPermaLink="false">http://www.steveluo.name/?p=204</guid>
		<description><![CDATA[一般来说，在对一个文件域(input type=&#8221;file&#8221;)使用了验证后，我们总会希望把文件域中的值给清空了（否则错误的文件仍然会被提交），而在IE中，安全设置的原因，是不允许更改文件域的值的（也就是不能使用val(&#8220;&#8221;)） 那么很显然，我们就只能换个思路，把这个input元素复制一个，然后将原来的删除。 在IE下复制元素的时候，其中的值是不会被复制的，所以就达到了清空文件域的目的了。 而在Firefox下，其中的值也会被一同复制，那么我们就顺便清空一下就做到兼容了。 代码如下： var file = $(":file"); file.after(file.clone().val("")); file.remove();]]></description>
			<content:encoded><![CDATA[<p>一般来说，在对一个文件域(input type=&#8221;file&#8221;)使用了验证后，我们总会希望把文件域中的值给清空了（否则错误的文件仍然会被提交），而在IE中，安全设置的原因，是不允许更改文件域的值的（也就是不能使用val(&#8220;&#8221;)）</p>
<p>那么很显然，我们就只能换个思路，把这个input元素复制一个，然后将原来的删除。<br />
在IE下复制元素的时候，其中的值是不会被复制的，所以就达到了清空文件域的目的了。<br />
而在Firefox下，其中的值也会被一同复制，那么我们就顺便清空一下就做到兼容了。<br />
代码如下：</p>
<pre name="code" class="javascript">
var file = $(":file");
file.after(file.clone().val(""));
file.remove();
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.steveluo.name/jquery-clear-file-input-value/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET 使用Request.Files获取上传文件的注意事项</title>
		<link>http://www.steveluo.name/asp-net-request-files-note/</link>
		<comments>http://www.steveluo.name/asp-net-request-files-note/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 13:50:59 +0000</pubDate>
		<dc:creator>Steve Luo</dc:creator>
				<category><![CDATA[知识库]]></category>
		<category><![CDATA[ASP.Net]]></category>
		<category><![CDATA[上传]]></category>
		<category><![CDATA[前端]]></category>
		<category><![CDATA[表单]]></category>

		<guid isPermaLink="false">http://www.steveluo.name/?p=198</guid>
		<description><![CDATA[今天在用ASP.NET实现图片上传功能时遇到一个小问题。 使用表单文件域（input type=&#8221;file&#8221;）时，在PostBack中使用Request.Files获取不到文件。研究了半天，发现在input标签中使用runat=&#8221;server&#8221;后，是能够正常获取的。但是为了前端的元素ID不被修改，我尽可能不使用runat=&#8221;server&#8221;。 网上查阅了一下，最终让我找到了原因。用了高级货之后，忘本了呵呵。 要让form能够传递文件的话，必须要在form标签中加入enctype=&#8221;multipart/form-data&#8221; &#60;form enctype="multipart/form-data" ID="form1" runat="server"&#62;       &#60;input type="file" name="filename" /&#62; &#60;/form&#62; 在input 中使用了runat=&#8221;server&#8221;，那么ASP.NET会自动处理这些事情，而如果我们要自己DIY，就得记住这些啦！]]></description>
			<content:encoded><![CDATA[<p>今天在用ASP.NET实现图片上传功能时遇到一个小问题。</p>
<p>使用表单文件域（input type=&#8221;file&#8221;）时，在PostBack中使用Request.Files获取不到文件。研究了半天，发现在input标签中使用runat=&#8221;server&#8221;后，是能够正常获取的。但是为了前端的元素ID不被修改，我尽可能不使用runat=&#8221;server&#8221;。</p>
<p>网上查阅了一下，最终让我找到了原因。用了高级货之后，忘本了呵呵。</p>
<p>要让form能够传递文件的话，必须要在form标签中加入enctype=&#8221;multipart/form-data&#8221;</p>
<pre>&lt;form enctype="multipart/form-data" ID="form1" runat="server"&gt;
      &lt;input type="file" name="filename" /&gt;
&lt;/form&gt;</pre>
<p>在input 中使用了runat=&#8221;server&#8221;，那么ASP.NET会自动处理这些事情，而如果我们要自己DIY，就得记住这些啦！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.steveluo.name/asp-net-request-files-note/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>IE6问题：html静态页正常而使用aspx后出现严重问题</title>
		<link>http://www.steveluo.name/ie6-bug-html-aspx-crash/</link>
		<comments>http://www.steveluo.name/ie6-bug-html-aspx-crash/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 17:55:11 +0000</pubDate>
		<dc:creator>Steve Luo</dc:creator>
				<category><![CDATA[知识库]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[编码]]></category>

		<guid isPermaLink="false">http://www.steveluo.name/?p=190</guid>
		<description><![CDATA[今天使用Visual Studio 2008制作前端页面的时候，将原先已经制作好的html页内容完完整整一字不差地复制到新建的Default.aspx后，用除了IE6的大部分浏览器（我测试了IE7/8，Firefox），均能够正常显示布局（我已经在静态页上进行了css hack），而唯独IE6特立独行，来了个大花脸。。囧 测试了各种可能性，最后我保证了aspx与html也输出完全一致（内容本来就一样，就是格式不同），不过仍然失败。 排除了各种可能，判断很有可能是VS在输出aspx的时候出现了问题。网上查阅了一下，发现果然如此。 原文： 要你原先做的html+css没有问题的话，改为aspx后，.net环境在编译后让html的编码格式改为了utf-8。而你的css文件没有进行相应的变更就会出现css失效的问题。 仔细检查css文件是否出现乱码，最简单的方法就是先将css文件中的中文注释删除掉。 or 在web.config文件中加入下面代码： &#60;globalization requestEncoding=&#8221;gb2312&#8243; responseEncoding=&#8221;gb2312&#8243;/&#62; 原文地址：http://blog.csdn.net/ytmf007/archive/2009/07/20/4363348.aspx   经过测试，在Web.Config中的&#60;system.web&#62;中加入以上代码，页面布局恢复正常。:lol 既然是编码问题，我检查了CSS，全都是ANSI编码，并且在其中混有中文注释(-_-)，罪魁祸首找到了。当然了，配置web.config是一劳永逸的方法，所以推荐使用此方法。 近日忙于求职，所以博客也很久没更新了。不过由于最近正在学习ASP.NET，所以还是有很多问题需要记录的。]]></description>
			<content:encoded><![CDATA[<p>今天使用Visual Studio 2008制作前端页面的时候，将原先已经制作好的html页内容完完整整一字不差地复制到新建的Default.aspx后，用除了IE6的大部分浏览器（我测试了IE7/8，Firefox），均能够正常显示布局（我已经在静态页上进行了css hack），而唯独IE6特立独行，来了个大花脸。。囧</p>
<p>测试了各种可能性，最后我保证了aspx与html也输出完全一致（内容本来就一样，就是格式不同），不过仍然失败。</p>
<p>排除了各种可能，判断很有可能是VS在输出aspx的时候出现了问题。网上查阅了一下，发现果然如此。<br />
<span id="more-190"></span></p>
<blockquote><p>原文：</p>
<p>要你原先做的html+css没有问题的话，改为aspx后，.net环境在编译后让html的编码格式改为了utf-8。而你的css文件没有进行相应的变更就会出现css失效的问题。</p>
<p>仔细检查css文件是否出现乱码，最简单的方法就是先将css文件中的中文注释删除掉。</p>
<p>or 在web.config文件中加入下面代码：</p>
<p>&lt;globalization requestEncoding=&#8221;gb2312&#8243; responseEncoding=&#8221;gb2312&#8243;/&gt;</p>
<p>原文地址：<a href="http://blog.csdn.net/ytmf007/archive/2009/07/20/4363348.aspx" target="_blank">http://blog.csdn.net/ytmf007/archive/2009/07/20/4363348.aspx</a></p>
<p> </p></blockquote>
<p>经过测试，在Web.Config中的&lt;system.web&gt;中加入以上代码，页面布局恢复正常。:lol</p>
<p>既然是编码问题，我检查了CSS，全都是ANSI编码，并且在其中混有中文注释(-_-)，罪魁祸首找到了。当然了，配置web.config是一劳永逸的方法，所以推荐使用此方法。</p>
<p>近日忙于求职，所以博客也很久没更新了。不过由于最近正在学习ASP.NET，所以还是有很多问题需要记录的。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.steveluo.name/ie6-bug-html-aspx-crash/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>CSS中伪类active/link/visited/hover的定义顺序</title>
		<link>http://www.steveluo.name/css-active-link-visited-hover-sequence/</link>
		<comments>http://www.steveluo.name/css-active-link-visited-hover-sequence/#comments</comments>
		<pubDate>Sun, 16 Aug 2009 15:53:40 +0000</pubDate>
		<dc:creator>Steve Luo</dc:creator>
				<category><![CDATA[知识库]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[网站]]></category>

		<guid isPermaLink="false">http://www.steveluo.name/?p=174</guid>
		<description><![CDATA[今天在修改一个tab样式的时候遇到一个问题，用了span:hover，想达到一个鼠标悬停效果。可是调试了半天，hover的效果就是不出现。 之前错误的书写顺序： span{display: block; width: 110px; height: 40px;} span:hover{background: 0 -40px;} span.button-1{background:url(../images/tabs/button_1.png);} 这样测试出来的结果跟我预期的不一样，我想在span.button-1定义背景图片，然后在鼠标经过时hover显示悬停效果。本应该是会移到背景的第40像素开始显示，可是仍然只显示原始图像。 经过多次测试，终于发现是由于伪类的书写顺序不正确造成的。网上查阅了一下资料，的确伪类有明确的书写顺序规定，如果错了的话就可能造成显示结果不正确。 后来分析一下我的CSS，发现可能是由于最后一行button-1的样式把hover的background又给覆盖了。于是把伪类放到最后，也就是必须将伪类写在本身选择器之后。问题解决。 虽然我的这个问题和伪类之间的顺序并不是很相关，但是这些伪类之间的顺序还是值得关注一下的，省的以后又出现同样的问题。 顺序如下： a:link a:visited a:hover a:active 总结一下就是LVHA，听说这个叫爱恨原则，LoVe/HAte，便于记忆吧呵呵。]]></description>
			<content:encoded><![CDATA[<p>今天在修改一个tab样式的时候遇到一个问题，用了span:hover，想达到一个鼠标悬停效果。可是调试了半天，hover的效果就是不出现。<br />
之前错误的书写顺序：</p>
<pre name="code" class="css">
span{display: block; width: 110px; height: 40px;}
span:hover{background: 0 -40px;}
span.button-1{background:url(../images/tabs/button_1.png);}
</pre>
<p>这样测试出来的结果跟我预期的不一样，我想在span.button-1定义背景图片，然后在鼠标经过时hover显示悬停效果。本应该是会移到背景的第40像素开始显示，可是仍然只显示原始图像。<br />
经过多次测试，终于发现是由于伪类的书写顺序不正确造成的。网上查阅了一下资料，的确伪类有明确的书写顺序规定，如果错了的话就可能造成显示结果不正确。<br />
后来分析一下我的CSS，发现可能是由于最后一行button-1的样式把hover的background又给覆盖了。于是把伪类放到最后，也就是<strong>必须将伪类写在本身选择器之后</strong>。问题解决。</p>
<p>虽然我的这个问题和伪类之间的顺序并不是很相关，但是这些伪类之间的顺序还是值得关注一下的，省的以后又出现同样的问题。<br />
顺序如下：</p>
<pre>
a:link
a:visited
a:hover
a:active
</pre>
<p>总结一下就是LVHA，听说这个叫爱恨原则，LoVe/HAte，便于记忆吧呵呵。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.steveluo.name/css-active-link-visited-hover-sequence/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>S60智能手机“短信息功能假死”漏洞及临时解决方案</title>
		<link>http://www.steveluo.name/s60-cell-phone-sms-hole/</link>
		<comments>http://www.steveluo.name/s60-cell-phone-sms-hole/#comments</comments>
		<pubDate>Fri, 27 Feb 2009 14:47:49 +0000</pubDate>
		<dc:creator>Steve Luo</dc:creator>
				<category><![CDATA[知识库]]></category>
		<category><![CDATA[N71]]></category>
		<category><![CDATA[手机]]></category>

		<guid isPermaLink="false">http://www.steveluo.name/?p=140</guid>
		<description><![CDATA[今天回家格式化了N71，记得上次N71 系统重装已经过了1年半了，现在也已经对手机各种各样的程序失去了兴趣，平时只要发发短信，上上QQ和飞信，再加个UCWeb就可以了。 今天在逛dospy的时候看到好多关于“S60智能手机短信息功能假死”的文章，基本上都是转来转去抄来抄去的，没有什么具体的原理也为了安全考虑没有公布攻击方法，不过这个对于搜索引擎主导地位的今天，只要被公开了总归能被搜到。 找到一篇文章：Nokia S60 SMS/MMS (Curse of Silence) Denial of Service Vulnerability 全部是英文的，应该也是转载国外的文章，不过写作很规范，让人一目了然。 大概就是说的S60部分版本的系统存在漏洞，如果一条短信息以电子邮件格式发送，并包含超过32个字符的email地址就会被锁死，无法接收新的短信。 我的N71是S60 3rd，我只知道是OS9.1，具体版本我也不高兴去了解了，所以是在受影响范围中。 试验了一下，果然是有效果的，N71上的具体表现为在接受到此类短信后，不会有正常的提示，直接弹出“WatcherMainThread&#8221;的错误提示，并且会不断提示。 因为已经作好了再一次“*#7370#“（软格的命令）的准备，所以放心大胆地做了试验。因为最后有工具可以清除和修复，所以根本不用担心。 下面是专杀工具，下载的时候看好自己是什么版本的系统。 CurseSMS    English (S60 Symbian 7/8): Download Now    English (S60 Symbian 9): Download Now 此漏洞危害面确实很广，如果有人吃饱了没事恶作剧差不多很多人都要受影响。以后我手机常备这个工具，以防不测。。]]></description>
			<content:encoded><![CDATA[<p>今天回家格式化了N71，记得上次<a href="http://www.steveluo.name/n71-re-install/" title="N71 系统重装">N71 系统重装</a>已经过了1年半了，现在也已经对手机各种各样的程序失去了兴趣，平时只要发发短信，上上QQ和飞信，再加个UCWeb就可以了。</p>
<p>今天在逛dospy的时候看到好多关于“S60智能手机短信息功能假死”的文章，基本上都是转来转去抄来抄去的，没有什么具体的原理也为了安全考虑没有公布攻击方法，不过这个对于搜索引擎主导地位的今天，只要被公开了总归能被搜到。</p>
<p>找到一篇文章：<a href="http://www.sebug.net/exploit/5509/" target="_blank">Nokia S60 SMS/MMS (Curse of Silence) Denial of Service Vulnerability</a></p>
<p>全部是英文的，应该也是转载国外的文章，不过写作很规范，让人一目了然。</p>
<p><strong>大概就是说的S60部分版本的系统存在漏洞，如果一条短信息以电子邮件格式发送，并包含超过32个字符的email地址就会被锁死，无法接收新的短信。</strong></p>
<p>我的N71是S60 3rd，我只知道是OS9.1，具体版本我也不高兴去了解了，所以是在受影响范围中。</p>
<p>试验了一下，果然是有效果的，<strong>N71上的具体表现为在接受到此类短信后，不会有正常的提示，直接弹出“WatcherMainThread&#8221;的错误提示，并且会不断提示。</strong></p>
<p>因为已经作好了再一次“*#7370#“（软格的命令）的准备，所以放心大胆地做了试验。因为最后有工具可以清除和修复，所以根本不用担心。</p>
<p>下面是<strong>专杀工具</strong>，下载的时候看好自己是什么版本的系统。</p>
<p><strong>CurseSMS</strong><br />
   English (S60 Symbian 7/8): <a href="http://www.fortiguardcenter.com/mobile/cleanup/FortiCleanUp_CurseSMS_103.sis">Download Now</a><br />
   English (S60 Symbian 9): <a href="http://www.fortiguardcenter.com/mobile/cleanup/FortiCleanup_CurseSMS_v_1_0_3_signed.sis">Download Now</a></p>
<p>此漏洞危害面确实很广，如果有人吃饱了没事恶作剧差不多很多人都要受影响。以后我手机常备这个工具，以防不测。。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.steveluo.name/s60-cell-phone-sms-hole/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>NOD32更新病毒库时提示“不明严重错误0&#215;00、一般编译器错误”等现象</title>
		<link>http://www.steveluo.name/eset-nod32-update-error/</link>
		<comments>http://www.steveluo.name/eset-nod32-update-error/#comments</comments>
		<pubDate>Sat, 07 Feb 2009 08:18:18 +0000</pubDate>
		<dc:creator>Steve Luo</dc:creator>
				<category><![CDATA[知识库]]></category>
		<category><![CDATA[Nod32]]></category>
		<category><![CDATA[服务器]]></category>

		<guid isPermaLink="false">http://www.steveluo.name/?p=139</guid>
		<description><![CDATA[服务器上的ESET NOD32 3.0 在更新病毒库如果出现提示：“不明严重错误0*101a、一般编译器错误、病毒库初始化失败、病毒库更新失败、无法升级、解压文件时出错”，在ESET官方找到了解决方法： 1、先打开NOD32的主界面，按键盘的F5键，进入高级设置窗口。 2、选择左边菜单中的“更新” →  右边的“清除更新高速缓存”。 3、重新启动计算机，再更新病毒库。记得一定要重启！       经本人亲自测试，成功～记得清除完了要重启计算机，否则还是报错的！]]></description>
			<content:encoded><![CDATA[<p>服务器上的ESET NOD32 3.0 在更新病毒库如果出现提示：“不明严重错误0*101a、一般编译器错误、病毒库初始化失败、<span style="font-size: 9pt; font-family: 宋体;">病毒库更新失败、无法升级、解压文件时出错</span>”，在<a title="ESET 中国" href="http://www.eset.com.cn" target="_blank">ESET</a>官方找到了解决方法：<br />
1、先打开NOD32的主界面，按键盘的F5键，进入高级设置窗口。<br />
2、选择左边菜单中的“更新” →  右边的“清除更新高速缓存”。<br />
3、重新启动计算机，再更新病毒库。记得一定要重启！<br />
      <img style="width: 432px; height: 310px;" src="http://www.eset.com.cn/faq_new/userfiles/clip_image002.jpg" alt="NOD" /></p>
<p><strong>经本人亲自测试，成功～记得清除完了要重启计算机，否则还是报错的！</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.steveluo.name/eset-nod32-update-error/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>URL Rewrite中包含中文出现乱码</title>
		<link>http://www.steveluo.name/url-rewrite-chinese-utf8/</link>
		<comments>http://www.steveluo.name/url-rewrite-chinese-utf8/#comments</comments>
		<pubDate>Sun, 21 Dec 2008 05:56:10 +0000</pubDate>
		<dc:creator>Steve Luo</dc:creator>
				<category><![CDATA[知识库]]></category>
		<category><![CDATA[URL]]></category>
		<category><![CDATA[网站]]></category>

		<guid isPermaLink="false">http://www.steveluo.name/?p=138</guid>
		<description><![CDATA[这次在网站的URL静态化中需要加入一个包含中文的参数，比如：/list-103.类别.html 中文部分就在类别处，由于我只是将URL中需要的部分用正则表达式提取出来然后Rewrite到响应的页面即可，所以不存在匹配中文这种稍微有点复杂的正则表达式。 不过这条规则使用以后，重写后显示的页面出现了问题，于是加了个echo显示传入的“类别”。 发现是乱码，然而如果我在浏览器中直接输入重写前的网址，中文是能够显示的，因此这里在URL中可能存在编码不统一的问题。 URL中其实也是有编码的，百度和谷歌识别出来的URL就是用了不同的编码，Google是UTF8的，而百度是GB2312的，所以对于那些URL中包含中文的朋友来说的确是挺痛苦的，鱼与熊掌不可兼得。 由于这次我使用的是GBK编码，所以URL应该也是属于GB2312的，然而经过资料查阅，发现不管是Apache还是ISAPI_Rewrite，URL均识别的是UTF8编码的，因此，这里就出现了乱码。 需要说的是，这里使用UNICODE过的URL也是没用的，因为编码不同，UNICODE出来的URL地址也是不同的，所以最终的解决办法，也只有是将网页转换成UTF8编码了。]]></description>
			<content:encoded><![CDATA[<p>这次在网站的URL静态化中需要加入一个包含中文的参数，比如：/list-103.类别.html</p>
<p>中文部分就在类别处，由于我只是将URL中需要的部分用正则表达式提取出来然后Rewrite到响应的页面即可，所以不存在匹配中文这种稍微有点复杂的正则表达式。</p>
<p>不过这条规则使用以后，重写后显示的页面出现了问题，于是加了个echo显示传入的“类别”。</p>
<p>发现是乱码，然而如果我在浏览器中直接输入重写前的网址，中文是能够显示的，因此这里在URL中可能存在编码不统一的问题。</p>
<p>URL中其实也是有编码的，百度和谷歌识别出来的URL就是用了不同的编码，Google是UTF8的，而百度是GB2312的，所以对于那些URL中包含中文的朋友来说的确是挺痛苦的，鱼与熊掌不可兼得。</p>
<p>由于这次我使用的是GBK编码，所以URL应该也是属于GB2312的，然而经过资料查阅，发现不管是Apache还是ISAPI_Rewrite，URL均识别的是UTF8编码的，因此，这里就出现了乱码。</p>
<p>需要说的是，这里使用UNICODE过的URL也是没用的，因为编码不同，UNICODE出来的URL地址也是不同的，所以最终的解决办法，也只有是将网页转换成UTF8编码了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.steveluo.name/url-rewrite-chinese-utf8/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>去除PHPCMS中默认Favicon的方法</title>
		<link>http://www.steveluo.name/remove-phpcms-default-favicon/</link>
		<comments>http://www.steveluo.name/remove-phpcms-default-favicon/#comments</comments>
		<pubDate>Fri, 19 Dec 2008 05:54:15 +0000</pubDate>
		<dc:creator>Steve Luo</dc:creator>
				<category><![CDATA[知识库]]></category>
		<category><![CDATA[PHPCMS]]></category>
		<category><![CDATA[浏览器]]></category>
		<category><![CDATA[网站]]></category>

		<guid isPermaLink="false">http://www.steveluo.name/?p=137</guid>
		<description><![CDATA[那天学院网站正式上线后，不少用傲游、世界之窗之类的同学和我说看到网站的Favicon仍然是PHPCMS的。 起初我以为是由于当初测试版网站运行时因使用过默认模板而将Favicon残留在缓存中了，让他们清空世界之窗或者傲游的Favicon缓存。 不过好像没有效果，当网站载入一遍之后又出现了PHPCMS 的默认Favicon。 于是我检查了好几遍网页的HTML代码，但是并没有发现定义网站Favicon的代码。 &#60;link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /&#62; 最后一个办法就是去找到这个.ico文件，然后删除咯～在网站根目录发现Favicon.ico，个人认为浏览器会默认读取网站根目录下的Favicon.ico来作为网站的favicon，这样是不用在HTML中定义的。]]></description>
			<content:encoded><![CDATA[<p>那天学院网站正式上线后，不少用傲游、世界之窗之类的同学和我说看到网站的Favicon仍然是PHPCMS的。<br />
起初我以为是由于当初测试版网站运行时因使用过默认模板而将Favicon残留在缓存中了，让他们清空世界之窗或者<a href="http://www.steveluo.name/fix-maxthon-favicon/" title="修正傲游中网站Favicon显示不正确的方法">傲游的Favicon缓存</a>。</p>
<p>不过好像没有效果，当网站载入一遍之后又出现了PHPCMS 的默认Favicon。</p>
<p>于是我检查了好几遍网页的HTML代码，但是并没有发现定义网站Favicon的代码。</p>
<pre>&lt;link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /&gt;</pre>
<p>最后一个办法就是去找到这个.ico文件，然后删除咯～在网站根目录发现Favicon.ico，个人认为浏览器会默认读取网站根目录下的Favicon.ico来作为网站的favicon，这样是不用在HTML中定义的。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.steveluo.name/remove-phpcms-default-favicon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用getElementById读取表单对象</title>
		<link>http://www.steveluo.name/get-form-ojbect-by-getelementbyid/</link>
		<comments>http://www.steveluo.name/get-form-ojbect-by-getelementbyid/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 21:17:33 +0000</pubDate>
		<dc:creator>Steve Luo</dc:creator>
				<category><![CDATA[知识库]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[网站]]></category>

		<guid isPermaLink="false">http://www.steveluo.name/?p=136</guid>
		<description><![CDATA[今天在制作一个登录表单验证的时候，遇到了一个非常令人恼火的问题。因为我需要登录到别人做好的系统中，因此表单中的各个对象（包括input文本以及一个隐藏input）都必须按照原有的名称来做。这样就出现问题了。 也许是我不了解.Net，不知道为什么表单中input的name都是带有冒号的。。。比如：Login1:tbName 这个名称很明显，一放到javascript中就不好使了，我alert一下都不行哎。。。人家根本不认冒号的嘛 alert(document.myform.Login1:tbName.value); 去掉冒号一切正常，所以断定就是冒号的问题。谷歌一下（最近开始慢慢不用百度了），搜form冒号，出来的基本上都是冒号的作用什么的，貌似没有人遇到过我这样的问题。。。 于是就得想其他办法来读取这个input文本的value了。正好看到一段代码中有用getElementById的，于是就尝试了一下。由于我基本属于没有学过javascript的，所以平时都只是看看改改别人的代码，只懂得些皮毛。所以要用语句都得去查查手册什么的～ 网上找到一些比较有用的方法： document.getElementById("link").href; document.getElementById("link").target; document.getElementById("img").src; document.getElementById("img").width; document.getElementById("img").height; document.getElementById("input").value; document.getElementById("div").innerHTML; 这里也可以读取input的value，不过是通过id来获取的，所以这样就不会影响到表单数据的传递，而达到我对表单验证的目的了。]]></description>
			<content:encoded><![CDATA[<p>今天在制作一个登录表单验证的时候，遇到了一个非常令人恼火的问题。因为我需要登录到别人做好的系统中，因此表单中的各个对象（包括input文本以及一个隐藏input）都必须按照原有的名称来做。这样就出现问题了。</p>
<p>也许是我不了解.Net，不知道为什么表单中input的name都是带有冒号的。。。比如：Login1:tbName</p>
<p>这个名称很明显，一放到javascript中就不好使了，我alert一下都不行哎。。。人家根本不认冒号的嘛</p>
<pre>alert(document.myform.Login1:tbName.value);</pre>
<p>去掉冒号一切正常，所以断定就是冒号的问题。谷歌一下（最近开始慢慢不用百度了），搜form冒号，出来的基本上都是冒号的作用什么的，貌似没有人遇到过我这样的问题。。。</p>
<p>于是就得想其他办法来读取这个input文本的value了。正好看到一段代码中有用getElementById的，于是就尝试了一下。由于我基本属于没有学过javascript的，所以平时都只是看看改改别人的代码，只懂得些皮毛。所以要用语句都得去查查手册什么的～</p>
<p>网上找到一些比较有用的方法：</p>
<pre>document.getElementById("link").href;
document.getElementById("link").target;
document.getElementById("img").src;
document.getElementById("img").width;
document.getElementById("img").height;
document.getElementById("input").value;
document.getElementById("div").innerHTML;</pre>
<p>这里也可以读取input的value，不过是通过id来获取的，所以这样就不会影响到表单数据的传递，而达到我对表单验证的目的了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.steveluo.name/get-form-ojbect-by-getelementbyid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP中使用正则表达式</title>
		<link>http://www.steveluo.name/asp-regular-expression/</link>
		<comments>http://www.steveluo.name/asp-regular-expression/#comments</comments>
		<pubDate>Sat, 23 Aug 2008 15:40:06 +0000</pubDate>
		<dc:creator>Steve Luo</dc:creator>
				<category><![CDATA[知识库]]></category>
		<category><![CDATA[ASP]]></category>
		<category><![CDATA[正则表达式]]></category>

		<guid isPermaLink="false">http://www.steveluo.name/?p=125</guid>
		<description><![CDATA[近日在开发一套ASP系统，其中有一个功能就是在顶部导航中，自动判断是否为当前页，（也就是给链接加上个class=&#8221;current&#8221;，应该了解DIV+CSS的都知道吧），如果是的话标签就显示为亮起。当然，我用ASP来实现的这些功能。对于正则表达式的学习，建议去看一下《正则表达式30分钟入门教程》 为了尽可能少地修改每个页面，在导航的页面中每个&#60;a&#62;标签中都插入了一个ASP的数组，并对每个链接进行了编号，然后每次打开页面时，对URL进行判断，然后在符合条件的数组元素中赋予&#8221;class=current&#8221;的值，这样就达到目的了。 说起来简单，但是URL判断的时候还是要动点脑筋的，最近URL重写用得比较多，因此对正则表达式略有了解，于是就想到了在这里用正则表达式来匹配出我想要的部分。 使用Request.ServerVariables(&#8220;URL&#8221;)所返回的URL形式为：/dir/file.ext 我将每个版块的文件放在了不同的文件夹中，因此，我只要对/dir/进行判断就能分别显示不同的标签了。 下面给出我写的代码，主要就是想说一下ASP中正则表达式的用法。 Dim Reg, Str   Set Reg = New RegExp '建立正则表达式对象   Reg.Pattern = "/((.*)+)/" '设置正则表达式   Reg.Global = True '是否全局匹配，也就是匹配一次还是匹配多次   Reg.IgnoreCase = True '忽略大小写   Set Str = Reg.Execute(rURL) '进行匹配查找   If Str.Count &#62; 0 Then 'Str.Count 表示找到的匹配次数    URL = Str(0) '数组中就是找到的匹配文本了   End If 下面这段是我在网上找到的，对于我在开发过程中有很大的帮助： 集合对象(Matches)的使用： Set Matches=regEx.Execute(str) ‘对str进行搜索,返回匹配到的Matches集合 属性： Matches.Count ‘匹配到的个数 Matches.Item(i) [...]]]></description>
			<content:encoded><![CDATA[<p>近日在开发一套ASP系统，其中有一个功能就是在顶部导航中，自动判断是否为当前页，（也就是给链接加上个class=&#8221;current&#8221;，应该了解DIV+CSS的都知道吧），如果是的话标签就显示为亮起。当然，我用ASP来实现的这些功能。对于正则表达式的学习，建议去看一下《<a href="http://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm" target="_blank">正则表达式30分钟入门教程</a>》</p>
<p>为了尽可能少地修改每个页面，在导航的页面中每个&lt;a&gt;标签中都插入了一个ASP的数组，并对每个链接进行了编号，然后每次打开页面时，对URL进行判断，然后在符合条件的数组元素中赋予&#8221;class=current&#8221;的值，这样就达到目的了。</p>
<p>说起来简单，但是URL判断的时候还是要动点脑筋的，最近<a href="http://www.steveluo.name/tag/url-rewrite">URL重写</a>用得比较多，因此对正则表达式略有了解，于是就想到了在这里用正则表达式来匹配出我想要的部分。<br />
<span id="more-125"></span><br />
使用Request.ServerVariables(&#8220;URL&#8221;)所返回的URL形式为：/dir/file.ext<br />
我将每个版块的文件放在了不同的文件夹中，因此，我只要对/dir/进行判断就能分别显示不同的标签了。</p>
<p>下面给出我写的代码，主要就是想说一下ASP中正则表达式的用法。</p>
<pre>Dim Reg, Str
  Set Reg = New RegExp   '建立正则表达式对象
  Reg.Pattern = "/((.*)+)/"   '设置正则表达式
  Reg.Global = True   '是否全局匹配，也就是匹配一次还是匹配多次
  Reg.IgnoreCase = True   '忽略大小写
  Set Str = Reg.Execute(rURL)   '进行匹配查找
  If Str.Count &gt; 0 Then   'Str.Count 表示找到的匹配次数
   URL = Str(0)   '数组中就是找到的匹配文本了
  End If</pre>
<p>下面这段是我在网上找到的，对于我在开发过程中有很大的帮助：</p>
<blockquote><p>集合对象(Matches)的使用：<br />
Set Matches=regEx.Execute(str) ‘对str进行搜索,返回匹配到的Matches集合<br />
属性：<br />
Matches.Count ‘匹配到的个数<br />
Matches.Item(i) ‘第i个匹配到的字符串<br />
注意:Matches.Item(i)=Matches(i).Value=Matches(i)</p>
<p>引用自：<a href="http://hi.baidu.com/wfyeshi/blog/item/d5dce410334536ffc3ce79d7.html" target="_blank">http://hi.baidu.com/wfyeshi/blog/item/d5dce410334536ffc3ce79d7.html</a></p></blockquote>
<p>这些对匹配后的结果处理上有帮助。</p>
<p>用这段代码，可以将/dir/file.ext中的/dir/给匹配出来，然后只要在后面用一个数组来进行匹配就能实现我的当前页面标签亮起的功能了，这个是我自己想的方法呵呵，不知道网上是不是有更好的方法呢。当然上面举的那段代码仅仅是最简单的实现匹配而已，后面的结果处理就自己发挥的了，还要考虑到多层目录以及根目录的情况，这里就不给出实例说明了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.steveluo.name/asp-regular-expression/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IIS无响应问题终于解决</title>
		<link>http://www.steveluo.name/iis-problem-solved/</link>
		<comments>http://www.steveluo.name/iis-problem-solved/#comments</comments>
		<pubDate>Wed, 20 Aug 2008 09:10:42 +0000</pubDate>
		<dc:creator>Steve Luo</dc:creator>
				<category><![CDATA[知识库]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[服务器]]></category>

		<guid isPermaLink="false">http://www.steveluo.name/?p=123</guid>
		<description><![CDATA[IIS无响应这个问题到现在终于解决了，具体问题在上次的使用星外虚拟主机管理系统进行重建用户一文中已经详细描述。 对IIS站点进行操作（停止、启动、暂停）时，出现错误：服务器没有及时响应启动或控制请求 对IIS进行的参数修改均无法及时生效，需要重启IIS才生效。 由于上次在重新安装了IIS以后并未彻底解决这个问题，仍然会出现IIS无响应，因此，这次决定重新再彻底清理一遍。 还是老样子把IIS卸载了重新安装，这次把星外的主控端被控端也统统卸载了再安装。并且把启用磁盘配额的那个硬盘分区也格式化了一下（当然用户数据是备份到其他盘的），格式化以后把原先的一些乱七八糟的磁盘配额项残留都给清除了（因为直接删除配额项好像有点问题，所以选择了格式化）。 然后按照步骤一步一步安装好星外主控端被控端以及IIS，一切看起来就是全新的了，然后恢复所有用户站点。接着配置一切自己手动配置的东西。结果还是有问题～郁闷 这下如果实在不行我就得去机房格式化系统了，不过不甘心啊，于是开始一步一步排查，想到了安全模式的思想，就是不加载任何东西，也不设置什么，直接用默认的配置。 果然有效，说明是我自己手动加载的一些东西起了冲突，最后找到问题所在！ 原来是ISAPI中加载的wp-url-rewriting.dll，注意了，这个并不是我上次推荐的WordPress URL Rewrite，而是上星期在网上看到的一个国人开发的URL Rewriting for WordPress，因为这个ISAPI组件我还在自己测试中，所以并未及时推荐。 这个ISAPI可能与星外主控端存在冲突，在不加载后，目前测试下来仍然是正常的，所以应该就是这个问题了。于是换成老外的那个。这个那么微小的问题，害得我重装了2遍IIS，不过也好，第二次把服务器都给清理了一下～]]></description>
			<content:encoded><![CDATA[<p>IIS无响应这个问题到现在终于解决了，具体问题在上次的<a href="http://www.steveluo.name/reinstall-iis-freehost-rebuild-userhost/" title="使用星外虚拟主机管理系统进行重建用户">使用星外虚拟主机管理系统进行重建用户</a>一文中已经详细描述。</p>
<p>对IIS站点进行操作（停止、启动、暂停）时，出现错误：服务器没有及时响应启动或控制请求<br />
对IIS进行的参数修改均无法及时生效，需要重启IIS才生效。</p>
<p>由于上次在重新安装了IIS以后并未彻底解决这个问题，仍然会出现IIS无响应，因此，这次决定重新再彻底清理一遍。</p>
<p>还是老样子把IIS卸载了重新安装，这次把星外的主控端被控端也统统卸载了再安装。并且把启用磁盘配额的那个硬盘分区也格式化了一下（当然用户数据是备份到其他盘的），格式化以后把原先的一些乱七八糟的磁盘配额项残留都给清除了（因为直接删除配额项好像有点问题，所以选择了格式化）。</p>
<p>然后按照步骤一步一步安装好星外主控端被控端以及IIS，一切看起来就是全新的了，然后恢复所有用户站点。接着配置一切自己手动配置的东西。结果还是有问题～郁闷</p>
<p><span id="more-123"></span></p>
<p>这下如果实在不行我就得去机房格式化系统了，不过不甘心啊，于是开始一步一步排查，想到了安全模式的思想，就是不加载任何东西，也不设置什么，直接用默认的配置。</p>
<p>果然有效，说明是我自己手动加载的一些东西起了冲突，最后找到<strong>问题所在！</strong></p>
<p>原来是ISAPI中加载的wp-url-rewriting.dll，注意了，这个并不是我上次推荐的<a href="http://www.steveluo.name/wordpress-url-rewrite-isapi_rewrite/" title="WordPress URL Rewrite | WP URL 重写组件">WordPress URL Rewrite</a>，而是上星期在网上看到的一个国人开发的<a href="http://www.steveluo.name/another-url-rewrite-for-wordress-iis/" title="IIS下的WordPress URL重写组件:URL Rewriting for WordPress">URL Rewriting for WordPress</a>，因为这个ISAPI组件我还在自己测试中，所以并未及时推荐。</p>
<p>这个ISAPI可能与星外主控端存在冲突，在不加载后，目前测试下来仍然是正常的，所以应该就是这个问题了。于是换成老外的那个。这个那么微小的问题，害得我重装了2遍IIS，不过也好，第二次把服务器都给清理了一下～</p>
]]></content:encoded>
			<wfw:commentRss>http://www.steveluo.name/iis-problem-solved/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>使用星外虚拟主机管理系统进行重建用户</title>
		<link>http://www.steveluo.name/reinstall-iis-freehost-rebuild-userhost/</link>
		<comments>http://www.steveluo.name/reinstall-iis-freehost-rebuild-userhost/#comments</comments>
		<pubDate>Mon, 18 Aug 2008 21:00:09 +0000</pubDate>
		<dc:creator>Steve Luo</dc:creator>
				<category><![CDATA[知识库]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[服务器]]></category>

		<guid isPermaLink="false">http://www.steveluo.name/?p=121</guid>
		<description><![CDATA[实在忍无可忍，不知道什么原因，IIS经常出现无响应，具体症状就是对站点进行停止或启动等操作时，长时间无响应，最后提示： 出现错误：服务器没有及时响应启动或控制请求 问了星外的客服，他们给我的答案就是，可能你的IIS有问题或者系统有问题，叫我检查一遍磁盘～检查完了无明显改善。也不能怪人家，是你的服务器出的疑难杂症，人家只能给出建议嘛，我还是可以理解的，大家都是搞技术的～ 一直在查这个问题，由于从原来的依然主机管理系统转换到现在的星外虚拟主机管理系统，首先怀疑可能是由于数据残留造成的错误。有一些应用程序池存在错误，虽然是停止的，不过不能删除。DefaultAppPool池应用程序列表显示“&#60;站点 #1&#62;。。。“根本没有这个站点，已经混乱了～我想这个问题应该很少有人碰到，我也无法删除这个错误的应用程序池，因此还是只能选择重装IIS了。 重装了一下IIS，彻底清理一下。由于更换成了星外虚拟主机管理系统，知识库相当庞大，也想得很周到，基本上你能提出来的问题都已经有了。根据《重新安装2003操作系统的注意事项》（在星外的正版知识库中，需要登录，所以就不给链接了），安装好主控端和受控端后，在管理区中进行用户重建。 第一次重建的时候出现了错误，因为我并不是重装整个系统，因此系统中的用户仍然存在，因此先把原有的用户删除。然后再次开始重建，这次重建花了相当长的时间，可能5－10分钟，因为我只有19个站点，15个用户，所以还是比较快的。随后就是重新分配权限，重新磁盘配额之类的，反正全自动的（星外NB）。 有些是自己配置的东西就需要重新配置一下，不过也不复杂，主要就是Blog的虚拟目录以及WordPress URL Rewrite以及ISAPI_Rewrite的加载。 这里不得不称赞星外虚拟主机管理系统的强大恢复能力，这点他们做得非常好，用户不用担心是否会有站点配置错误或者数据丢失之类的，完全傻瓜式的，怪不得人家说“买星外不后悔”（我不是星外的托，我是客户，这是我真实感受，虽然界面粗糙了点，但是从功能上来说还是很强大的！界面粗糙我不担心，因为界面这东西是活的，做这行的人都会改。） 半夜里施工。。。就是怕扰民（服务器维护就是得夜深人静的时候） 不过，最后问题仍然存在还是没有解决。在后来的一次修复过程中，我找到了问题所在。请看IIS无响应问题终于解决]]></description>
			<content:encoded><![CDATA[<p>实在忍无可忍，不知道什么原因，IIS经常出现无响应，具体症状就是对站点进行停止或启动等操作时，长时间无响应，最后提示：</p>
<pre>出现错误：服务器没有及时响应启动或控制请求</pre>
<p>问了星外的客服，他们给我的答案就是，可能你的IIS有问题或者系统有问题，叫我检查一遍磁盘～检查完了无明显改善。也不能怪人家，是你的服务器出的疑难杂症，人家只能给出建议嘛，我还是可以理解的，大家都是搞技术的～</p>
<p>一直在查这个问题，由于从原来的<a href="http://www.yiran.com" target="_blank">依然主机管理系统</a>转换到现在的星外虚拟主机管理系统，首先怀疑可能是由于数据残留造成的错误。有一些应用程序池存在错误，虽然是停止的，不过不能删除。DefaultAppPool池应用程序列表显示“&lt;站点 #1&gt;。。。“根本没有这个站点，已经混乱了～我想这个问题应该很少有人碰到，我也无法删除这个错误的应用程序池，因此还是只能选择重装IIS了。<br />
<span id="more-121"></span><br />
重装了一下IIS，彻底清理一下。由于更换成了星外虚拟主机管理系统，知识库相当庞大，也想得很周到，基本上你能提出来的问题都已经有了。根据《重新安装2003操作系统的注意事项》（在星外的正版知识库中，需要登录，所以就不给链接了），安装好主控端和受控端后，在管理区中进行用户重建。</p>
<p>第一次重建的时候出现了错误，因为我并不是重装整个系统，因此系统中的用户仍然存在，因此先把原有的用户删除。然后再次开始重建，这次重建花了相当长的时间，可能5－10分钟，因为我只有19个站点，15个用户，所以还是比较快的。随后就是重新分配权限，重新磁盘配额之类的，反正全自动的（星外NB）。</p>
<p>有些是自己配置的东西就需要重新配置一下，不过也不复杂，主要就是Blog的虚拟目录以及<a href="http://www.steveluo.name/wordpress-url-rewrite-isapi_rewrite/" title="WordPress URL Rewrite | WP URL 重写组件">WordPress URL Rewrite</a>以及ISAPI_Rewrite的加载。</p>
<p>这里不得不称赞星外虚拟主机管理系统的强大恢复能力，这点他们做得非常好，用户不用担心是否会有站点配置错误或者数据丢失之类的，完全傻瓜式的，怪不得人家说“买星外不后悔”（我不是星外的托，我是客户，这是我真实感受，虽然界面粗糙了点，但是从功能上来说还是很强大的！界面粗糙我不担心，因为界面这东西是活的，做这行的人都会改。）</p>
<p>半夜里施工。。。就是怕扰民（服务器维护就是得夜深人静的时候）</p>
<p>不过，最后问题仍然存在还是没有解决。在后来的一次修复过程中，我找到了问题所在。请看<a href="http://www.steveluo.name/iis-problem-solved/" title="IIS无响应问题终于解决">IIS无响应问题终于解决</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.steveluo.name/reinstall-iis-freehost-rebuild-userhost/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>WinWebMail:Web站点打开提示“超时，请重试”解决方法</title>
		<link>http://www.steveluo.name/winwebmail-web-timeout/</link>
		<comments>http://www.steveluo.name/winwebmail-web-timeout/#comments</comments>
		<pubDate>Sat, 16 Aug 2008 17:59:00 +0000</pubDate>
		<dc:creator>Steve Luo</dc:creator>
				<category><![CDATA[知识库]]></category>
		<category><![CDATA[服务器]]></category>
		<category><![CDATA[网站]]></category>

		<guid isPermaLink="false">http://www.steveluo.name/?p=122</guid>
		<description><![CDATA[今天在调试服务器IIS的时候，突然发现WinWebMail的Web站点打开相当慢，最后提示“超时，请重试”的错误。 网上查找了一下解决方法，有官方给出的方法，但是明显不对路，不知所云。。 也找到了给/windows/system32/drivers/目录权限的解决方法，不过同样不适用，因为本来是好的，突然就不好了，怎么可能会是权限问题呢？又没人动过。 最后自己动手丰衣足食啊。。打开了WinWebMail的服务端界面，发现红色大叉，于是遍找到了原因：WinWebMail的服务端没有启动！ 到服务里检查，发现启动时提示“错误1069：由于登录失败而无法启动服务。” 一检查原来是服务启动帐号出了问题，因为那天把这个没用的帐号给删除了～在登录中设置为本地系统帐户，启动成功～没有了超时错误了]]></description>
			<content:encoded><![CDATA[<p>今天在调试服务器IIS的时候，突然发现<a href="http://www.winwebmail.com"  class="alinks_links" onclick="return alinks_click(this);" title="&#22269;&#20869;&#24191;&#27867;&#20351;&#29992;&#30340;WinWebMail&#37038;&#20214;&#31995;&#32479;"  style="padding-right: 13px; background: url(http://www.steveluo.name/wp-content/plugins/alinks/images/external.png) center right no-repeat;" rel="external">WinWebMail</a>的Web站点打开相当慢，最后提示“<strong>超时，请重试</strong>”的错误。</p>
<p>网上查找了一下解决方法，<a href="http://www.winwebmail.com/faq.html#timeout" target="_blank">有官方给出的方法</a>，但是明显不对路，不知所云。。</p>
<p>也找到了给/windows/system32/drivers/目录权限的解决方法，不过同样不适用，因为本来是好的，突然就不好了，怎么可能会是权限问题呢？又没人动过。</p>
<p>最后自己动手丰衣足食啊。。打开了WinWebMail的服务端界面，发现红色大叉，于是遍找到了原因：<strong>WinWebMail的服务端没有启动</strong>！</p>
<p>到服务里检查，发现启动时提示“<strong>错误1069：由于登录失败而无法启动服务。</strong>”</p>
<p>一检查原来是服务启动帐号出了问题，因为那天把这个没用的帐号给删除了～在登录中设置为<strong>本地系统帐户</strong>，启动成功～没有了超时错误了</p>
]]></content:encoded>
			<wfw:commentRss>http://www.steveluo.name/winwebmail-web-timeout/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>博客URL地址形式大调整</title>
		<link>http://www.steveluo.name/blog-url-great-change/</link>
		<comments>http://www.steveluo.name/blog-url-great-change/#comments</comments>
		<pubDate>Mon, 11 Aug 2008 17:33:57 +0000</pubDate>
		<dc:creator>Steve Luo</dc:creator>
				<category><![CDATA[知识库]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[URL]]></category>

		<guid isPermaLink="false">http://www.steveluo.name/?p=116</guid>
		<description><![CDATA[用Wordpress搭建这个博客也已经1年了，当时还不懂什么SEO，也没有想过让博客带来些流量。因此，在当初并没有把URL地址形式看得有多重要，网上随便找了个别人的ISAPI_Rewrite的URL重写规则（Rewrite Rule），然后就开始用了。当时的地址形式是很长的呵呵，比如：/html/2008/08/08/olmpic-in-beijing.html 今年暑假开始学习SEO的基础知识，逐渐认识到一个简短的URL地址形式对于搜索引擎来说会更友好些。因此，开始逐渐调整。 由于改变网站的URL结构对于搜索引擎来说是相当不友好的，因为他们不喜欢一个经常变动的网站（这里的变动指的是网站结构，而不是不更新网站内容）。于是，我在更改地址的时候采用了301重定向，这对于搜索引擎是友好的，也就是你告诉了搜索引擎这个页面已经更改，以后指向新的页面。 因为原先问了下高手，说URL地址形式尽量简洁，不要出现不必要的目录，比如/html/这个就是多余的，完全没有必要。（也不知道当时哪里看来的说看起来舒服点全放html目录里。。靠。。）因此，第一次调整去掉了/html/这层目录，保留了后面的年月日，也去掉了最后的.html，按照我的理解就是目录有可能会比页面有更高的权重（个人猜测呵呵）。 不过今天又看了篇文章说目录尽量少点，于是年月日看起来也是多余的了。。。最后只剩下了以文章的slug作为第一层目录，超级简洁～这个URL地址形式我看到好多高手的博客都是这样的，原来用ISAPI_Rewrite自己写规则，总是有点问题，现在用了WordPress URL Rewrite以后完全不用担心这个了，人家全自动的～ 最后要说的也是最重要的就是如何做301啦，我只举几个例子，因为都是可以举一反三的东西，而且基本都没有难度（因为连我这样的都能自己写出来^_^）。关于301转向的详细内容可以看下《利用 ISAPI Rewrite 做301永久转向》，同样也是我写的～ # 这条用来去除/html/以及最后的.html RewriteRule /html/(.*).html?$ /$1 [I,RP] # 这条用来去除/html/ RewriteRule /html/(.*)?$ /$1 [I,RP] # 这条用来去除.html RewriteRule /(.*).html?$ /$1 [I,RP] #这条用来去除/年/月/日/ RewriteRule /([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/(.*)?$ /$4 [I,RP] 因为我更改了好几次URL地址形式，所以每更改一下就写条URL重写规则，你完全可以把3条合并起来用。 注释：最后的[I,RP]表示忽略大小写以及301重定向。 顺便说一下就是最近天天观察流量统计，发现每天流量稳定在15－20之间，而且每天都有固定的几个关键字从搜索引擎带来流量( *^_^* )，说明我的文章写得好～玩笑～这些带来流量的文章在搜索引擎全是第一页的HOHO，特别是Vista修改Hosts或Lmhosts文件的方法这篇文章，每天至少有3个IP是从这里来的，而且在Google和百度的排名都在前三～ 嗯，再接再厉~]]></description>
			<content:encoded><![CDATA[<p>用Wordpress搭建这个博客也已经1年了，当时还不懂什么SEO，也没有想过让博客带来些流量。因此，在当初并没有把URL地址形式看得有多重要，网上随便找了个别人的ISAPI_Rewrite的URL重写规则（Rewrite Rule），然后就开始用了。当时的地址形式是很长的呵呵，比如：/html/2008/08/08/olmpic-in-beijing.html</p>
<p>今年暑假开始学习SEO的基础知识，逐渐认识到一个简短的URL地址形式对于搜索引擎来说会更友好些。因此，开始逐渐调整。</p>
<p>由于改变网站的URL结构对于搜索引擎来说是相当不友好的，因为他们不喜欢一个经常变动的网站（这里的变动指的是网站结构，而不是不更新网站内容）。于是，我在更改地址的时候采用了301重定向，这对于搜索引擎是友好的，也就是你告诉了搜索引擎这个页面已经更改，以后指向新的页面。<br />
<span id="more-116"></span><br />
因为原先问了下高手，说URL地址形式尽量简洁，不要出现不必要的目录，比如/html/这个就是多余的，完全没有必要。（也不知道当时哪里看来的说看起来舒服点全放html目录里。。靠。。）因此，第一次调整去掉了/html/这层目录，保留了后面的年月日，也去掉了最后的.html，按照我的理解就是目录有可能会比页面有更高的权重（个人猜测呵呵）。</p>
<p>不过今天又看了篇文章说目录尽量少点，于是年月日看起来也是多余的了。。。最后只剩下了以文章的slug作为第一层目录，超级简洁～这个URL地址形式我看到好多高手的博客都是这样的，原来用ISAPI_Rewrite自己写规则，总是有点问题，现在用了<a href="http://www.steveluo.name/wordpress-url-rewrite-isapi_rewrite/" title="WordPress URL Rewrite | WP URL 重写组件">WordPress URL Rewrite</a>以后完全不用担心这个了，人家全自动的～</p>
<p>最后要说的也是最重要的就是如何做301啦，我只举几个例子，因为都是可以举一反三的东西，而且基本都没有难度（因为连我这样的都能自己写出来^_^）。关于301转向的详细内容可以看下《<a title="华麟志：利用 ISAPI Rewrite 做301永久转向" href="http://www.hua-lin.net/blog/isapi-rewrite-301-move-permanently-redirect-42" target="_blank">利用 ISAPI Rewrite 做301永久转向</a>》，同样也是我写的～</p>
<pre># 这条用来去除/html/以及最后的.html
RewriteRule /html/(.*).html?$ /$1 [I,RP]
# 这条用来去除/html/
RewriteRule /html/(.*)?$ /$1 [I,RP]
# 这条用来去除.html
RewriteRule /(.*).html?$ /$1 [I,RP]
#这条用来去除/年/月/日/
RewriteRule /([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/(.*)?$ /$4 [I,RP]</pre>
<p>因为我更改了好几次URL地址形式，所以每更改一下就写条URL重写规则，你完全可以把3条合并起来用。</p>
<p>注释：最后的[I,RP]表示忽略大小写以及301重定向。</p>
<p>顺便说一下就是最近天天观察流量统计，发现每天流量稳定在15－20之间，而且每天都有固定的几个关键字从搜索引擎带来流量( *^_^* )，说明我的文章写得好～玩笑～这些带来流量的文章在搜索引擎全是第一页的HOHO，特别是<a href="http://www.steveluo.name/edit-hosts-file-vista/" title="Vista修改Hosts或Lmhosts文件的方法">Vista修改Hosts或Lmhosts文件的方法</a>这篇文章，每天至少有3个IP是从这里来的，而且在Google和百度的排名都在前三～</p>
<p>嗯，再接再厉~</p>
]]></content:encoded>
			<wfw:commentRss>http://www.steveluo.name/blog-url-great-change/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>ISAPI_Rewrite 2.9 Full 破解版问题</title>
		<link>http://www.steveluo.name/isapi_rewrite-29-full-crack-problem/</link>
		<comments>http://www.steveluo.name/isapi_rewrite-29-full-crack-problem/#comments</comments>
		<pubDate>Sun, 10 Aug 2008 19:11:01 +0000</pubDate>
		<dc:creator>Steve Luo</dc:creator>
				<category><![CDATA[知识库]]></category>
		<category><![CDATA[URL]]></category>
		<category><![CDATA[服务器]]></category>
		<category><![CDATA[网站]]></category>

		<guid isPermaLink="false">http://www.steveluo.name/?p=115</guid>
		<description><![CDATA[为了能给华麟创想的网站空间更多的卖点，于是就安装了ISAPI_Rewrite 2.9完全版。 完全版(Full)与简化版(Lite)的最大的区别在于可以让每个站点自定义URL重写规则（Rewrite Rule），也就是只要将写好的httpd.ini放在站点根目录，就能使用了。 大多数空间商使用的是简化版（Lite），设置了统一的规则，如果你需要设置自己的比较独特的规则，需要联系客服在全局配置中为你添加规则，然而，这个有可能会与别人的规则冲突（你规则写得不完善的话），并且规则数量较多的话，肯定是影响网站空间性能的。 选用简化版的最主要的原因就是因为是免费的，配置也简单。 下面进入正题：网上虽然有ISAPI_Rewrite 2.9 Full 完全版 的破解版本，但是也不知道这个破解版本是谁发布的，因为他根本就是掩耳盗铃。仅仅把ISRWConfig.exe进行了修改，因此你只要任意属于序列号都能注册成功。 不过经过我的使用情况来看，这个破解是无效的，你只要打开事务管理器查看日志，就会发现许多ISAPI_Rewrite发出的错误信息：Your trial license has expired. 在你未重启IIS前，ISAPI_Rewrite还是可以用的，而如果你重启了IIS以后，URL重写的功能就完全失效了。 虽然破解版的ISRWConfig.exe中显示This product is registered to&#8230;，实际上这个是假的，只是掩耳盗铃而已。根据我的观察，我认为主要的验证还是通过ISAPI_Rewrite.dll，ISRWConfig.exe的作用仅仅是一个配置工具而已，可以让你输入序列号，以及设置一些参数。而当你输入了序列号以后，就会生成一个ISAPI_Rewrite.lic，将你的用户名以及序列号保存在里面，然后每次调用ISAPI_Rewrite.dll时，就会去验证这个序列号。 由此可见，网上所谓的破解版，根本都是无效的。所以，最实际的办法还是找个正版的序列号～]]></description>
			<content:encoded><![CDATA[<p>为了能给华麟创想的网站空间更多的卖点，于是就安装了ISAPI_Rewrite 2.9完全版。</p>
<p>完全版(Full)与简化版(Lite)的最大的区别在于可以让每个站点自定义URL重写规则（Rewrite Rule），也就是只要将写好的httpd.ini放在站点根目录，就能使用了。</p>
<p>大多数空间商使用的是简化版（Lite），设置了统一的规则，如果你需要设置自己的比较独特的规则，需要联系客服在全局配置中为你添加规则，然而，这个有可能会与别人的规则冲突（你规则写得不完善的话），并且规则数量较多的话，肯定是影响网站空间性能的。</p>
<p>选用简化版的最主要的原因就是因为是免费的，配置也简单。<br />
<span id="more-115"></span><br />
下面进入正题：网上虽然有ISAPI_Rewrite 2.9 Full 完全版 的破解版本，但是也不知道这个破解版本是谁发布的，因为他根本就是掩耳盗铃。仅仅把ISRWConfig.exe进行了修改，因此你只要任意属于序列号都能注册成功。</p>
<p>不过经过我的使用情况来看，这个破解是无效的，你只要打开事务管理器查看日志，就会发现许多ISAPI_Rewrite发出的错误信息：Your trial license has expired.</p>
<p>在你未重启IIS前，ISAPI_Rewrite还是可以用的，而如果你重启了IIS以后，URL重写的功能就完全失效了。</p>
<p>虽然破解版的ISRWConfig.exe中显示This product is registered to&#8230;，实际上这个是假的，只是掩耳盗铃而已。根据我的观察，我认为主要的验证还是通过ISAPI_Rewrite.dll，ISRWConfig.exe的作用仅仅是一个配置工具而已，可以让你输入序列号，以及设置一些参数。而当你输入了序列号以后，就会生成一个ISAPI_Rewrite.lic，将你的用户名以及序列号保存在里面，然后每次调用ISAPI_Rewrite.dll时，就会去验证这个序列号。</p>
<p>由此可见，网上所谓的破解版，根本都是无效的。所以，最实际的办法还是找个正版的序列号～</p>
]]></content:encoded>
			<wfw:commentRss>http://www.steveluo.name/isapi_rewrite-29-full-crack-problem/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>用 SQL 脚本将 Access 导入 MSSQL 2000/2005 方法</title>
		<link>http://www.steveluo.name/use-sql-access-to-mssql/</link>
		<comments>http://www.steveluo.name/use-sql-access-to-mssql/#comments</comments>
		<pubDate>Fri, 01 Aug 2008 16:52:41 +0000</pubDate>
		<dc:creator>Steve Luo</dc:creator>
				<category><![CDATA[知识库]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[服务器]]></category>

		<guid isPermaLink="false">http://www.steveluo.name/?p=113</guid>
		<description><![CDATA[上次介绍了Access 导入 MSSQL 2000/2005 数据库工具，不过，在使用这个工具时还是有一些地方需要注意的，我把整个导入过程记录了下来，算是笔记吧，希望对其他人有所帮助。 由于CooSel2.0 CreateSQL这个工具相当不错，能够将Access的数据库表的结构转换成SQL Server的更加复杂的结构，也就是数据库的升迁，你不必担心由于Access的结构与SQL Server的不同而产生错误！因此，我们不需要做任何手工改动与设置，直接使用该工具生成SQL脚本后，放到SQL Server中执行查询即可。当然该工具还提供了生成ASP文件以及直接导入SQL Server方式，笔者推荐使用SQL脚本，这样便于修改脚本内容。 我想在SQL Server中执行SQL脚本应该就不用再说了吧，如果这个还不会，那你就应该在虚拟机里多操练操练，服务器可不是闹着玩的，等你熟悉了SQL Server的操作方式后，再看下面的内容。 我们尝试来分析一下使用CooSel2.0 CreateSQL生成的SQL脚本，通过修改，才能符合我们的需求（比如仅创建数据库而不添加用户）。我们现在创建一个测试数据名为data.mdb，添加2个表，并添加几个测试字段。 在脚本头部，我们看到这几行： Create Database [data]  go use [data]  go 显然，这里是在SQL Server中创建一个数据库，名为data，然后使用这个数据库。如果我们已经自行创建好了，可以把开头的2行去掉，只留下use这2行就可以了。 exec sp_addlogin 'data_login','123','data' go exec sp_adduser 'data_login','data_login','db_owner' go 这里是创建SQL登录帐号，这些是在你用CooSel2.0 CreateSQL创建脚本时输入的，当然如果你不需要创建的话，可以随便输入，然后把这里几行删除。不过记得给你的用户添加映射。 --[data]: CREATE TABLE [dbo].[data] ( [ID] integer IDENTITY (1,1) not null, [字段1] nvarchar(255) null , [字段2] integer null ) [...]]]></description>
			<content:encoded><![CDATA[<p>上次介绍了<a href="http://www.steveluo.name/access-to-mssql-with-tools/" title="Access 导入 MSSQL 2000/2005 数据库工具">Access 导入 MSSQL 2000/2005 数据库工具</a>，不过，在使用这个工具时还是有一些地方需要注意的，我把整个导入过程记录了下来，算是笔记吧，希望对其他人有所帮助。</p>
<p>由于CooSel2.0 CreateSQL这个工具相当不错，能够将Access的数据库表的结构转换成SQL Server的更加复杂的结构，也就是数据库的升迁，你不必担心由于Access的结构与SQL Server的不同而产生错误！因此，我们不需要做任何手工改动与设置，直接使用该工具生成SQL脚本后，放到SQL Server中执行查询即可。当然该工具还提供了生成ASP文件以及直接导入SQL Server方式，笔者推荐使用SQL脚本，这样便于修改脚本内容。</p>
<p>我想在SQL Server中执行SQL脚本应该就不用再说了吧，如果这个还不会，那你就应该在虚拟机里多操练操练，服务器可不是闹着玩的，等你熟悉了SQL Server的操作方式后，再看下面的内容。<br />
<span id="more-113"></span><br />
我们尝试来分析一下使用CooSel2.0 CreateSQL生成的SQL脚本，通过修改，才能符合我们的需求（比如仅创建数据库而不添加用户）。我们现在创建一个测试数据名为data.mdb，添加2个表，并添加几个测试字段。</p>
<p>在脚本头部，我们看到这几行：</p>
<pre>Create Database [data]
 go
use [data]
 go</pre>
<p>显然，这里是在SQL Server中创建一个数据库，名为data，然后使用这个数据库。如果我们已经自行创建好了，可以把开头的2行去掉，只留下use这2行就可以了。</p>
<pre>exec sp_addlogin 'data_login','123','data'
 go
exec sp_adduser 'data_login','data_login','db_owner'
 go</pre>
<p>这里是创建SQL登录帐号，这些是在你用CooSel2.0 CreateSQL创建脚本时输入的，当然如果你不需要创建的话，可以随便输入，然后把这里几行删除。不过记得给你的用户添加映射。</p>
<pre>--[data]:

CREATE TABLE [dbo].[data] (
    [ID] integer IDENTITY (1,1) not null,
   [字段1] nvarchar(255) null ,
   [字段2] integer null
  ) ON [Primary]
 go
--这里可能还有其他表
--[data]:

 Alter TABLE [dbo].[data] WITH NOCHECK ADD CONSTRAINT [PK_data] Primary Key Clustered ([ID] )  ON [Primary]
 go
--这里可能还有其他表</pre>
<p>从这里开始就正式开始创建数据库中的表结构了，这些我们不需要改动，如果你已经创建好了结构，那么可以把这块也删除了。在Access数据库中有几个表，就会有几块这样的语句。</p>
<pre>--[data]:
SET IDENTITY_INSERT [dbo].[data] ON
 go 

INSERT INTO [dbo].[data] ([ID],[字段1],[字段2])
 SELECT [ID],[字段1],[字段2]
 FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0','Data Source="C:\data.mdb"')...[data]
 go 

SET IDENTITY_INSERT [dbo].[data] Off
 go
--这里可能还有其他表</pre>
<p>这里是插入数据的地方，会读取Access数据库中每个表中的数据然后插入到SQL Server中的相应的表中。其中Data Source=你Access在硬盘中的位置，如果是虚拟主机的话，用个ASP的探针就能很容易看到自己站点所在目录了。</p>
<p>好了，一个完整的SQL脚本我们就全部分析完了，你可以根据你的情况来删除不需要的部分。</p>
<p>如果你在执行SQL脚本以后，出现如下错误：</p>
<pre>SQL Server 2005：
SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource'
的访问，因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用
'Ad Hoc Distributed Queries'。有关启用 'Ad Hoc Distributed Queries' 的详细信息，请参阅 SQL
Server 联机丛书中的 "外围应用配置器"。</pre>
<p>那么说明你的SQL Server的Ad Hoc Distributed Queries没有开启，需要在你的SQL脚本顶部添加：</p>
<pre>EXEC sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXEC sp_configure 'Ad Hoc Distributed Queries', 1;
GO
RECONFIGURE;
GO</pre>
<p>再次执行你的SQL脚本，如果你是使用的最高权限帐号（Windwos模式或SA帐号），应该是成功的。<br />
如果提示：</p>
<pre>服务器: 消息 15247，级别 16，状态 1，过程 sp_configure，行 170
用户没有执行此操作的权限。
服务器: 消息 5812，级别 14，状态 1，行 1
您没有运行 RECONFIGURE 语句的权限。
服务器: 消息 15123，级别 16，状态 1，过程 sp_configure，行 79
配置选项 'Ad Hoc Distributed Queries' 不存在，也可能是高级选项。

SQL Server 2000提示：
已拒绝对 OLE DB 提供程序 'Microsoft.Jet.OLEDB.4.0' 的特殊访问。必须通过链接服务器来访问此提供程序。</pre>
<p>说明你的帐号权限不够，需要SQL Server用户具用SystemAdministrators&#8221;服务器角色&#8221;。如果是虚拟主机，那么就麻烦你的空间商帮你做这些吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.steveluo.name/use-sql-access-to-mssql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Access 导入 MSSQL 2000/2005 数据库工具</title>
		<link>http://www.steveluo.name/access-to-mssql-with-tools/</link>
		<comments>http://www.steveluo.name/access-to-mssql-with-tools/#comments</comments>
		<pubDate>Thu, 31 Jul 2008 17:49:28 +0000</pubDate>
		<dc:creator>Steve Luo</dc:creator>
				<category><![CDATA[知识库]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[服务器]]></category>

		<guid isPermaLink="false">http://www.steveluo.name/?p=109</guid>
		<description><![CDATA[在安装依然主机管理系统时，因为当时导入MSSQL时有点问题，所以，为了赶快能用上管理功能，所以就暂时先用了Access数据库。不过一直以来都因为速度问题困扰不已，一直以为是由于ASP.Net的效率问题造成的。 不过一次在群里有位朋友说Access数据库是比较慢，改用MSSQL以后速度会有所改善。 于是开始设法将现有的Access数据库导入到MSSQL 2005中。以前也尝试导入过，但是用SQL Server自带的DTS服务直接导入（先用sql脚本创建好表结构，否则会丢失标识等），会出现下列错误： - 执行之前 (错误) 消息 错误 0xc0202009: 数据流任务: SSIS 错误代码 DTS_E_OLEDBERROR。出现 OLE DB 错误。错误代码: 0x80040E21。 已获得 OLE DB 记录。源:“Microsoft SQL Native Client” Hresult: 0x80040E21 说明:“多步 OLE DB 操作产生错误。如果可能，请检查每个 OLE DB 状态值。没有工作被完成。”。  (SQL Server 导入和导出向导) 错误 0xc0202025: 数据流任务: 无法创建 OLE DB 取值函数。请查看列元数据是否有效。  (SQL Server 导入和导出向导) 错误 0xc004701a: 数据流任务: 组件“目标 9 - yiran_order”(804) [...]]]></description>
			<content:encoded><![CDATA[<p>在安装<a href="http://www.yiran.com" target="_blank">依然主机管理系统</a>时，因为当时导入MSSQL时有点问题，所以，为了赶快能用上管理功能，所以就暂时先用了Access数据库。不过一直以来都因为速度问题困扰不已，一直以为是由于ASP.Net的效率问题造成的。</p>
<p>不过一次在群里有位朋友说Access数据库是比较慢，改用MSSQL以后速度会有所改善。<br />
<span id="more-109"></span><br />
于是开始设法将现有的Access数据库导入到MSSQL 2005中。以前也尝试导入过，但是用SQL Server自带的DTS服务直接导入（先用sql脚本创建好表结构，否则会丢失标识等），会出现下列错误：</p>
<pre>- 执行之前 (错误)
消息
错误 0xc0202009: 数据流任务: SSIS 错误代码 DTS_E_OLEDBERROR。出现 OLE DB 错误。错误代码: 0x80040E21。
已获得 OLE DB 记录。源:“Microsoft SQL Native Client” Hresult: 0x80040E21 说明:“多步 OLE DB 操作产生错误。如果可能，请检查每个 OLE DB 状态值。没有工作被完成。”。
 (SQL Server 导入和导出向导)

错误 0xc0202025: 数据流任务: 无法创建 OLE DB 取值函数。请查看列元数据是否有效。
 (SQL Server 导入和导出向导)

错误 0xc004701a: 数据流任务: 组件“目标 9 - yiran_order”(804) 在执行前阶段失败，返回的错误代码为 0xC0202025。
 (SQL Server 导入和导出向导)</pre>
<p>而如果不用sql脚本创建结构的话，直接导入是没有问题的，这个问题在网上找了下，基本没有什么资料，而且国内用SQL Server 2005的人并不多，而且大多数开发者使用的都是Express版本，他们只注重一些开发上的问题，而对于服务器管理者来说，SQL Server 2005的技术资料并不对，因此这个问题是比较难解决的，毕竟我不是MCDBA，我只是个MCSE而已。<br />
既然SQL Server自身的Managemeng Studio无法使用，那么我们就全部通过SQL脚本来解决，因为图形化管理器也只是将一系列的管理功能通过图形化界面来生成相应的SQL脚本来操作的罢了。</p>
<p>网上很辛苦地找到了一个工具～真是福音啊。这个工具的原理是通过对Access数据库的分析自动生成SQL脚本，可以包含数据，也可以只有结构。然后只要放到SQL Server中执行一下查询一个数据库就建好了。关于如何在SQL Server中执行脚本以及在执行脚本时可能会出现的一些问题，请参考<a href="http://www.steveluo.name/use-sql-access-to-mssql/" title="用 SQL 脚本将 Access 导入 MSSQL 2000/2005 方法">用 SQL 脚本将 Access 导入 MSSQL 2000/2005 方法</a></p>
<p><img class="alignnone size-full wp-image-112" title="Access导入MSSQL工具" src="http://www.steveluo.name/wp-content/uploads/2008/07/access-to-mssql.jpg" alt="Access导入MSSQL工具" /></p>
<p>下载：<a href="http://www.steveluo.name/wp-content/uploads/2008/07/coosel20-createsql-v106.rar">CooSel2.0 CreateSQL v1.06<br />
</a>（支持SQL Server 2000/2005）</p>
<p>可能解压后会提示缺少控件，COMDLG32.OCX这个文件本来并不在这个压缩包里，我是将2个合并了起来。这个应该是VB的空间，如果提示缺少这个的话就执行RegOCX.exe试试（这个我没试过～因为没提示缺少），不行就把COMDLG32.OCX复制到system32下看看吧。</p>
<p>如果你找到了更好的工具，也请告诉我一声吧呵呵～</p>
]]></content:encoded>
			<wfw:commentRss>http://www.steveluo.name/access-to-mssql-with-tools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP中类型转换时碰到的问题</title>
		<link>http://www.steveluo.name/asp-convert-type-problem/</link>
		<comments>http://www.steveluo.name/asp-convert-type-problem/#comments</comments>
		<pubDate>Wed, 30 Jul 2008 16:36:17 +0000</pubDate>
		<dc:creator>Steve Luo</dc:creator>
				<category><![CDATA[知识库]]></category>
		<category><![CDATA[ASP]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.steveluo.name/?p=108</guid>
		<description><![CDATA[刚放假的时候在紧张制作学院的成绩查询系统（名为系统，其实就是一个登录页面+数据显示页面而已）。因此，又重操旧业，写起ASP了（没办法，我只会这个，PHP还没学完，ASP.Net还没入门）。 写程序其实是件很苦的事情，其中会遇到一系列的问题，不过当你遇到多了，也就知道基本该怎么处理了，也就不怕了，只是烦了点而已。正因为如此，我在写程序时，碰到的一些很奇怪的问题也能很快的解决，因为我在不断遇到问题的过程中，也学会了一些解决问题的手段，比如设置断点（可能这个是桌面编程的术语，不知道Web编程有没有这一说。。） 这次遇到了一个比较麻烦的问题就是从SQL Server中读取数据。从表面上看其实并没有什么难度，但是因为之后需要用到计算，所以必须在数据类型不匹配的情况下，就遇到了一个数据类型转换的问题。 一直以来遇到类型转换我经常会碰到问题，而且经常会很莫名不知道为什么会这样，后来经过查阅了大量资料以后，总结出ASP在类型转换时需要注意的一点：被转换的数据不能为空（Null） 我们必须在对变量进行类型转换前，先做一个是否为空的判断，因为很多时候读取出来的数据可能是空的，对于整形来说，默认的应该是0，而字符串类型的确是空的，所以这样就会出现 Microsoft VBScript 运行时错误错误 '800a000d' 类型不匹配: 'Cint' 这样一来，碰到类型转换就不怕了，不过下面这种情况可能是你不太容易想到的，让我整整抓狂了一晚上了呵呵。 在使用了上面的方法以后，仍然存在问题，还是显示类型不匹配，这个又是为什么呢？我在转换前已经做了判断，还是不起作用，难道传输过来的数据不是空的吗？于是我用len()函数测试了一下，显示长度为8，晕～ 明明是空的，为什么长度是8？于是直接到SQL Server企业管理器查询，找到了问题所在！原来数据库这个字段默认值为“8个空格”。。我靠！谁设计的数据库表结构，真是的，一点专业水准都没有！ 问题结论：因为是8个空格，因此，转换成整形当然是“类型不匹配了”。 经过这次的经验，以后在字符串处理的时候，如果遇到某些看不见的字符难以处理的话，还是使用返回长度的函数看一下究竟有没有字符，然后再根据具体情况进行处理。]]></description>
			<content:encoded><![CDATA[<p>刚放假的时候在紧张制作学院的成绩查询系统（名为系统，其实就是一个登录页面+数据显示页面而已）。因此，又重操旧业，写起ASP了（没办法，我只会这个，PHP还没学完，ASP.Net还没入门）。</p>
<p>写程序其实是件很苦的事情，其中会遇到一系列的问题，不过当你遇到多了，也就知道基本该怎么处理了，也就不怕了，只是烦了点而已。正因为如此，我在写程序时，碰到的一些很奇怪的问题也能很快的解决，因为我在不断遇到问题的过程中，也学会了一些解决问题的手段，比如设置断点（可能这个是桌面编程的术语，不知道Web编程有没有这一说。。）</p>
<p>这次遇到了一个比较麻烦的问题就是从SQL Server中读取数据。从表面上看其实并没有什么难度，但是因为之后需要用到计算，所以必须在数据类型不匹配的情况下，就遇到了一个数据类型转换的问题。<br />
<span id="more-108"></span><br />
一直以来遇到类型转换我经常会碰到问题，而且经常会很莫名不知道为什么会这样，后来经过查阅了大量资料以后，总结出ASP在类型转换时需要注意的一点：<strong>被转换的数据不能为空（Null）</strong></p>
<p>我们必须在对变量进行类型转换前，先做一个是否为空的判断，因为很多时候读取出来的数据可能是空的，对于整形来说，默认的应该是0，而字符串类型的确是空的，所以这样就会出现</p>
<pre>Microsoft VBScript 运行时错误错误 '800a000d'
类型不匹配: 'Cint'</pre>
<p>这样一来，碰到类型转换就不怕了，不过下面这种情况可能是你不太容易想到的，让我整整抓狂了一晚上了呵呵。</p>
<p>在使用了上面的方法以后，仍然存在问题，还是显示类型不匹配，这个又是为什么呢？我在转换前已经做了判断，还是不起作用，难道传输过来的数据不是空的吗？于是我用len()函数测试了一下，显示长度为8，晕～</p>
<p>明明是空的，为什么长度是8？于是直接到SQL Server企业管理器查询，找到了问题所在！原来数据库这个字段默认值为“8个空格”。。我靠！谁设计的数据库表结构，真是的，一点专业水准都没有！</p>
<p><strong>问题结论：因为是8个空格，因此，转换成整形当然是“类型不匹配了”。</strong></p>
<p>经过这次的经验，以后在字符串处理的时候，如果遇到某些看不见的字符难以处理的话，还是使用返回长度的函数看一下究竟有没有字符，然后再根据具体情况进行处理。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.steveluo.name/asp-convert-type-problem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

