<?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>简单生活 —— Kevin Yang的博客 &#187; 代码库</title> <atom:link href="http://www.imkevinyang.com/categories/techarticles/codebase/feed" rel="self" type="application/rss+xml" /><link>http://www.imkevinyang.com</link> <description>It&#039;s all about sharing</description> <lastBuildDate>Thu, 29 Jul 2010 17:50:43 +0000</lastBuildDate> <generator>http://wordpress.org/?v=2.9.1</generator> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <item><title>Visual Assist代码提示使用的字符串模糊匹配算法</title><link>http://www.imkevinyang.com/2009/09/visual-assist%e4%bb%a3%e7%a0%81%e6%8f%90%e7%a4%ba%e4%bd%bf%e7%94%a8%e7%9a%84%e5%ad%97%e7%ac%a6%e4%b8%b2%e6%a8%a1%e7%b3%8a%e5%8c%b9%e9%85%8d%e7%ae%97%e6%b3%95.html</link> <comments>http://www.imkevinyang.com/2009/09/visual-assist%e4%bb%a3%e7%a0%81%e6%8f%90%e7%a4%ba%e4%bd%bf%e7%94%a8%e7%9a%84%e5%ad%97%e7%ac%a6%e4%b8%b2%e6%a8%a1%e7%b3%8a%e5%8c%b9%e9%85%8d%e7%ae%97%e6%b3%95.html#comments</comments> <pubDate>Mon, 28 Sep 2009 04:44:00 +0000</pubDate> <dc:creator>Kevin Yang</dc:creator> <category><![CDATA[代码库]]></category> <category><![CDATA[技术随笔]]></category> <category><![CDATA[Visual Assist]]></category> <category><![CDATA[Visual Studio]]></category> <category><![CDATA[代码提示]]></category> <category><![CDATA[字符串匹配]]></category> <category><![CDATA[智能感知]]></category> <category><![CDATA[智能提示]]></category> <category><![CDATA[算法]]></category><guid isPermaLink="false">http://www.imkevinyang.com/2009/09/visual-assist%e4%bb%a3%e7%a0%81%e6%8f%90%e7%a4%ba%e4%bd%bf%e7%94%a8%e7%9a%84%e5%ad%97%e7%ac%a6%e4%b8%b2%e6%a8%a1%e7%b3%8a%e5%8c%b9%e9%85%8d%e7%ae%97%e6%b3%95.html</guid> <description><![CDATA[<p>Visual Assist是Visual Studio上一个很强大的插件。特别是在代码提示方面，相比Visual Studio自带的要强很多。</p><p>Visual Studio自带的代码提示（智能感知）功能会根据我们敲入的字符串，找到相似的类或者方法等。但是它的匹配规则非常简单，就是前向匹配。例如当我们输入了String字符串，那么Visual Studio会列出String,StringBuilder,StringComparer等以“String”打&#8230;</p>]]></description> <content:encoded><![CDATA[<p>Visual Assist是Visual Studio上一个很强大的插件。特别是在代码提示方面，相比Visual Studio自带的要强很多。</p><p>Visual Studio自带的代码提示（智能感知）功能会根据我们敲入的字符串，找到相似的类或者方法等。但是它的匹配规则非常简单，就是前向匹配。例如当我们输入了String字符串，那么Visual Studio会列出String,StringBuilder,StringComparer等以“String”打头的字符串。这样的设计其实是非常不够用的。稍微敲快一些漏掉一两个字母是很正常的事情，但是在VS中就无法享受代码提示带来的便捷了。好在Visual Assist改进了这一点。</p><p>VA采用字符串模糊匹配的算法，即使你漏过了其中几个字母，或者当你想要搜索含有某个字符串的类、方法等的时候，VA都可以很好的列出你想找的东西。</p><p>例如，我想使用SqlConnectionStringBuilder这个类，但是这个类名太长了。那么我们只需要输入“sqlconbui”字符串即可。又或者，我们想看看类库中有什么和String相关的，我们只需要输入String即可。</p><p>一直很好奇它这个匹配算法是怎么实现的，在论坛问了别人都没什么人感兴趣。自己研究了一下，我觉得算法要求可以这样来描述：</p><blockquote><p>源字符串在经过若干次插入操作之后，能够变换成目标字符串。那么就说源字符串成功匹配到了目标字符串。否则不匹配。</p><p>插入操作，指的是在源字符串的任意位置上插入任意长度的字符串。</p></blockquote><p>自己写了个大概的算法实现（C#版）：</p><pre class="csharpcode"><span class="rem">/// &lt;summary&gt;</span>
<span class="rem">/// 字符串模糊匹配。</span>
<span class="rem">/// &lt;/summary&gt;</span>
<span class="rem">/// &lt;param name=&quot;source&quot;&gt;&lt;/param&gt;</span>
<span class="rem">/// &lt;param name=&quot;search&quot;&gt;&lt;/param&gt;</span>
<span class="rem">/// &lt;returns&gt;&lt;/returns&gt;</span>
<span class="kwrd">public</span> <span class="kwrd">static</span> <span class="kwrd">bool</span> FuzzySearch(String source, String search)
{
    <span class="kwrd">if</span> (String.IsNullOrEmpty(source))
    {
        <span class="kwrd">throw</span> <span class="kwrd">new</span> ArgumentNullException(<span class="str">&quot;source&quot;</span>);
    }
    <span class="kwrd">if</span> (String.IsNullOrEmpty(search))
    {
        <span class="kwrd">return</span> <span class="kwrd">true</span>;
    }
    <span class="rem">// 不区分大小写</span>
    source = source.ToLowerInvariant();
    search = search.ToLowerInvariant();
    <span class="kwrd">int</span> index = source.IndexOf(search[0]);
    <span class="kwrd">for</span> (<span class="kwrd">short</span> i = 1; i &lt; search.Length; i++)
    {
        <span class="kwrd">char</span> ch = search[i];
        index = source.IndexOf(ch, index + 1);
        <span class="kwrd">if</span> (index &lt; 0)
        {
            <span class="kwrd">return</span> <span class="kwrd">false</span>;
        }
    }
    <span class="kwrd">return</span> <span class="kwrd">true</span>;
}</pre><p>测试了一下，“sqlconbui”能够成功匹配到SqlConnectionStringBuilder。不过验证了其他几个字符串，发现和VA的算法还是有点差别的，感觉我这个匹配相比它的更宽松的样子。</p><p align="right">——<a href="http://www.imkevinyang.com/"><em><strong>Kevin Yang</strong></em></a></p>标签：<a href="http://www.imkevinyang.com/tags/visual-assist" title="Visual Assist" rel="tag">Visual Assist</a>, <a href="http://www.imkevinyang.com/tags/visual-studio" title="Visual Studio" rel="tag">Visual Studio</a>, <a href="http://www.imkevinyang.com/categories/techarticles/codebase" title="代码库" rel="tag">代码库</a>, <a href="http://www.imkevinyang.com/tags/%e4%bb%a3%e7%a0%81%e6%8f%90%e7%a4%ba" title="代码提示" rel="tag">代码提示</a>, <a href="http://www.imkevinyang.com/tags/%e5%ad%97%e7%ac%a6%e4%b8%b2%e5%8c%b9%e9%85%8d" title="字符串匹配" rel="tag">字符串匹配</a>, <a href="http://www.imkevinyang.com/categories/techarticles" title="技术随笔" rel="tag">技术随笔</a>, <a href="http://www.imkevinyang.com/tags/%e6%99%ba%e8%83%bd%e6%84%9f%e7%9f%a5" title="智能感知" rel="tag">智能感知</a>, <a href="http://www.imkevinyang.com/tags/%e6%99%ba%e8%83%bd%e6%8f%90%e7%a4%ba" title="智能提示" rel="tag">智能提示</a>, <a href="http://www.imkevinyang.com/tags/%e7%ae%97%e6%b3%95" title="算法" rel="tag">算法</a><br /><h4 style="background-color:#3B3B3B;border-bottom:2px groove gray;color:#F2F2F2;margin-top:20px;padding:6px 6px 6px 15px;margin:20px 0px 0px 0px">你可能对下面的文章感兴趣</h4><ul class="st-related-posts"><li><a href="http://www.imkevinyang.com/2009/09/visual-studio%e5%b0%8f%e8%b4%b4%e5%a3%ab%e5%8a%a0%e4%ba%86try-catch%e4%b9%9f%e8%83%bd%e8%87%aa%e5%8a%a8%e5%ae%9a%e4%bd%8d%e5%88%b0%e5%bc%82%e5%b8%b8%e4%bb%a3%e7%a0%81.html" title="Visual Studio小贴士&mdash;&mdash;加了Try-Catch也能自动定位到异常代码 (2009/09/18)">Visual Studio小贴士&mdash;&mdash;加了Try-Catch也能自动定位到异常代码</a> (2009/09/18)</li><li><a href="http://www.imkevinyang.com/2009/05/visual-studio%e7%bb%9f%e8%ae%a1%e6%9c%89%e6%95%88%e4%bb%a3%e7%a0%81%e8%a1%8c%e6%95%b0.html" title="Visual Studio统计有效代码行数 (2009/05/22)">Visual Studio统计有效代码行数</a> (2009/05/22)</li><li><a href="http://www.imkevinyang.com/2010/07/visual-studio%e7%bc%96%e8%be%91%e5%99%a8%e4%b8%80%e6%ac%a1%e7%bc%a9%e8%bf%9b%e5%8f%8d%e7%bc%a9%e8%bf%9b4%e4%b8%aa%e7%a9%ba%e6%a0%bc.html" title="Visual Studio编辑器一次缩进/反缩进4个空格 (2010/07/04)">Visual Studio编辑器一次缩进/反缩进4个空格</a> (2010/07/04)</li><li><a href="http://www.imkevinyang.com/2010/05/vs2010%e7%9a%84ui%e8%ae%be%e8%ae%a1%e5%a4%b1%e8%af%af.html" title="VS2010的UI设计失误 (2010/05/31)">VS2010的UI设计失误</a> (2010/05/31)</li><li><a href="http://www.imkevinyang.com/2009/08/%e4%bd%bf%e7%94%a8%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e6%89%be%e5%87%ba%e4%b8%8d%e5%8c%85%e5%90%ab%e7%89%b9%e5%ae%9a%e5%ad%97%e7%ac%a6%e4%b8%b2%e7%9a%84%e6%9d%a1%e7%9b%ae.html" title="使用正则表达式找出不包含特定字符串的条目 (2009/08/04)">使用正则表达式找出不包含特定字符串的条目</a> (2009/08/04)</li><li><a href="http://www.imkevinyang.com/2009/09/%e8%a7%a3%e5%86%b3silverlight%e6%97%a0%e6%b3%95%e8%b0%83%e8%af%95%e7%9a%84%e9%97%ae%e9%a2%98.html" title="解决Silverlight无法调试的问题 (2009/09/01)">解决Silverlight无法调试的问题</a> (2009/09/01)</li></ul>]]></content:encoded> <wfw:commentRss>http://www.imkevinyang.com/2009/09/visual-assist%e4%bb%a3%e7%a0%81%e6%8f%90%e7%a4%ba%e4%bd%bf%e7%94%a8%e7%9a%84%e5%ad%97%e7%ac%a6%e4%b8%b2%e6%a8%a1%e7%b3%8a%e5%8c%b9%e9%85%8d%e7%ae%97%e6%b3%95.html/feed</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Javascript操纵Cookie</title><link>http://www.imkevinyang.com/2009/06/javascript%e6%93%8d%e7%ba%b5cookie.html</link> <comments>http://www.imkevinyang.com/2009/06/javascript%e6%93%8d%e7%ba%b5cookie.html#comments</comments> <pubDate>Thu, 11 Jun 2009 15:18:00 +0000</pubDate> <dc:creator>Kevin Yang</dc:creator> <category><![CDATA[Web传统技术]]></category> <category><![CDATA[代码库]]></category> <category><![CDATA[技术随笔]]></category> <category><![CDATA[Cookie]]></category> <category><![CDATA[Cookie三要素]]></category> <category><![CDATA[Cookie常识]]></category> <category><![CDATA[Javascript]]></category><guid isPermaLink="false">http://www.imkevinyang.com/2009/05/javascript%e6%93%8d%e7%ba%b5cookie.html</guid> <description><![CDATA[<p>在讲如何使用Javascript操纵Cookie时，我们先来了解一下Cookie的基本常识。</p><p>Cookie，又称Http Cookie，是存储在客户端本地的一小段信息。我们可以简单地把Cookie理解为客户端浏览器上的一个小硬盘，我们会在上面存取一些信息，通常用作Http状态的维护，现在也经常被用作跟踪用户行为的一种常见方式。</p><h2>Cookie的属性</h2><p>每一个Cookie都有如下几个属性：</p><ul><li>名称&#160;&#160;&#160;</li><li>值</li><li>主机域</li><li>路径</li><li>安全级别&#8230;</li></ul>]]></description> <content:encoded><![CDATA[<p>在讲如何使用Javascript操纵Cookie时，我们先来了解一下Cookie的基本常识。</p><p>Cookie，又称Http Cookie，是存储在客户端本地的一小段信息。我们可以简单地把Cookie理解为客户端浏览器上的一个小硬盘，我们会在上面存取一些信息，通常用作Http状态的维护，现在也经常被用作跟踪用户行为的一种常见方式。</p><h2>Cookie的属性</h2><p>每一个Cookie都有如下几个属性：</p><ul><li>名称&#160;&#160;&#160;</li><li>值</li><li>主机域</li><li>路径</li><li>安全级别</li><li>过期时间</li></ul><p>其中“名称”、“主机域”，“路径”三者一起唯一标识了一个Cookie。 <br />大多数Cookie在设置的时候都只是显式的设置了Cookie的名称和值，这种情况下，浏览器会自动的使用location.host来设置Cookie的主机域，将路径设置到根目录“/”下。例如，当你在<a href="http://www.example.com">www.<font color="#555555">example</font>.com</a>上面使用document.cookie=&quot;name=value&quot;设置了一个Cookie，那么这个Cookie就拥有了如下属性：</p><ul><li>名称 —— name</li><li>值 —— value</li><li>主机域 —— <a href="http://www.example.com">www.example.com</a></li><li>路径 —— /</li><li>安全级别 —— No</li><li>过期时间 —— 浏览器会话结束（关闭浏览器）</li></ul><h2>第一方和第三方Cookie的区别</h2><p>第一方Cookie指的是设置在当前网站域上面的Cookie，而第三方Cookie指的是设置在其他域上的Cookie。</p><p>第一方Cookie比较好理解，我们通常遇到的都是属于第一方Cookie。在客户端Javascript中，我们只能操纵第一方Cookie，也就是说，我们不能在www.example.com主机上，设置www.google.cn的Cookie，这样就乱套了。</p><p>第三方Cookie不容易让人注意到。假设我们在公司网站<a href="http://www.example.com">www.example.com</a>上面使用了map.google.com的地图服务，而Google地图在使用时又希望在用户这边设置一些Cookie，就跟用户直接访问自家网站（map.google.com）一样，如Session信息等，那么它会在返回的HTTP Response中包含set-cookie的报头，但由于是第三方域，存在安全问题，所以必须还在响应中包含一个P3P的主机头（P3P头中存的是隐私策略的摘要）来实现Cookie的第三方存取（注意，此时Cookie还是设置在b.com上面的）。IE中可以设置对第三方Cookie存取的限制。</p><h2>Javascript操纵Cookie</h2><p>在客户端使用Javascript操纵Cookie存在很多的不便之处，例如在读取Cookie的时候，只能通过手动解析document.cookie字符串得到指定cookie的值，不能得到其他任何信息，如设置的主机，路径以及过期时间等。</p><pre class="csharpcode"><span class="rem">/**</span>
<span class="rem"> * 查询指定名称的Cookie值</span>
<span class="rem"> * @note 需要注意有可能出现同名cookie的问题</span>
<span class="rem"> * @param {Object} key</span>
<span class="rem"> * @param {Object} 设置当读取不到key时返回的默认值</span>
<span class="rem"> * @return {String} 返回读取到的Cookie的值，</span>
<span class="rem"> * 如果读取不到相应的Cookie，则判断defValue是否有效，有效则返回defValue，否则返回null</span>
<span class="rem"> */</span>
<span class="kwrd">function</span> getCookie(key,defValue){
    <span class="kwrd">var</span> cookie,value;
    <span class="kwrd">if</span>(!key){
        <span class="kwrd">return</span> <span class="kwrd">null</span>;
    }

    cookie = document.cookie;
    <span class="rem">// 所有cookie的key都小写化处理</span>
    key = key.toLowerCase();

    value = find(cookie,key+<span class="str">&quot;=&quot;</span>,<span class="str">&quot;;&quot;</span>,<span class="kwrd">null</span>,<span class="kwrd">false</span>,<span class="kwrd">null</span>);
    <span class="kwrd">return</span> value === <span class="kwrd">null</span> ? defValue : unescape(value);
}
<span class="rem">/**</span>
<span class="rem"> * 设置cookie</span>
<span class="rem"> * @param {String} key</span>
<span class="rem"> * @param {String} value</span>
<span class="rem"> * @param {Number} expires 单位为秒</span>
<span class="rem"> * @param {String} path 路径</span>
<span class="rem"> * @param {String} domain 主机</span>
<span class="rem"> * @param {Boolean} secure 安全级别</span>
<span class="rem"> */</span>
<span class="kwrd">function</span> setCookie(key, value, expires, path,domain,secure){
    <span class="rem">// key无效则不做任何操作</span>
    <span class="kwrd">if</span>(!key){
        <span class="kwrd">return</span>;
    }

    <span class="rem">// 所有cookie的key都小写化处理</span>
    key = key.toLowerCase();

    key = key + <span class="str">'='</span> + escape(value) + <span class="str">&quot;;&quot;</span>;
    expires = expires ? (<span class="str">&quot;expires=&quot;</span> + <span class="kwrd">new</span> Date(<span class="kwrd">new</span> Date().getTime() + expires * 1000).toGMTString()) + <span class="str">&quot;;&quot;</span> : <span class="str">&quot;&quot;</span>;
    path = !!path ? <span class="str">&quot;path=&quot;</span> + path + <span class="str">&quot;;&quot;</span> : <span class="str">&quot;path=/;&quot;</span>;
    domain = domain ? (<span class="str">&quot;domain=&quot;</span> + domain) + <span class="str">&quot;;&quot;</span> : <span class="str">&quot;&quot;</span>;
    secure = secure ? <span class="str">&quot;secure=true;&quot;</span> : <span class="str">&quot;&quot;</span>;
    document.cookie =[key,expires,path,domain,secure].join(<span class="str">&quot;&quot;</span>);
}
<span class="rem">/**</span>
<span class="rem"> * 删除指定Cookie</span>
<span class="rem"> * @param {Object} key</span>
<span class="rem"> * @param {Object} path</span>
<span class="rem"> * @param {Object} domain</span>
<span class="rem"> */</span>
<span class="kwrd">function</span> delCookie(key,path,domain){
    <span class="rem">// 超时设置为过去的时间，cookie会立即失效</span>
    key = key.toLowerCase();
    setCookie(key,<span class="str">&quot;&quot;</span>,-1000,path,domain);
}
<span class="rem">/**</span>
<span class="rem"> * 从字符串中获取夹在指定前缀和后缀之间的值</span>
<span class="rem"> * @example</span>
<span class="rem"> * userAgent = &quot;Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.9.0.2) Gecko/2008082714 Firefox/3.0.2&quot;</span>
<span class="rem"> * </span>
<span class="rem"> * prefix=&quot;windows nt&quot;</span>
<span class="rem"> * suffix=&quot;;&quot;</span>
<span class="rem"> * find(userAgent,prefix,suffix) returns &quot; 5.2&quot;;</span>
<span class="rem"> * @param {Object} str 源字符串</span>
<span class="rem"> * @param {Object} prefix 前缀</span>
<span class="rem"> * @param {Object} suffix 结束符，若不指定，则匹配到字符串结尾；如果指定了，但是匹配不到，则同样匹配到字符串结尾。</span>
<span class="rem"> * @param {Boolean} matchFirstOnly 是否找到第一个匹配项,设置为false则查找最后一个匹配项,默认为false</span>
<span class="rem"> * @param {Boolean} ignoreCase     忽略大小写来查找,默认值为true</span>
<span class="rem"> * @param {Boolean} trimBlank 是否删除值首尾的空白符,默认值为true</span>
<span class="rem"> * @return {String} 查找到的字符串，若找不到则返回null</span>
<span class="rem"> */</span>
<span class="kwrd">function</span> find(str,prefix,suffix,matchFirstOnly,ignoreCase,trimBlank){
    <span class="kwrd">var</span> start,end,middle,value=<span class="kwrd">null</span>;
    matchFirstOnly = (matchFirstOnly === <span class="kwrd">true</span>);
    ignoreCase = (ignoreCase !== <span class="kwrd">false</span>);
    trimBlank = (trimBlank !== <span class="kwrd">false</span>);
    <span class="rem">// 如果忽略默认值</span>
    <span class="kwrd">if</span>(ignoreCase){
        str = str.toLowerCase();
        prefix = prefix.toLowerCase();
        suffix = suffix &amp;&amp; suffix.toLowerCase();
    }

    <span class="kwrd">if</span>(matchFirstOnly){
        start = str.indexOf(prefix);
    }<span class="kwrd">else</span>{
        start = str.lastIndexOf(prefix);
    }
    <span class="kwrd">if</span> (start &gt; -1) {
        <span class="rem">// 如果没有指定后缀，则直接匹配到字符串结尾</span>
        middle = start + prefix.length;
        <span class="kwrd">if</span> (!suffix) {
            value = str.substring(middle);
        }
        <span class="kwrd">else</span> {
            end = str.indexOf(suffix, middle);
            <span class="kwrd">if</span> (end &gt; -1) {
                value = str.substring(middle, end);
            }
            <span class="kwrd">else</span> {
                value = str.substring(middle);
            }
        }
        <span class="kwrd">if</span>(trimBlank){
            value = value.replace(/^\s*(.*?)\s*$/, <span class="str">'$1'</span>);
        }
    }

    <span class="kwrd">return</span> value;
}</pre>标签：<a href="http://www.imkevinyang.com/tags/cookie" title="Cookie" rel="tag">Cookie</a>, <a href="http://www.imkevinyang.com/tags/cookie%e4%b8%89%e8%a6%81%e7%b4%a0" title="Cookie三要素" rel="tag">Cookie三要素</a>, <a href="http://www.imkevinyang.com/tags/cookie%e5%b8%b8%e8%af%86" title="Cookie常识" rel="tag">Cookie常识</a>, <a href="http://www.imkevinyang.com/tags/javascript" title="Javascript" rel="tag">Javascript</a>, <a href="http://www.imkevinyang.com/categories/techarticles/web%e4%bc%a0%e7%bb%9f%e6%8a%80%e6%9c%af" title="Web传统技术" rel="tag">Web传统技术</a>, <a href="http://www.imkevinyang.com/categories/techarticles/codebase" title="代码库" rel="tag">代码库</a>, <a href="http://www.imkevinyang.com/categories/techarticles" title="技术随笔" rel="tag">技术随笔</a><br /><h4 style="background-color:#3B3B3B;border-bottom:2px groove gray;color:#F2F2F2;margin-top:20px;padding:6px 6px 6px 15px;margin:20px 0px 0px 0px">你可能对下面的文章感兴趣</h4><ul class="st-related-posts"><li><a href="http://www.imkevinyang.com/2009/11/button%e6%a0%87%e7%ad%be%e9%bc%a0%e6%a0%87%e7%82%b9%e5%87%bb%e4%ba%8b%e4%bb%b6%e7%9a%84%e8%a7%a6%e5%8f%91%e6%ba%90%e9%97%ae%e9%a2%98.html" title="Button标签鼠标点击事件的触发源问题 (2009/11/27)">Button标签鼠标点击事件的触发源问题</a> (2009/11/27)</li><li><a href="http://www.imkevinyang.com/2009/03/ie%e4%b8%ad%e4%bd%bf%e7%94%a8windowopen%e6%89%93%e5%bc%80%e6%96%b0%e7%aa%97%e5%8f%a3%e6%97%b6%e6%97%a0%e6%b3%95%e8%8e%b7%e5%8f%96referrer%e5%af%b9%e8%b1%a1.html" title="IE中使用window.open打开新窗口时无法获取Referrer对象 (2009/03/07)">IE中使用window.open打开新窗口时无法获取Referrer对象</a> (2009/03/07)</li><li><a href="http://www.imkevinyang.com/2009/07/javascript-%e4%b8%ad%e7%9a%84false%e9%9b%b6%e5%80%bcnullundefined%e5%92%8c%e7%a9%ba%e5%ad%97%e7%ac%a6%e4%b8%b2%e5%af%b9%e8%b1%a1.html" title="Javascript 中的false,零值,null,undefined和空字符串对象 (2009/07/07)">Javascript 中的false,零值,null,undefined和空字符串对象</a> (2009/07/07)</li><li><a href="http://www.imkevinyang.com/2009/05/javascript%e4%b8%ad%e8%8e%b7%e5%8f%96%e5%87%ba%e9%94%99%e4%bb%a3%e7%a0%81%e6%89%80%e5%9c%a8%e6%96%87%e4%bb%b6%e5%8f%8a%e8%a1%8c%e6%95%b0.html" title="Javascript中获取出错代码所在文件及行数 (2009/05/18)">Javascript中获取出错代码所在文件及行数</a> (2009/05/18)</li><li><a href="http://www.imkevinyang.com/2009/04/javascript%e5%ad%97%e7%ac%a6%e4%b8%b2%e5%93%88%e5%b8%8c%e5%87%bd%e6%95%b0.html" title="Javascript字符串哈希函数 (2009/04/11)">Javascript字符串哈希函数</a> (2009/04/11)</li><li><a href="http://www.imkevinyang.com/2010/05/%e4%b8%ba%e4%bb%80%e4%b9%88iis77-5%e7%9a%84gzip%e4%b8%8d%e8%b5%b7%e4%bd%9c%e7%94%a8.html" title="为什么IIS7/7.5的Gzip不起作用 (2010/05/08)">为什么IIS7/7.5的Gzip不起作用</a> (2010/05/08)</li><li><a href="http://www.imkevinyang.com/2009/09/%e4%bd%bf%e7%94%a8%e7%9b%b8%e5%af%b9url%e6%97%a0%e7%bc%9d%e5%88%87%e6%8d%a2http-https.html" title="使用相对Url无缝切换HTTP-HTTPS (2009/09/18)">使用相对Url无缝切换HTTP-HTTPS</a> (2009/09/18)</li><li><a href="http://www.imkevinyang.com/2010/07/%e5%87%a0%e4%b8%aa%e6%9c%89%e8%b6%a3%e7%9a%84javascript-hack.html" title="几个有趣的Javascript Hack (2010/07/23)">几个有趣的Javascript Hack</a> (2010/07/23)</li><li><a href="http://www.imkevinyang.com/2010/05/%e5%bd%93google-analytics%e3%80%81firefox%e5%92%8ciis%e8%b5%b0%e5%88%b0%e4%ba%86%e4%b8%80%e8%b5%b7.html" title="当Google Analytics、Firefox和IIS走到了一起&#8230; (2010/05/29)">当Google Analytics、Firefox和IIS走到了一起&#8230;</a> (2010/05/29)</li><li><a href="http://www.imkevinyang.com/2010/02/%e5%bd%93%e5%89%8d%e6%97%a5%e6%9c%9f110%e5%b9%b4.html" title="当前日期110年 (2010/02/12)">当前日期110年</a> (2010/02/12)</li></ul>]]></content:encoded> <wfw:commentRss>http://www.imkevinyang.com/2009/06/javascript%e6%93%8d%e7%ba%b5cookie.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Visual Studio统计有效代码行数</title><link>http://www.imkevinyang.com/2009/05/visual-studio%e7%bb%9f%e8%ae%a1%e6%9c%89%e6%95%88%e4%bb%a3%e7%a0%81%e8%a1%8c%e6%95%b0.html</link> <comments>http://www.imkevinyang.com/2009/05/visual-studio%e7%bb%9f%e8%ae%a1%e6%9c%89%e6%95%88%e4%bb%a3%e7%a0%81%e8%a1%8c%e6%95%b0.html#comments</comments> <pubDate>Fri, 22 May 2009 12:53:00 +0000</pubDate> <dc:creator>Kevin Yang</dc:creator> <category><![CDATA[代码库]]></category> <category><![CDATA[Visual Studio]]></category> <category><![CDATA[代码行]]></category> <category><![CDATA[统计]]></category><guid isPermaLink="false">http://www.imkevinyang.com/2009/05/visual-studio%e7%bb%9f%e8%ae%a1%e6%9c%89%e6%95%88%e4%bb%a3%e7%a0%81%e8%a1%8c%e6%95%b0.html</guid> <description><![CDATA[<p>看网上有人专门做了一些小工具，用来统计代码行数。感觉不是很必要。因为Visual Studio中的搜索功能支持正则表达式（虽然语法比较诡异），我们完全可以通过正则表达式来遍历整个解决方案从而获得代码行数。</p><pre class="csharpcode">^:b*[^:b#/]+.*$</pre><p>需要注意：#开头和/开头或者空行都不计入代码量。</p><p>如果需要只统计代码文件的代码量，可以按住Ctrl+Shift+F之后选择查找文件的类型。</p>标签：<a href="http://www.imkevinyang.com/tags/visual-studio" title="Visual Studio" rel="tag">Visual Studio</a>, <a href="http://www.imkevinyang.com/categories/techarticles/codebase" title="代码库" rel="tag">代码库</a>, <a href="http://www.imkevinyang.com/tags/%e4%bb%a3%e7%a0%81%e8%a1%8c" title="代码行" rel="tag">代码行</a>, <a href="http://www.imkevinyang.com/tags/%e7%bb%9f%e8%ae%a1" title="统计" rel="tag">统计</a><br /><h4 style="background-color:#3B3B3B;border-bottom:2px groove gray;color:#F2F2F2;margin-top:20px;padding:6px 6px 6px 15px;margin:20px 0px 0px 0px">你可能对下面的文章感&#8230;</h4>]]></description> <content:encoded><![CDATA[<p>看网上有人专门做了一些小工具，用来统计代码行数。感觉不是很必要。因为Visual Studio中的搜索功能支持正则表达式（虽然语法比较诡异），我们完全可以通过正则表达式来遍历整个解决方案从而获得代码行数。</p><pre class="csharpcode">^:b*[^:b#/]+.*$</pre><p>需要注意：#开头和/开头或者空行都不计入代码量。</p><p>如果需要只统计代码文件的代码量，可以按住Ctrl+Shift+F之后选择查找文件的类型。</p>标签：<a href="http://www.imkevinyang.com/tags/visual-studio" title="Visual Studio" rel="tag">Visual Studio</a>, <a href="http://www.imkevinyang.com/categories/techarticles/codebase" title="代码库" rel="tag">代码库</a>, <a href="http://www.imkevinyang.com/tags/%e4%bb%a3%e7%a0%81%e8%a1%8c" title="代码行" rel="tag">代码行</a>, <a href="http://www.imkevinyang.com/tags/%e7%bb%9f%e8%ae%a1" title="统计" rel="tag">统计</a><br /><h4 style="background-color:#3B3B3B;border-bottom:2px groove gray;color:#F2F2F2;margin-top:20px;padding:6px 6px 6px 15px;margin:20px 0px 0px 0px">你可能对下面的文章感兴趣</h4><ul class="st-related-posts"><li><a href="http://www.imkevinyang.com/2009/09/visual-assist%e4%bb%a3%e7%a0%81%e6%8f%90%e7%a4%ba%e4%bd%bf%e7%94%a8%e7%9a%84%e5%ad%97%e7%ac%a6%e4%b8%b2%e6%a8%a1%e7%b3%8a%e5%8c%b9%e9%85%8d%e7%ae%97%e6%b3%95.html" title="Visual Assist代码提示使用的字符串模糊匹配算法 (2009/09/28)">Visual Assist代码提示使用的字符串模糊匹配算法</a> (2009/09/28)</li><li><a href="http://www.imkevinyang.com/2009/09/visual-studio%e5%b0%8f%e8%b4%b4%e5%a3%ab%e5%8a%a0%e4%ba%86try-catch%e4%b9%9f%e8%83%bd%e8%87%aa%e5%8a%a8%e5%ae%9a%e4%bd%8d%e5%88%b0%e5%bc%82%e5%b8%b8%e4%bb%a3%e7%a0%81.html" title="Visual Studio小贴士&mdash;&mdash;加了Try-Catch也能自动定位到异常代码 (2009/09/18)">Visual Studio小贴士&mdash;&mdash;加了Try-Catch也能自动定位到异常代码</a> (2009/09/18)</li><li><a href="http://www.imkevinyang.com/2010/07/visual-studio%e7%bc%96%e8%be%91%e5%99%a8%e4%b8%80%e6%ac%a1%e7%bc%a9%e8%bf%9b%e5%8f%8d%e7%bc%a9%e8%bf%9b4%e4%b8%aa%e7%a9%ba%e6%a0%bc.html" title="Visual Studio编辑器一次缩进/反缩进4个空格 (2010/07/04)">Visual Studio编辑器一次缩进/反缩进4个空格</a> (2010/07/04)</li><li><a href="http://www.imkevinyang.com/2010/05/vs2010%e7%9a%84ui%e8%ae%be%e8%ae%a1%e5%a4%b1%e8%af%af.html" title="VS2010的UI设计失误 (2010/05/31)">VS2010的UI设计失误</a> (2010/05/31)</li><li><a href="http://www.imkevinyang.com/2010/02/%e4%bd%bf%e7%94%a8feedburner%e7%83%a7%e5%88%b6rss%e6%9c%80%e5%a5%bd%e7%a6%81%e7%94%a8itemlinkclicks%e7%bb%9f%e8%ae%a1.html" title="使用FeedBurner烧制RSS最好禁用ItemLinkClicks统计 (2010/02/15)">使用FeedBurner烧制RSS最好禁用ItemLinkClicks统计</a> (2010/02/15)</li><li><a href="http://www.imkevinyang.com/2009/09/%e8%a7%a3%e5%86%b3silverlight%e6%97%a0%e6%b3%95%e8%b0%83%e8%af%95%e7%9a%84%e9%97%ae%e9%a2%98.html" title="解决Silverlight无法调试的问题 (2009/09/01)">解决Silverlight无法调试的问题</a> (2009/09/01)</li></ul>]]></content:encoded> <wfw:commentRss>http://www.imkevinyang.com/2009/05/visual-studio%e7%bb%9f%e8%ae%a1%e6%9c%89%e6%95%88%e4%bb%a3%e7%a0%81%e8%a1%8c%e6%95%b0.html/feed</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>IDisposable最佳实现模式</title><link>http://www.imkevinyang.com/2009/05/idisposable%e6%9c%80%e4%bd%b3%e5%ae%9e%e7%8e%b0%e6%a8%a1%e5%bc%8f.html</link> <comments>http://www.imkevinyang.com/2009/05/idisposable%e6%9c%80%e4%bd%b3%e5%ae%9e%e7%8e%b0%e6%a8%a1%e5%bc%8f.html#comments</comments> <pubDate>Sun, 17 May 2009 16:27:26 +0000</pubDate> <dc:creator>Kevin Yang</dc:creator> <category><![CDATA[代码库]]></category> <category><![CDATA[IDisposable]]></category> <category><![CDATA[设计模式]]></category> <category><![CDATA[释放资源]]></category><guid isPermaLink="false">http://www.imkevinyang.com/2009/05/idisposable%e6%9c%80%e4%bd%b3%e5%ae%9e%e7%8e%b0%e6%a8%a1%e5%bc%8f.html</guid> <description><![CDATA[<pre class="csharpcode"><span class="rem">/// &#60;summary&#62;</span>
<span class="rem">/// 实现了IDisposable接口的类。</span>
<span class="rem">/// &#60;/summary&#62;</span>
<span class="kwrd">public</span> <span class="kwrd">class</span> ConnectionManager : IDisposable
{
    <span class="preproc">#region</span> IDisposable模式

    <span class="rem">/// &#60;summary&#62;</span>
    <span class="rem">/// 析构函数。</span>
    <span class="rem">/// &#60;/summary&#62;</span>
    ~ConnectionManager()
    {
        Dispose(<span class="kwrd">false</span>);
    }

    <span class="rem">/// &#60;summary&#62;&#8230;</span></pre>]]></description> <content:encoded><![CDATA[<pre class="csharpcode"><span class="rem">/// &lt;summary&gt;</span>
<span class="rem">/// 实现了IDisposable接口的类。</span>
<span class="rem">/// &lt;/summary&gt;</span>
<span class="kwrd">public</span> <span class="kwrd">class</span> ConnectionManager : IDisposable
{
    <span class="preproc">#region</span> IDisposable模式

    <span class="rem">/// &lt;summary&gt;</span>
    <span class="rem">/// 析构函数。</span>
    <span class="rem">/// &lt;/summary&gt;</span>
    ~ConnectionManager()
    {
        Dispose(<span class="kwrd">false</span>);
    }

    <span class="rem">/// &lt;summary&gt;</span>
    <span class="rem">/// 真正的释放资源函数。</span>
    <span class="rem">/// &lt;/summary&gt;</span>
    <span class="rem">/// &lt;param name=&quot;disposing&quot;&gt;&lt;/param&gt;</span>
    <span class="kwrd">protected</span> <span class="kwrd">virtual</span> <span class="kwrd">void</span> Dispose(<span class="kwrd">bool</span> disposing)
    {
        <span class="kwrd">if</span> (disposing)
        {
            <span class="rem">// release all the resources no longer needed</span>
            <span class="rem">// ...</span>
        }
    }

    <span class="rem">/// &lt;summary&gt;</span>
    <span class="rem">/// 提供使用者一个显式释放资源的方法。</span>
    <span class="rem">/// &lt;/summary&gt;</span>
    <span class="kwrd">public</span> <span class="kwrd">void</span> Dispose()
    {
        Dispose(<span class="kwrd">true</span>);
        <span class="rem">// Tell the GC not to execute the deconstructor any more</span>
        GC.SuppressFinalize(<span class="kwrd">this</span>);
    }
}</pre><p align="right">—— <a href="http://www.imkevinyang.com">Kevin Yang</a></p>标签：<a href="http://www.imkevinyang.com/tags/idisposable" title="IDisposable" rel="tag">IDisposable</a>, <a href="http://www.imkevinyang.com/categories/techarticles/codebase" title="代码库" rel="tag">代码库</a>, <a href="http://www.imkevinyang.com/tags/%e8%ae%be%e8%ae%a1%e6%a8%a1%e5%bc%8f" title="设计模式" rel="tag">设计模式</a>, <a href="http://www.imkevinyang.com/tags/%e9%87%8a%e6%94%be%e8%b5%84%e6%ba%90" title="释放资源" rel="tag">释放资源</a><br /><h4 style="background-color:#3B3B3B;border-bottom:2px groove gray;color:#F2F2F2;margin-top:20px;padding:6px 6px 6px 15px;margin:20px 0px 0px 0px">你可能对下面的文章感兴趣</h4><ul class="st-related-posts"><li>无相关日志</li></ul>]]></content:encoded> <wfw:commentRss>http://www.imkevinyang.com/2009/05/idisposable%e6%9c%80%e4%bd%b3%e5%ae%9e%e7%8e%b0%e6%a8%a1%e5%bc%8f.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Javascript中获取出错代码所在文件及行数</title><link>http://www.imkevinyang.com/2009/05/javascript%e4%b8%ad%e8%8e%b7%e5%8f%96%e5%87%ba%e9%94%99%e4%bb%a3%e7%a0%81%e6%89%80%e5%9c%a8%e6%96%87%e4%bb%b6%e5%8f%8a%e8%a1%8c%e6%95%b0.html</link> <comments>http://www.imkevinyang.com/2009/05/javascript%e4%b8%ad%e8%8e%b7%e5%8f%96%e5%87%ba%e9%94%99%e4%bb%a3%e7%a0%81%e6%89%80%e5%9c%a8%e6%96%87%e4%bb%b6%e5%8f%8a%e8%a1%8c%e6%95%b0.html#comments</comments> <pubDate>Sun, 17 May 2009 16:00:50 +0000</pubDate> <dc:creator>Kevin Yang</dc:creator> <category><![CDATA[Web传统技术]]></category> <category><![CDATA[代码库]]></category> <category><![CDATA[技术随笔]]></category> <category><![CDATA[Javascript]]></category> <category><![CDATA[出错文件名]]></category> <category><![CDATA[出错行数]]></category> <category><![CDATA[异常]]></category> <category><![CDATA[异常处理机制]]></category> <category><![CDATA[错误]]></category><guid isPermaLink="false">http://www.imkevinyang.com/2009/05/javascript%e4%b8%ad%e8%8e%b7%e5%8f%96%e5%87%ba%e9%94%99%e4%bb%a3%e7%a0%81%e6%89%80%e5%9c%a8%e6%96%87%e4%bb%b6%e5%8f%8a%e8%a1%8c%e6%95%b0.html</guid> <description><![CDATA[<p>之前在做一个Javascript的日志控制台功能模块，希望能够在Javascript代码出错时捕获此错误，并将出错的文件及相应的行数打印到控制台并汇报给服务器。原先使用的是try-catch的方式，在catch语句中，我们会收到一个Error对象（我们也可以抛出一个自定义异常对象）。Firefox中的Error对象拥有如下属性：</p><ul><li><b>message&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#8230;</b></li></ul>]]></description> <content:encoded><![CDATA[<p>之前在做一个Javascript的日志控制台功能模块，希望能够在Javascript代码出错时捕获此错误，并将出错的文件及相应的行数打印到控制台并汇报给服务器。原先使用的是try-catch的方式，在catch语句中，我们会收到一个Error对象（我们也可以抛出一个自定义异常对象）。Firefox中的Error对象拥有如下属性：</p><ul><li><b>message&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </b>—— 错误提示信息</li><li><b>fileName&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </b>—— 表示出错代码所在文件</li><li><b>lineNumber&#160;&#160;&#160;&#160;&#160; </b>—— 出错代码所在行数</li><li><b>stack&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </b>—— 出错堆栈信息</li><li><b>name&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </b>—— 异常对象名/类型</li></ul><p>但是在IE下，Error对象只有如下属性：</p><ul><li><b>name&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </b>—— 异常对象名/类型，和Firefox中显示的名称可能不同</li><li><b>message&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </b>—— 错误提示信息</li><li><b>description&#160;&#160;&#160;&#160;&#160; </b>—— 和message属性相同</li><li><b>number&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </b>—— ErrorCode，错误代码，对于普通开发人员来说基本没意义</li></ul><p>也就是说在IE下我们无法获得最希望得到的错误代码所在文件名及出错行数的信息。后来在学校论坛求教之后知道了window（全局对象）下有一个onerror的对象。这个对象或者说window的属性绑定的是一个错误处理函数。脚本中任何未被捕获的错误最终都会扩散到window这一层，然后被onerror绑定的处理函数所处理。查了一下相关文档，发现绑定的错误处理函数会接受到三个参数：</p><pre class="csharpcode"><span class="kwrd">function</span> onError(message,url,line){}</pre><p>非常欣慰的是，这个机制兼容IE和Firefox。</p><p>下面举一个例子：</p><pre class="csharpcode"><span class="kwrd">function</span> doSomething(){
    <span class="kwrd">var</span> lastErrorHandler = window.onerror;
    window.onerror = <span class="kwrd">function</span>(message,url,line){
        <span class="rem">// 汇报错误</span>
        alert(<span class="str">&quot;执行&quot;</span> + url + <span class="str">&quot;文件中的第&quot;</span> + line + <span class="str">&quot;行代码出错，错误信息：&quot;</span> + message);
        window.onerror = lastErrorHandler;
        <span class="rem">// 不希望此错误继续扩散</span>
        <span class="kwrd">return</span> <span class="kwrd">true</span>;
    };
    <span class="rem">// 不小心出错了...</span>
    sldfjlskdjflj;

    window.onerror = lastErrorHandler;
}
doSomething();</pre><p><img style="border-right-width: 0px; margin: 0px 0px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.imkevinyang.com/wp-content/uploads/2009/05/image-thumb2.png" width="595" height="113" /></p><p>这里之所以没用attachEvent的方式，是因为detach比较不方便。如果希望此错误处理变成全局的，那么可以使用attachEvent（Firefox下是addEventListener）的方式。</p><p>需要注意，Safari（Chrome使用的也是一样的内核）和Opera都不支持此机制，这两个核心的浏览器都不支持全局的error事件，因此没法使用这种方式来捕获异常信息，只能使用try-catch的方式。</p><p>试验了一下，在Safari中的Error对象拥有如下属性：</p><ul><li><b>message&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </b>—— 错误提示信息</li><li><b>line&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </b>—— 出错代码所在行数</li><li><b>sourceId&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </b>—— 一个数字，不明白什么意思</li><li><strong>sourceURL&#160;&#160;&#160;&#160;&#160;&#160; ——</strong> 表示出错代码所在文件</li><li><strong>name</strong>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; —— 异常对象名/类型</li></ul><p>Opera下的Error对象拥有如下属性：</p><ul><li><b>message&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </b>—— 错误提示信息</li><li><strong>opera#sourceloc&#160;&#160;&#160; </strong>—— 出错代码所在行数</li><li><b>stacktrace&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </b>—— 出错堆栈信息</li></ul><p>这两个浏览器中的Error对象已经提供了足够的信息给我们调试使用了。下面要做的就是把这两种方式结合起来，使之在不同浏览器下都能很好的汇报这些错误。</p><p>下面这段代码封装了在不同浏览器之上汇报异常的功能：</p><pre class="csharpcode">&lt;script type=”text/javascript”&gt;
<span class="kwrd">function</span> reportError(err){
    <span class="kwrd">var</span> errMsg = [];
    <span class="kwrd">for</span>(<span class="kwrd">var</span> p <span class="kwrd">in</span> err){
        <span class="kwrd">if</span>(err.hasOwnProperty(p)){
            errMsg.push(p + <span class="str">&quot;=&quot;</span> + err[p]);
        }
    }
    alert(errMsg.join(<span class="str">&quot;\n&quot;</span>));
}
<span class="kwrd">function</span> doSomething(){
    <span class="kwrd">var</span> lastErrorHandler = window.onerror;
    window.onerror = <span class="kwrd">function</span>(message, url, line){
        <span class="rem">// 汇报错误</span>
        reportError({
            message: message,
            url: url,
            line: line
        });
        window.onerror = lastErrorHandler;
        <span class="rem">// 不希望此错误继续扩散</span>
     <span class="kwrd">return</span> <span class="kwrd">true</span>;
    }

    <span class="rem">// 不小心出错了...</span>
    sldfjlskdjflj;

    window.onerror = lastErrorHandler;
}
<span class="kwrd">try</span>{
    <span class="rem">// 执行可能出错的代码</span>
   doSomething();
}<span class="kwrd">catch</span>(e){
    <span class="kwrd">if</span>(<span class="str">&quot;\v&quot;</span>==<span class="str">&quot;v&quot;</span>){
        <span class="rem">// 对于IE直接让此错误扩散到最外层</span>
        <span class="kwrd">throw</span> e;
    }<span class="kwrd">else</span>{
        <span class="rem">// 对于其他任意浏览器直接汇报此异常对象</span>
        reportError(e);
    }
}
&lt;/script&gt;</pre><p>&#160;</p><p align="right">—— <a href="http://www.imkevinyang.com">Kevin Yang</a></p>标签：<a href="http://www.imkevinyang.com/tags/javascript" title="Javascript" rel="tag">Javascript</a>, <a href="http://www.imkevinyang.com/categories/techarticles/web%e4%bc%a0%e7%bb%9f%e6%8a%80%e6%9c%af" title="Web传统技术" rel="tag">Web传统技术</a>, <a href="http://www.imkevinyang.com/categories/techarticles/codebase" title="代码库" rel="tag">代码库</a>, <a href="http://www.imkevinyang.com/tags/%e5%87%ba%e9%94%99%e6%96%87%e4%bb%b6%e5%90%8d" title="出错文件名" rel="tag">出错文件名</a>, <a href="http://www.imkevinyang.com/tags/%e5%87%ba%e9%94%99%e8%a1%8c%e6%95%b0" title="出错行数" rel="tag">出错行数</a>, <a href="http://www.imkevinyang.com/tags/%e5%bc%82%e5%b8%b8" title="异常" rel="tag">异常</a>, <a href="http://www.imkevinyang.com/tags/%e5%bc%82%e5%b8%b8%e5%a4%84%e7%90%86%e6%9c%ba%e5%88%b6" title="异常处理机制" rel="tag">异常处理机制</a>, <a href="http://www.imkevinyang.com/categories/techarticles" title="技术随笔" rel="tag">技术随笔</a>, <a href="http://www.imkevinyang.com/tags/%e9%94%99%e8%af%af" title="错误" rel="tag">错误</a><br /><h4 style="background-color:#3B3B3B;border-bottom:2px groove gray;color:#F2F2F2;margin-top:20px;padding:6px 6px 6px 15px;margin:20px 0px 0px 0px">你可能对下面的文章感兴趣</h4><ul class="st-related-posts"><li><a href="http://www.imkevinyang.com/2009/11/button%e6%a0%87%e7%ad%be%e9%bc%a0%e6%a0%87%e7%82%b9%e5%87%bb%e4%ba%8b%e4%bb%b6%e7%9a%84%e8%a7%a6%e5%8f%91%e6%ba%90%e9%97%ae%e9%a2%98.html" title="Button标签鼠标点击事件的触发源问题 (2009/11/27)">Button标签鼠标点击事件的触发源问题</a> (2009/11/27)</li><li><a href="http://www.imkevinyang.com/2009/03/ie%e4%b8%ad%e4%bd%bf%e7%94%a8windowopen%e6%89%93%e5%bc%80%e6%96%b0%e7%aa%97%e5%8f%a3%e6%97%b6%e6%97%a0%e6%b3%95%e8%8e%b7%e5%8f%96referrer%e5%af%b9%e8%b1%a1.html" title="IE中使用window.open打开新窗口时无法获取Referrer对象 (2009/03/07)">IE中使用window.open打开新窗口时无法获取Referrer对象</a> (2009/03/07)</li><li><a href="http://www.imkevinyang.com/2009/07/javascript-%e4%b8%ad%e7%9a%84false%e9%9b%b6%e5%80%bcnullundefined%e5%92%8c%e7%a9%ba%e5%ad%97%e7%ac%a6%e4%b8%b2%e5%af%b9%e8%b1%a1.html" title="Javascript 中的false,零值,null,undefined和空字符串对象 (2009/07/07)">Javascript 中的false,零值,null,undefined和空字符串对象</a> (2009/07/07)</li><li><a href="http://www.imkevinyang.com/2009/04/javascript%e5%ad%97%e7%ac%a6%e4%b8%b2%e5%93%88%e5%b8%8c%e5%87%bd%e6%95%b0.html" title="Javascript字符串哈希函数 (2009/04/11)">Javascript字符串哈希函数</a> (2009/04/11)</li><li><a href="http://www.imkevinyang.com/2009/06/javascript%e6%93%8d%e7%ba%b5cookie.html" title="Javascript操纵Cookie (2009/06/11)">Javascript操纵Cookie</a> (2009/06/11)</li><li><a href="http://www.imkevinyang.com/2009/09/visual-studio%e5%b0%8f%e8%b4%b4%e5%a3%ab%e5%8a%a0%e4%ba%86try-catch%e4%b9%9f%e8%83%bd%e8%87%aa%e5%8a%a8%e5%ae%9a%e4%bd%8d%e5%88%b0%e5%bc%82%e5%b8%b8%e4%bb%a3%e7%a0%81.html" title="Visual Studio小贴士&mdash;&mdash;加了Try-Catch也能自动定位到异常代码 (2009/09/18)">Visual Studio小贴士&mdash;&mdash;加了Try-Catch也能自动定位到异常代码</a> (2009/09/18)</li><li><a href="http://www.imkevinyang.com/2010/05/%e4%b8%ba%e4%bb%80%e4%b9%88iis77-5%e7%9a%84gzip%e4%b8%8d%e8%b5%b7%e4%bd%9c%e7%94%a8.html" title="为什么IIS7/7.5的Gzip不起作用 (2010/05/08)">为什么IIS7/7.5的Gzip不起作用</a> (2010/05/08)</li><li><a href="http://www.imkevinyang.com/2009/09/%e4%bd%bf%e7%94%a8%e7%9b%b8%e5%af%b9url%e6%97%a0%e7%bc%9d%e5%88%87%e6%8d%a2http-https.html" title="使用相对Url无缝切换HTTP-HTTPS (2009/09/18)">使用相对Url无缝切换HTTP-HTTPS</a> (2009/09/18)</li><li><a href="http://www.imkevinyang.com/2010/07/%e5%87%a0%e4%b8%aa%e6%9c%89%e8%b6%a3%e7%9a%84javascript-hack.html" title="几个有趣的Javascript Hack (2010/07/23)">几个有趣的Javascript Hack</a> (2010/07/23)</li><li><a href="http://www.imkevinyang.com/2010/02/%e5%bd%93%e5%89%8d%e6%97%a5%e6%9c%9f110%e5%b9%b4.html" title="当前日期110年 (2010/02/12)">当前日期110年</a> (2010/02/12)</li></ul>]]></content:encoded> <wfw:commentRss>http://www.imkevinyang.com/2009/05/javascript%e4%b8%ad%e8%8e%b7%e5%8f%96%e5%87%ba%e9%94%99%e4%bb%a3%e7%a0%81%e6%89%80%e5%9c%a8%e6%96%87%e4%bb%b6%e5%8f%8a%e8%a1%8c%e6%95%b0.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>使用VBA函数在Excel单元格中生成拼音缩写</title><link>http://www.imkevinyang.com/2009/05/%e4%bd%bf%e7%94%a8vba%e5%87%bd%e6%95%b0%e5%9c%a8excel%e5%8d%95%e5%85%83%e6%a0%bc%e4%b8%ad%e7%94%9f%e6%88%90%e6%8b%bc%e9%9f%b3%e7%bc%a9%e5%86%99.html</link> <comments>http://www.imkevinyang.com/2009/05/%e4%bd%bf%e7%94%a8vba%e5%87%bd%e6%95%b0%e5%9c%a8excel%e5%8d%95%e5%85%83%e6%a0%bc%e4%b8%ad%e7%94%9f%e6%88%90%e6%8b%bc%e9%9f%b3%e7%bc%a9%e5%86%99.html#comments</comments> <pubDate>Fri, 15 May 2009 07:24:45 +0000</pubDate> <dc:creator>Kevin Yang</dc:creator> <category><![CDATA[代码库]]></category> <category><![CDATA[Excel]]></category> <category><![CDATA[Office]]></category> <category><![CDATA[VBA]]></category> <category><![CDATA[函数]]></category> <category><![CDATA[拼音]]></category><guid isPermaLink="false">http://www.imkevinyang.com/2009/05/%e4%bd%bf%e7%94%a8vba%e5%87%bd%e6%95%b0%e5%9c%a8excel%e5%8d%95%e5%85%83%e6%a0%bc%e4%b8%ad%e7%94%9f%e6%88%90%e6%8b%bc%e9%9f%b3%e7%bc%a9%e5%86%99.html</guid> <description><![CDATA[<pre class="csharpcode"><span class="kwrd">Function</span> PinYin(Hz <span class="kwrd">As</span> <span class="kwrd">String</span>)
  <span class="kwrd">Dim</span> PinMa <span class="kwrd">As</span> <span class="kwrd">String</span>
  <span class="kwrd">Dim</span> MyPinMa <span class="kwrd">As</span> <span class="kwrd">Variant</span>
  <span class="kwrd">Dim</span> Temp <span class="kwrd">As</span> <span class="kwrd">Integer</span>, i <span class="kwrd">As</span> <span class="kwrd">Integer</span>, j <span class="kwrd">As</span> <span class="kwrd">Integer</span>
  PinMa = <span class="str">&#34;a,20319,&#34;</span>
  PinMa = PinMa &#38; <span class="str">&#34;b,20283,&#34;</span>
  PinMa = PinMa &#38; <span class="str">&#34;c,19775,&#34;</span>
  PinMa = PinMa &#38; <span class="str">&#34;d&#8230;</span></pre>]]></description> <content:encoded><![CDATA[<pre class="csharpcode"><span class="kwrd">Function</span> PinYin(Hz <span class="kwrd">As</span> <span class="kwrd">String</span>)
  <span class="kwrd">Dim</span> PinMa <span class="kwrd">As</span> <span class="kwrd">String</span>
  <span class="kwrd">Dim</span> MyPinMa <span class="kwrd">As</span> <span class="kwrd">Variant</span>
  <span class="kwrd">Dim</span> Temp <span class="kwrd">As</span> <span class="kwrd">Integer</span>, i <span class="kwrd">As</span> <span class="kwrd">Integer</span>, j <span class="kwrd">As</span> <span class="kwrd">Integer</span>
  PinMa = <span class="str">&quot;a,20319,&quot;</span>
  PinMa = PinMa &amp; <span class="str">&quot;b,20283,&quot;</span>
  PinMa = PinMa &amp; <span class="str">&quot;c,19775,&quot;</span>
  PinMa = PinMa &amp; <span class="str">&quot;d,19218,&quot;</span>
  PinMa = PinMa &amp; <span class="str">&quot;e,18710,&quot;</span>
  PinMa = PinMa &amp; <span class="str">&quot;f,18526,&quot;</span>
  PinMa = PinMa &amp; <span class="str">&quot;g,18239,&quot;</span>
  PinMa = PinMa &amp; <span class="str">&quot;h,17922,&quot;</span>
  PinMa = PinMa &amp; <span class="str">&quot;j,17417,&quot;</span>
  PinMa = PinMa &amp; <span class="str">&quot;k,16474,&quot;</span>
  PinMa = PinMa &amp; <span class="str">&quot;l,16212,&quot;</span>
  PinMa = PinMa &amp; <span class="str">&quot;m,15640,&quot;</span>
  PinMa = PinMa &amp; <span class="str">&quot;n,15165,&quot;</span>
  PinMa = PinMa &amp; <span class="str">&quot;o,14922,&quot;</span>
  PinMa = PinMa &amp; <span class="str">&quot;p,14914,&quot;</span>
  PinMa = PinMa &amp; <span class="str">&quot;q,14630,&quot;</span>
  PinMa = PinMa &amp; <span class="str">&quot;r,14149,&quot;</span>
  PinMa = PinMa &amp; <span class="str">&quot;s,14090,&quot;</span>
  PinMa = PinMa &amp; <span class="str">&quot;t,13318,&quot;</span>
  PinMa = PinMa &amp; <span class="str">&quot;w,12838,&quot;</span>
  PinMa = PinMa &amp; <span class="str">&quot;x,12556,&quot;</span>
  PinMa = PinMa &amp; <span class="str">&quot;y,11847,&quot;</span>
  PinMa = PinMa &amp; <span class="str">&quot;z,11055,&quot;</span>
  MyPinMa = Split(PinMa, <span class="str">&quot;,&quot;</span>)

  <span class="kwrd">For</span> i = 1 <span class="kwrd">To</span> Len(Hz)
  Temp = Asc(Mid(Hz, i, 1))
      <span class="kwrd">If</span> Temp &lt; 0 <span class="kwrd">Then</span>
        Temp = Abs(Temp)
        <span class="kwrd">For</span> j = 45 <span class="kwrd">To</span> 1 <span class="kwrd">Step</span> -2
            <span class="kwrd">If</span> Temp &lt;= Val(MyPinMa(j)) <span class="kwrd">Then</span>
                PinYin = PinYin &amp; MyPinMa(j - 1)
                <span class="kwrd">Exit</span> <span class="kwrd">For</span>
            <span class="kwrd">End</span> <span class="kwrd">If</span>
        <span class="kwrd">Next</span>
      <span class="kwrd">Else</span>
         <span class="rem">' 保留非汉字字符</span>
      PinYin = PinYin &amp; Mid(Hz, i, 1)
      <span class="kwrd">End</span> <span class="kwrd">If</span>
  <span class="kwrd">Next</span>
  PinYin = Trim(PinYin)
<span class="kwrd">End</span> Function</pre>标签：<a href="http://www.imkevinyang.com/tags/excel" title="Excel" rel="tag">Excel</a>, <a href="http://www.imkevinyang.com/tags/office" title="Office" rel="tag">Office</a>, <a href="http://www.imkevinyang.com/tags/vba" title="VBA" rel="tag">VBA</a>, <a href="http://www.imkevinyang.com/categories/techarticles/codebase" title="代码库" rel="tag">代码库</a>, <a href="http://www.imkevinyang.com/tags/%e5%87%bd%e6%95%b0" title="函数" rel="tag">函数</a>, <a href="http://www.imkevinyang.com/tags/%e6%8b%bc%e9%9f%b3" title="拼音" rel="tag">拼音</a><br /><h4 style="background-color:#3B3B3B;border-bottom:2px groove gray;color:#F2F2F2;margin-top:20px;padding:6px 6px 6px 15px;margin:20px 0px 0px 0px">你可能对下面的文章感兴趣</h4><ul class="st-related-posts"><li><a href="http://www.imkevinyang.com/2009/04/excel%e4%b8%ad%e4%bd%bf%e7%94%a8vba%e8%87%aa%e5%ae%9a%e4%b9%89%e5%87%bd%e6%95%b0%e5%af%b9%e5%ad%97%e7%ac%a6%e4%b8%b2%e7%bb%a7%e7%bb%adurl%e7%bc%96%e7%a0%81.html" title="Excel中使用VBA自定义函数对字符串进行Url编码（UTF-8） (2009/04/28)">Excel中使用VBA自定义函数对字符串进行Url编码（UTF-8）</a> (2009/04/28)</li><li><a href="http://www.imkevinyang.com/2009/04/javascript%e5%ad%97%e7%ac%a6%e4%b8%b2%e5%93%88%e5%b8%8c%e5%87%bd%e6%95%b0.html" title="Javascript字符串哈希函数 (2009/04/11)">Javascript字符串哈希函数</a> (2009/04/11)</li><li><a href="http://www.imkevinyang.com/2009/11/onenote-2010-beta2-%e4%bd%93%e9%aa%8c.html" title="OneNote 2010 beta2 体验 (2009/11/25)">OneNote 2010 beta2 体验</a> (2009/11/25)</li><li><a href="http://www.imkevinyang.com/2009/02/word%e7%bc%96%e8%be%91%e5%8c%ba%e9%bc%a0%e6%a0%87%e5%a4%b1%e6%95%88.html" title="Word编辑区鼠标失效 (2009/02/28)">Word编辑区鼠标失效</a> (2009/02/28)</li><li><a href="http://www.imkevinyang.com/2009/03/%e9%9a%8f%e6%9c%ba%e5%ad%97%e7%ac%a6%e4%b8%b2%e7%94%9f%e6%88%90%e5%87%bd%e6%95%b0.html" title="随机字符串生成函数 (2009/03/23)">随机字符串生成函数</a> (2009/03/23)</li></ul>]]></content:encoded> <wfw:commentRss>http://www.imkevinyang.com/2009/05/%e4%bd%bf%e7%94%a8vba%e5%87%bd%e6%95%b0%e5%9c%a8excel%e5%8d%95%e5%85%83%e6%a0%bc%e4%b8%ad%e7%94%9f%e6%88%90%e6%8b%bc%e9%9f%b3%e7%bc%a9%e5%86%99.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Robots.txt文件</title><link>http://www.imkevinyang.com/2009/05/robotstxt%e6%96%87%e4%bb%b6.html</link> <comments>http://www.imkevinyang.com/2009/05/robotstxt%e6%96%87%e4%bb%b6.html#comments</comments> <pubDate>Tue, 05 May 2009 17:46:18 +0000</pubDate> <dc:creator>Kevin Yang</dc:creator> <category><![CDATA[代码库]]></category> <category><![CDATA[Robots]]></category> <category><![CDATA[SEO]]></category> <category><![CDATA[搜索引擎]]></category><guid isPermaLink="false">http://www.imkevinyang.com/2009/05/robotstxt%e6%96%87%e4%bb%b6.html</guid> <description><![CDATA[<pre class="csharpcode"># Robots.txt file from http://www.imkevinyang.com
# All robots will spider the domain

User-agent: *
Disallow:
Sitemap: http://www.imkevinyang.com/sitemap.xml</pre>标签：<a href="http://www.imkevinyang.com/tags/robots" title="Robots" rel="tag">Robots</a>, <a href="http://www.imkevinyang.com/tags/seo" title="SEO" rel="tag">SEO</a>, <a href="http://www.imkevinyang.com/categories/techarticles/codebase" title="代码库" rel="tag">代码库</a>, <a href="http://www.imkevinyang.com/tags/%e6%90%9c%e7%b4%a2%e5%bc%95%e6%93%8e" title="搜索引擎" rel="tag">搜索引擎</a><br /><h4 style="background-color:#3B3B3B;border-bottom:2px groove gray;color:#F2F2F2;margin-top:20px;padding:6px 6px 6px 15px;margin:20px 0px 0px 0px">你可能对下面的文章感兴趣</h4><ul class="st-related-posts"><li><a href="http://www.imkevinyang.com/2009/05/2009%e5%b9%b4%e7%ac%ac%e4%b8%80%e5%ad%a3%e5%ba%a6%e4%b8%ad%e5%9b%bd%e6%90%9c%e7%b4%a2%e5%bc%95%e6%93%8e%e5%b8%82%e5%9c%ba%e8%90%a5%e6%94%b6%e4%bb%bd%e9%a2%9d.html" title="2009年第一季度中国搜索引擎市场营收份额 (2009/05/06)">2009年第一季度中国搜索引擎市场营收份额</a> (2009/05/06)</li><li><a href="http://www.imkevinyang.com/2009/03/google%e5%b7%a5%e7%a8%8b%e5%b8%88matt-cutts%e8%b0%88seo.html" title="Google工程师Matt Cutts谈SEO (2009/03/23)">Google工程师Mat&#8230;</a></li></ul>]]></description> <content:encoded><![CDATA[<pre class="csharpcode"># Robots.txt file from http://www.imkevinyang.com
# All robots will spider the domain

User-agent: *
Disallow:
Sitemap: http://www.imkevinyang.com/sitemap.xml</pre>标签：<a href="http://www.imkevinyang.com/tags/robots" title="Robots" rel="tag">Robots</a>, <a href="http://www.imkevinyang.com/tags/seo" title="SEO" rel="tag">SEO</a>, <a href="http://www.imkevinyang.com/categories/techarticles/codebase" title="代码库" rel="tag">代码库</a>, <a href="http://www.imkevinyang.com/tags/%e6%90%9c%e7%b4%a2%e5%bc%95%e6%93%8e" title="搜索引擎" rel="tag">搜索引擎</a><br /><h4 style="background-color:#3B3B3B;border-bottom:2px groove gray;color:#F2F2F2;margin-top:20px;padding:6px 6px 6px 15px;margin:20px 0px 0px 0px">你可能对下面的文章感兴趣</h4><ul class="st-related-posts"><li><a href="http://www.imkevinyang.com/2009/05/2009%e5%b9%b4%e7%ac%ac%e4%b8%80%e5%ad%a3%e5%ba%a6%e4%b8%ad%e5%9b%bd%e6%90%9c%e7%b4%a2%e5%bc%95%e6%93%8e%e5%b8%82%e5%9c%ba%e8%90%a5%e6%94%b6%e4%bb%bd%e9%a2%9d.html" title="2009年第一季度中国搜索引擎市场营收份额 (2009/05/06)">2009年第一季度中国搜索引擎市场营收份额</a> (2009/05/06)</li><li><a href="http://www.imkevinyang.com/2009/03/google%e5%b7%a5%e7%a8%8b%e5%b8%88matt-cutts%e8%b0%88seo.html" title="Google工程师Matt Cutts谈SEO (2009/03/23)">Google工程师Matt Cutts谈SEO</a> (2009/03/23)</li><li><a href="http://www.imkevinyang.com/2010/05/silverlight-4ria-services-%e6%90%9c%e7%b4%a2%e5%bc%95%e6%93%8e%e4%bc%98%e5%8c%96seo.html" title="Silverlight 4+RIA Services&#8211;搜索引擎优化(SEO) (2010/05/04)">Silverlight 4+RIA Services&#8211;搜索引擎优化(SEO)</a> (2010/05/04)</li><li><a href="http://www.imkevinyang.com/2009/04/silverlight-seo%ef%bc%88%e6%90%9c%e7%b4%a2%e5%bc%95%e6%93%8e%e4%bc%98%e5%8c%96%ef%bc%89%e7%99%bd%e7%9a%ae%e4%b9%a6.html" title="Silverlight SEO（搜索引擎优化）白皮书 (2009/04/06)">Silverlight SEO（搜索引擎优化）白皮书</a> (2009/04/06)</li><li><a href="http://www.imkevinyang.com/2009/07/%e4%b8%bawordpress%e5%8d%9a%e5%ae%a2%e5%8a%a0%e9%80%9f%e6%b8%85%e7%90%86%e4%bd%a0%e7%9a%84%e4%b8%bb%e9%a2%98%e6%96%87%e4%bb%b6.html" title="为Wordpress博客加速&mdash;&mdash;清理你的主题文件 (2009/07/26)">为Wordpress博客加速&mdash;&mdash;清理你的主题文件</a> (2009/07/26)</li><li><a href="http://www.imkevinyang.com/2009/03/%e5%85%8d%e8%b4%b9%e7%9a%84seo%e6%a3%80%e6%b5%8b%e5%b7%a5%e5%85%b7.html" title="免费的SEO检测工具 (2009/03/22)">免费的SEO检测工具</a> (2009/03/22)</li><li><a href="http://www.imkevinyang.com/2009/03/%e5%90%84%e5%a4%a7%e6%90%9c%e7%b4%a2%e5%bc%95%e6%93%8e%e6%94%b6%e5%bd%95%e5%85%a5%e5%8f%a3.html" title="各大搜索引擎收录入口 (2009/03/21)">各大搜索引擎收录入口</a> (2009/03/21)</li><li><a href="http://www.imkevinyang.com/2009/12/%e5%9c%a8wordpress%e4%b8%ad%e8%bd%bb%e6%9d%be%e9%9b%86%e6%88%90google%e8%87%aa%e5%ae%9a%e4%b9%89%e6%90%9c%e7%b4%a2%e5%bc%95%e6%93%8e.html" title="在Wordpress中轻松集成Google自定义搜索引擎 (2009/12/07)">在Wordpress中轻松集成Google自定义搜索引擎</a> (2009/12/07)</li><li><a href="http://www.imkevinyang.com/2009/05/%e5%a5%87%e6%80%aa%e7%9a%84%e7%99%be%e5%ba%a6%e6%94%b6%e5%bd%95%e7%8e%b0%e8%b1%a1.html" title="奇怪的百度收录现象 (2009/05/06)">奇怪的百度收录现象</a> (2009/05/06)</li><li><a href="http://www.imkevinyang.com/2009/06/%e6%90%9c%e7%b4%a2%e5%bc%95%e6%93%8e%e5%88%b0%e5%ba%95%e8%af%a5%e4%b8%ba%e8%b0%81%e6%9c%8d%e5%8a%a1.html" title="搜索引擎到底该为谁服务 (2009/06/26)">搜索引擎到底该为谁服务</a> (2009/06/26)</li></ul>]]></content:encoded> <wfw:commentRss>http://www.imkevinyang.com/2009/05/robotstxt%e6%96%87%e4%bb%b6.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Excel中使用VBA自定义函数对字符串进行Url编码（UTF-8）</title><link>http://www.imkevinyang.com/2009/04/excel%e4%b8%ad%e4%bd%bf%e7%94%a8vba%e8%87%aa%e5%ae%9a%e4%b9%89%e5%87%bd%e6%95%b0%e5%af%b9%e5%ad%97%e7%ac%a6%e4%b8%b2%e7%bb%a7%e7%bb%adurl%e7%bc%96%e7%a0%81.html</link> <comments>http://www.imkevinyang.com/2009/04/excel%e4%b8%ad%e4%bd%bf%e7%94%a8vba%e8%87%aa%e5%ae%9a%e4%b9%89%e5%87%bd%e6%95%b0%e5%af%b9%e5%ad%97%e7%ac%a6%e4%b8%b2%e7%bb%a7%e7%bb%adurl%e7%bc%96%e7%a0%81.html#comments</comments> <pubDate>Mon, 27 Apr 2009 18:09:58 +0000</pubDate> <dc:creator>Kevin Yang</dc:creator> <category><![CDATA[代码库]]></category> <category><![CDATA[Excel]]></category> <category><![CDATA[Office]]></category> <category><![CDATA[UrlEncode]]></category> <category><![CDATA[UTF-8]]></category> <category><![CDATA[VBA]]></category> <category><![CDATA[中文编码]]></category> <category><![CDATA[函数]]></category> <category><![CDATA[工具技巧]]></category> <category><![CDATA[技巧]]></category> <category><![CDATA[编解码]]></category> <category><![CDATA[自定义函数]]></category><guid isPermaLink="false">http://www.imkevinyang.com/2009/04/excel%e4%b8%ad%e4%bd%bf%e7%94%a8vba%e8%87%aa%e5%ae%9a%e4%b9%89%e5%87%bd%e6%95%b0%e5%af%b9%e5%ad%97%e7%ac%a6%e4%b8%b2%e7%bb%a7%e7%bb%adurl%e7%bc%96%e7%a0%81.html</guid> <description><![CDATA[<p>Excel是个非常强大的工具，工作中因为需要用到他老完成一些表格数据的处理，所以抽空学了一点小技巧。</p><p>VBA是Visual Basic Application的全称，我们在Office的产品家族里面会经常看到它的身影。甚至SQL Server里头也有它的足迹，善于使用这些VBA函数或者自定义一些函数能够帮我们实现一些看似很强大的功能而又不用花费太大的精力。</p><p><strong>步骤一. 打开Excel 2007中的Visual Basic编辑器</strong></p><p>在Excel 2007中的开发&#8230;</p>]]></description> <content:encoded><![CDATA[<p>Excel是个非常强大的工具，工作中因为需要用到他老完成一些表格数据的处理，所以抽空学了一点小技巧。</p><p>VBA是Visual Basic Application的全称，我们在Office的产品家族里面会经常看到它的身影。甚至SQL Server里头也有它的足迹，善于使用这些VBA函数或者自定义一些函数能够帮我们实现一些看似很强大的功能而又不用花费太大的精力。</p><p><strong>步骤一. 打开Excel 2007中的Visual Basic编辑器</strong></p><p>在Excel 2007中的开发工具菜单下，点击Visual Basic，即可弹出Visual Basic的编辑界面。默认情况下，这个开发工具在功能区是不显示的，需要在Excel设置中勾选上，如下图。</p><p><img style="border-right-width: 0px; margin: 0px 0px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.imkevinyang.com/wp-content/uploads/2009/04/image-thumb5.png" width="654" height="172" /></p><p><img style="border-right-width: 0px; margin: 0px 0px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.imkevinyang.com/wp-content/uploads/2009/04/image-thumb6.png" width="408" height="202" /></p><p><img style="border-right-width: 0px; margin: 0px 0px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.imkevinyang.com/wp-content/uploads/2009/04/image-thumb7.png" width="482" height="581" /></p><p><strong>步骤二. 编写自定义函数</strong></p><p>选择菜单-&gt;插入-&gt;模块，就会弹出一个编辑窗口，在其中输入下面代码，即可定义一个UrlEncode的函数。</p><pre class="csharpcode"><span class="kwrd">Public</span> <span class="kwrd">Function</span> UrlEncode(<span class="kwrd">ByRef</span> szString <span class="kwrd">As</span> <span class="kwrd">String</span>) <span class="kwrd">As</span> <span class="kwrd">String</span>
       <span class="kwrd">Dim</span> szChar   <span class="kwrd">As</span> <span class="kwrd">String</span>
       <span class="kwrd">Dim</span> szTemp   <span class="kwrd">As</span> <span class="kwrd">String</span>
       <span class="kwrd">Dim</span> szCode   <span class="kwrd">As</span> <span class="kwrd">String</span>
       <span class="kwrd">Dim</span> szHex    <span class="kwrd">As</span> <span class="kwrd">String</span>
       <span class="kwrd">Dim</span> szBin    <span class="kwrd">As</span> <span class="kwrd">String</span>
       <span class="kwrd">Dim</span> iCount1  <span class="kwrd">As</span> <span class="kwrd">Integer</span>
       <span class="kwrd">Dim</span> iCount2  <span class="kwrd">As</span> <span class="kwrd">Integer</span>
       <span class="kwrd">Dim</span> iStrLen1 <span class="kwrd">As</span> <span class="kwrd">Integer</span>
       <span class="kwrd">Dim</span> iStrLen2 <span class="kwrd">As</span> <span class="kwrd">Integer</span>
       <span class="kwrd">Dim</span> lResult  <span class="kwrd">As</span> <span class="kwrd">Long</span>
       <span class="kwrd">Dim</span> lAscVal  <span class="kwrd">As</span> <span class="kwrd">Long</span>
       szString = Trim$(szString)
       iStrLen1 = Len(szString)
       <span class="kwrd">For</span> iCount1 = 1 <span class="kwrd">To</span> iStrLen1
           szChar = Mid$(szString, iCount1, 1)
           lAscVal = AscW(szChar)
           <span class="kwrd">If</span> lAscVal &gt;= &amp;H0 <span class="kwrd">And</span> lAscVal &lt;= &amp;HFF <span class="kwrd">Then</span>
              <span class="kwrd">If</span> (lAscVal &gt;= &amp;H30 <span class="kwrd">And</span> lAscVal &lt;= &amp;H39) <span class="kwrd">Or</span> _
                 (lAscVal &gt;= &amp;H41 <span class="kwrd">And</span> lAscVal &lt;= &amp;H5A) <span class="kwrd">Or</span> _
                 (lAscVal &gt;= &amp;H61 <span class="kwrd">And</span> lAscVal &lt;= &amp;H7A) <span class="kwrd">Then</span>
                 szCode = szCode &amp; szChar
              <span class="kwrd">Else</span>

                 szCode = szCode &amp; <span class="str">&quot;%&quot;</span> &amp; Hex(AscW(szChar))
              <span class="kwrd">End</span> <span class="kwrd">If</span>
           <span class="kwrd">Else</span>
              szHex = Hex(AscW(szChar))
              iStrLen2 = Len(szHex)
              <span class="kwrd">For</span> iCount2 = 1 <span class="kwrd">To</span> iStrLen2
                  szChar = Mid$(szHex, iCount2, 1)
                  <span class="kwrd">Select</span> <span class="kwrd">Case</span> szChar
                         <span class="kwrd">Case</span> <span class="kwrd">Is</span> = <span class="str">&quot;0&quot;</span>
                              szBin = szBin &amp; <span class="str">&quot;0000&quot;</span>
                         <span class="kwrd">Case</span> <span class="kwrd">Is</span> = <span class="str">&quot;1&quot;</span>
                              szBin = szBin &amp; <span class="str">&quot;0001&quot;</span>
                         <span class="kwrd">Case</span> <span class="kwrd">Is</span> = <span class="str">&quot;2&quot;</span>
                              szBin = szBin &amp; <span class="str">&quot;0010&quot;</span>
                         <span class="kwrd">Case</span> <span class="kwrd">Is</span> = <span class="str">&quot;3&quot;</span>
                              szBin = szBin &amp; <span class="str">&quot;0011&quot;</span>
                         <span class="kwrd">Case</span> <span class="kwrd">Is</span> = <span class="str">&quot;4&quot;</span>
                              szBin = szBin &amp; <span class="str">&quot;0100&quot;</span>
                         <span class="kwrd">Case</span> <span class="kwrd">Is</span> = <span class="str">&quot;5&quot;</span>
                        szBin = szBin &amp; <span class="str">&quot;0101&quot;</span>
                         <span class="kwrd">Case</span> <span class="kwrd">Is</span> = <span class="str">&quot;6&quot;</span>
                              szBin = szBin &amp; <span class="str">&quot;0110&quot;</span>
                         <span class="kwrd">Case</span> <span class="kwrd">Is</span> = <span class="str">&quot;7&quot;</span>
                              szBin = szBin &amp; <span class="str">&quot;0111&quot;</span>
                         <span class="kwrd">Case</span> <span class="kwrd">Is</span> = <span class="str">&quot;8&quot;</span>
                              szBin = szBin &amp; <span class="str">&quot;1000&quot;</span>
                         <span class="kwrd">Case</span> <span class="kwrd">Is</span> = <span class="str">&quot;9&quot;</span>
                              szBin = szBin &amp; <span class="str">&quot;1001&quot;</span>
                         <span class="kwrd">Case</span> <span class="kwrd">Is</span> = <span class="str">&quot;A&quot;</span>
                              szBin = szBin &amp; <span class="str">&quot;1010&quot;</span>
                         <span class="kwrd">Case</span> <span class="kwrd">Is</span> = <span class="str">&quot;B&quot;</span>
                              szBin = szBin &amp; <span class="str">&quot;1011&quot;</span>
                         <span class="kwrd">Case</span> <span class="kwrd">Is</span> = <span class="str">&quot;C&quot;</span>
                              szBin = szBin &amp; <span class="str">&quot;1100&quot;</span>
                         <span class="kwrd">Case</span> <span class="kwrd">Is</span> = <span class="str">&quot;D&quot;</span>
                              szBin = szBin &amp; <span class="str">&quot;1101&quot;</span>
                         <span class="kwrd">Case</span> <span class="kwrd">Is</span> = <span class="str">&quot;E&quot;</span>
                              szBin = szBin &amp; <span class="str">&quot;1110&quot;</span>
                         <span class="kwrd">Case</span> <span class="kwrd">Is</span> = <span class="str">&quot;F&quot;</span>
                              szBin = szBin &amp; <span class="str">&quot;1111&quot;</span>
                         <span class="kwrd">Case</span> <span class="kwrd">Else</span>
                  <span class="kwrd">End</span> <span class="kwrd">Select</span>
              <span class="kwrd">Next</span> iCount2
              szTemp = <span class="str">&quot;1110&quot;</span> &amp; Left$(szBin, 4) &amp; <span class="str">&quot;10&quot;</span> &amp; Mid$(szBin, 5, 6) &amp; <span class="str">&quot;10&quot;</span> &amp; Right$(szBin, 6)
              <span class="kwrd">For</span> iCount2 = 1 <span class="kwrd">To</span> 24
                  <span class="kwrd">If</span> Mid$(szTemp, iCount2, 1) = <span class="str">&quot;1&quot;</span> <span class="kwrd">Then</span>
                     lResult = lResult + 1 * 2 ^ (24 - iCount2)
                  <span class="kwrd">Else</span>: lResult = lResult + 0 * 2 ^ (24 - iCount2)
                  <span class="kwrd">End</span> <span class="kwrd">If</span>
              <span class="kwrd">Next</span> iCount2
              szTemp = Hex(lResult)
                    szCode = szCode &amp; <span class="str">&quot;%&quot;</span> &amp; Left$(szTemp, 2) &amp; <span class="str">&quot;%&quot;</span> &amp; Mid$(szTemp, 3, 2) &amp; <span class="str">&quot;%&quot;</span> &amp; Right$(szTemp, 2)
           <span class="kwrd">End</span> <span class="kwrd">If</span>
           szBin = vbNullString
           lResult = 0
       <span class="kwrd">Next</span> iCount1
       UrlEncode = szCode
<span class="kwrd">End</span> Function</pre></p></p><p><strong>步骤三：测试</strong></p><p>定义完之后，我们选择菜单-&gt;文件-&gt;关闭并返回Excel。然后我们就可以在Excel中测试刚才定义的这个函数了。如下图所示。</p><p><img style="border-right-width: 0px; margin: 0px 0px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.imkevinyang.com/wp-content/uploads/2009/05/image-thumb.png" width="342" height="28" /></p><p>注意，使用了VBA函数的excel文件需要在打开时启用宏，否则函数无效。</p>标签：<a href="http://www.imkevinyang.com/tags/excel" title="Excel" rel="tag">Excel</a>, <a href="http://www.imkevinyang.com/tags/office" title="Office" rel="tag">Office</a>, <a href="http://www.imkevinyang.com/tags/urlencode" title="UrlEncode" rel="tag">UrlEncode</a>, <a href="http://www.imkevinyang.com/tags/utf-8" title="UTF-8" rel="tag">UTF-8</a>, <a href="http://www.imkevinyang.com/tags/vba" title="VBA" rel="tag">VBA</a>, <a href="http://www.imkevinyang.com/tags/%e4%b8%ad%e6%96%87%e7%bc%96%e7%a0%81" title="中文编码" rel="tag">中文编码</a>, <a href="http://www.imkevinyang.com/categories/techarticles/codebase" title="代码库" rel="tag">代码库</a>, <a href="http://www.imkevinyang.com/tags/%e5%87%bd%e6%95%b0" title="函数" rel="tag">函数</a>, <a href="http://www.imkevinyang.com/tags/toolskills" title="工具技巧" rel="tag">工具技巧</a>, <a href="http://www.imkevinyang.com/tags/%e6%8a%80%e5%b7%a7" title="技巧" rel="tag">技巧</a>, <a href="http://www.imkevinyang.com/tags/%e7%bc%96%e8%a7%a3%e7%a0%81" title="编解码" rel="tag">编解码</a>, <a href="http://www.imkevinyang.com/tags/%e8%87%aa%e5%ae%9a%e4%b9%89%e5%87%bd%e6%95%b0" title="自定义函数" rel="tag">自定义函数</a><br /><h4 style="background-color:#3B3B3B;border-bottom:2px groove gray;color:#F2F2F2;margin-top:20px;padding:6px 6px 6px 15px;margin:20px 0px 0px 0px">你可能对下面的文章感兴趣</h4><ul class="st-related-posts"><li><a href="http://www.imkevinyang.com/2009/11/asp-net%e9%a1%b5%e9%9d%a2%e7%9a%84%e7%bc%96%e7%a0%81%e9%97%ae%e9%a2%98.html" title="Asp.Net页面的编码问题 (2009/11/27)">Asp.Net页面的编码问题</a> (2009/11/27)</li><li><a href="http://www.imkevinyang.com/2009/04/javascript%e5%ad%97%e7%ac%a6%e4%b8%b2%e5%93%88%e5%b8%8c%e5%87%bd%e6%95%b0.html" title="Javascript字符串哈希函数 (2009/04/11)">Javascript字符串哈希函数</a> (2009/04/11)</li><li><a href="http://www.imkevinyang.com/2009/11/onenote-2010-beta2-%e4%bd%93%e9%aa%8c.html" title="OneNote 2010 beta2 体验 (2009/11/25)">OneNote 2010 beta2 体验</a> (2009/11/25)</li><li><a href="http://www.imkevinyang.com/2009/05/php%e5%a4%84%e7%90%86bom%e6%a0%87%e8%ae%b0%e7%9a%84utf-8%e6%96%87%e4%bb%b6%e5%af%bc%e8%87%b4%e7%9a%84%e9%97%ae%e9%a2%98.html" title="PHP处理BOM标记的UTF-8文件导致的问题 (2009/05/05)">PHP处理BOM标记的UTF-8文件导致的问题</a> (2009/05/05)</li><li><a href="http://www.imkevinyang.com/2009/02/word%e7%bc%96%e8%be%91%e5%8c%ba%e9%bc%a0%e6%a0%87%e5%a4%b1%e6%95%88.html" title="Word编辑区鼠标失效 (2009/02/28)">Word编辑区鼠标失效</a> (2009/02/28)</li><li><a href="http://www.imkevinyang.com/2009/05/%e4%bd%bf%e7%94%a8vba%e5%87%bd%e6%95%b0%e5%9c%a8excel%e5%8d%95%e5%85%83%e6%a0%bc%e4%b8%ad%e7%94%9f%e6%88%90%e6%8b%bc%e9%9f%b3%e7%bc%a9%e5%86%99.html" title="使用VBA函数在Excel单元格中生成拼音缩写 (2009/05/15)">使用VBA函数在Excel单元格中生成拼音缩写</a> (2009/05/15)</li><li><a href="http://www.imkevinyang.com/2010/06/%e5%85%b3%e4%ba%8e%e5%ad%97%e7%ac%a6%e7%bc%96%e7%a0%81%ef%bc%8c%e4%bd%a0%e6%89%80%e9%9c%80%e8%a6%81%e7%9f%a5%e9%81%93%e7%9a%84.html" title="关于字符编码，你所需要知道的 (2010/06/18)">关于字符编码，你所需要知道的</a> (2010/06/18)</li><li><a href="http://www.imkevinyang.com/2009/02/%e5%ad%97%e7%ac%a6%e7%bc%96%e8%a7%a3%e7%a0%81%e7%9a%84%e6%95%85%e4%ba%8b%ef%bc%88ascii%ef%bc%8cansi%ef%bc%8cunicode%ef%bc%8cutf-8%e5%8c%ba%e5%88%ab%ef%bc%89.html" title="字符编解码的故事（ASCII，ANSI，Unicode，Utf-8区别） (2009/02/28)">字符编解码的故事（ASCII，ANSI，Unicode，Utf-8区别）</a> (2009/02/28)</li><li><a href="http://www.imkevinyang.com/2009/08/%e6%96%87%e6%a1%a3%e5%ad%97%e7%ac%a6%e9%9b%86%e5%af%bc%e8%87%b4%e7%9a%84%e8%84%9a%e6%9c%ac%e9%94%99%e8%af%af.html" title="文档字符集导致的脚本错误 (2009/08/19)">文档字符集导致的脚本错误</a> (2009/08/19)</li><li><a href="http://www.imkevinyang.com/2009/08/%e8%af%a6%e8%a7%a3javascript%e4%b8%ad%e7%9a%84url%e7%bc%96%e8%a7%a3%e7%a0%81.html" title="详解Javascript中的Url编码/解码 (2009/08/19)">详解Javascript中的Url编码/解码</a> (2009/08/19)</li></ul>]]></content:encoded> <wfw:commentRss>http://www.imkevinyang.com/2009/04/excel%e4%b8%ad%e4%bd%bf%e7%94%a8vba%e8%87%aa%e5%ae%9a%e4%b9%89%e5%87%bd%e6%95%b0%e5%af%b9%e5%ad%97%e7%ac%a6%e4%b8%b2%e7%bb%a7%e7%bb%adurl%e7%bc%96%e7%a0%81.html/feed</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>Javascript字符串哈希函数</title><link>http://www.imkevinyang.com/2009/04/javascript%e5%ad%97%e7%ac%a6%e4%b8%b2%e5%93%88%e5%b8%8c%e5%87%bd%e6%95%b0.html</link> <comments>http://www.imkevinyang.com/2009/04/javascript%e5%ad%97%e7%ac%a6%e4%b8%b2%e5%93%88%e5%b8%8c%e5%87%bd%e6%95%b0.html#comments</comments> <pubDate>Sat, 11 Apr 2009 11:44:10 +0000</pubDate> <dc:creator>Kevin Yang</dc:creator> <category><![CDATA[代码库]]></category> <category><![CDATA[Javascript]]></category> <category><![CDATA[Js]]></category> <category><![CDATA[代码]]></category> <category><![CDATA[函数]]></category> <category><![CDATA[哈希]]></category> <category><![CDATA[字符串]]></category><guid isPermaLink="false">http://www.imkevinyang.com/2009/04/javascript%e5%ad%97%e7%ac%a6%e4%b8%b2%e5%93%88%e5%b8%8c%e5%87%bd%e6%95%b0.html</guid> <description><![CDATA[<pre class="csharpcode"><span class="rem">/**</span>
<span class="rem"> * 获取字符串的哈希值</span>
<span class="rem"> * @param {String} str</span>
<span class="rem"> * @param {Boolean} caseSensitive</span>
<span class="rem"> * @return {Number} hashCode</span>
<span class="rem"> */</span>
getHashCode:<span class="kwrd">function</span>(str,caseSensitive){
    <span class="kwrd">if</span>(!caseSensitive){
        str = str.toLowerCase();
    }
    <span class="rem">// 1315423911=b'1001110011001111100011010100111'</span>
    <span class="kwrd">var</span> ha&#8230;</pre>]]></description> <content:encoded><![CDATA[<pre class="csharpcode"><span class="rem">/**</span>
<span class="rem"> * 获取字符串的哈希值</span>
<span class="rem"> * @param {String} str</span>
<span class="rem"> * @param {Boolean} caseSensitive</span>
<span class="rem"> * @return {Number} hashCode</span>
<span class="rem"> */</span>
getHashCode:<span class="kwrd">function</span>(str,caseSensitive){
    <span class="kwrd">if</span>(!caseSensitive){
        str = str.toLowerCase();
    }
    <span class="rem">// 1315423911=b'1001110011001111100011010100111'</span>
    <span class="kwrd">var</span> hash  =   1315423911,i,ch;
    <span class="kwrd">for</span> (i = str.length - 1; i &gt;= 0; i--) {
        ch = str.charCodeAt(i);
        hash ^= ((hash &lt;&lt; 5) + ch + (hash &gt;&gt; 2));
    }

    <span class="kwrd">return</span>  (hash &amp; 0x7FFFFFFF);
}</pre>标签：<a href="http://www.imkevinyang.com/tags/javascript" title="Javascript" rel="tag">Javascript</a>, <a href="http://www.imkevinyang.com/tags/js" title="Js" rel="tag">Js</a>, <a href="http://www.imkevinyang.com/tags/%e4%bb%a3%e7%a0%81" title="代码" rel="tag">代码</a>, <a href="http://www.imkevinyang.com/categories/techarticles/codebase" title="代码库" rel="tag">代码库</a>, <a href="http://www.imkevinyang.com/tags/%e5%87%bd%e6%95%b0" title="函数" rel="tag">函数</a>, <a href="http://www.imkevinyang.com/tags/%e5%93%88%e5%b8%8c" title="哈希" rel="tag">哈希</a>, <a href="http://www.imkevinyang.com/tags/%e5%ad%97%e7%ac%a6%e4%b8%b2" title="字符串" rel="tag">字符串</a><br /><h4 style="background-color:#3B3B3B;border-bottom:2px groove gray;color:#F2F2F2;margin-top:20px;padding:6px 6px 6px 15px;margin:20px 0px 0px 0px">你可能对下面的文章感兴趣</h4><ul class="st-related-posts"><li><a href="http://www.imkevinyang.com/2009/11/button%e6%a0%87%e7%ad%be%e9%bc%a0%e6%a0%87%e7%82%b9%e5%87%bb%e4%ba%8b%e4%bb%b6%e7%9a%84%e8%a7%a6%e5%8f%91%e6%ba%90%e9%97%ae%e9%a2%98.html" title="Button标签鼠标点击事件的触发源问题 (2009/11/27)">Button标签鼠标点击事件的触发源问题</a> (2009/11/27)</li><li><a href="http://www.imkevinyang.com/2009/04/excel%e4%b8%ad%e4%bd%bf%e7%94%a8vba%e8%87%aa%e5%ae%9a%e4%b9%89%e5%87%bd%e6%95%b0%e5%af%b9%e5%ad%97%e7%ac%a6%e4%b8%b2%e7%bb%a7%e7%bb%adurl%e7%bc%96%e7%a0%81.html" title="Excel中使用VBA自定义函数对字符串进行Url编码（UTF-8） (2009/04/28)">Excel中使用VBA自定义函数对字符串进行Url编码（UTF-8）</a> (2009/04/28)</li><li><a href="http://www.imkevinyang.com/2009/03/ie%e4%b8%ad%e4%bd%bf%e7%94%a8windowopen%e6%89%93%e5%bc%80%e6%96%b0%e7%aa%97%e5%8f%a3%e6%97%b6%e6%97%a0%e6%b3%95%e8%8e%b7%e5%8f%96referrer%e5%af%b9%e8%b1%a1.html" title="IE中使用window.open打开新窗口时无法获取Referrer对象 (2009/03/07)">IE中使用window.open打开新窗口时无法获取Referrer对象</a> (2009/03/07)</li><li><a href="http://www.imkevinyang.com/2009/07/javascript-%e4%b8%ad%e7%9a%84false%e9%9b%b6%e5%80%bcnullundefined%e5%92%8c%e7%a9%ba%e5%ad%97%e7%ac%a6%e4%b8%b2%e5%af%b9%e8%b1%a1.html" title="Javascript 中的false,零值,null,undefined和空字符串对象 (2009/07/07)">Javascript 中的false,零值,null,undefined和空字符串对象</a> (2009/07/07)</li><li><a href="http://www.imkevinyang.com/2009/05/javascript%e4%b8%ad%e8%8e%b7%e5%8f%96%e5%87%ba%e9%94%99%e4%bb%a3%e7%a0%81%e6%89%80%e5%9c%a8%e6%96%87%e4%bb%b6%e5%8f%8a%e8%a1%8c%e6%95%b0.html" title="Javascript中获取出错代码所在文件及行数 (2009/05/18)">Javascript中获取出错代码所在文件及行数</a> (2009/05/18)</li><li><a href="http://www.imkevinyang.com/2009/06/javascript%e6%93%8d%e7%ba%b5cookie.html" title="Javascript操纵Cookie (2009/06/11)">Javascript操纵Cookie</a> (2009/06/11)</li><li><a href="http://www.imkevinyang.com/2010/05/%e4%b8%ba%e4%bb%80%e4%b9%88iis77-5%e7%9a%84gzip%e4%b8%8d%e8%b5%b7%e4%bd%9c%e7%94%a8.html" title="为什么IIS7/7.5的Gzip不起作用 (2010/05/08)">为什么IIS7/7.5的Gzip不起作用</a> (2010/05/08)</li><li><a href="http://www.imkevinyang.com/2009/05/%e4%bd%bf%e7%94%a8vba%e5%87%bd%e6%95%b0%e5%9c%a8excel%e5%8d%95%e5%85%83%e6%a0%bc%e4%b8%ad%e7%94%9f%e6%88%90%e6%8b%bc%e9%9f%b3%e7%bc%a9%e5%86%99.html" title="使用VBA函数在Excel单元格中生成拼音缩写 (2009/05/15)">使用VBA函数在Excel单元格中生成拼音缩写</a> (2009/05/15)</li><li><a href="http://www.imkevinyang.com/2009/09/%e4%bd%bf%e7%94%a8%e7%9b%b8%e5%af%b9url%e6%97%a0%e7%bc%9d%e5%88%87%e6%8d%a2http-https.html" title="使用相对Url无缝切换HTTP-HTTPS (2009/09/18)">使用相对Url无缝切换HTTP-HTTPS</a> (2009/09/18)</li><li><a href="http://www.imkevinyang.com/2010/07/%e5%87%a0%e4%b8%aa%e6%9c%89%e8%b6%a3%e7%9a%84javascript-hack.html" title="几个有趣的Javascript Hack (2010/07/23)">几个有趣的Javascript Hack</a> (2010/07/23)</li></ul>]]></content:encoded> <wfw:commentRss>http://www.imkevinyang.com/2009/04/javascript%e5%ad%97%e7%ac%a6%e4%b8%b2%e5%93%88%e5%b8%8c%e5%87%bd%e6%95%b0.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Pre标签内文字自动换行（兼容多数主流浏览器）</title><link>http://www.imkevinyang.com/2009/04/pre%e6%a0%87%e7%ad%be%e5%86%85%e6%96%87%e5%ad%97%e8%87%aa%e5%8a%a8%e6%8d%a2%e8%a1%8c%ef%bc%88%e5%85%bc%e5%ae%b9%e5%a4%9a%e6%95%b0%e4%b8%bb%e6%b5%81%e6%b5%8f%e8%a7%88%e5%99%a8%ef%bc%89.html</link> <comments>http://www.imkevinyang.com/2009/04/pre%e6%a0%87%e7%ad%be%e5%86%85%e6%96%87%e5%ad%97%e8%87%aa%e5%8a%a8%e6%8d%a2%e8%a1%8c%ef%bc%88%e5%85%bc%e5%ae%b9%e5%a4%9a%e6%95%b0%e4%b8%bb%e6%b5%81%e6%b5%8f%e8%a7%88%e5%99%a8%ef%bc%89.html#comments</comments> <pubDate>Wed, 08 Apr 2009 17:24:00 +0000</pubDate> <dc:creator>Kevin Yang</dc:creator> <category><![CDATA[代码库]]></category> <category><![CDATA[CSS]]></category> <category><![CDATA[HTML]]></category> <category><![CDATA[Pre]]></category> <category><![CDATA[标签]]></category> <category><![CDATA[浏览器]]></category> <category><![CDATA[自动换行]]></category><guid isPermaLink="false">http://www.imkevinyang.com/2009/04/pre%e6%a0%87%e7%ad%be%e5%86%85%e6%96%87%e5%ad%97%e8%87%aa%e5%8a%a8%e6%8d%a2%e8%a1%8c%ef%bc%88%e5%85%bc%e5%ae%b9%e5%a4%9a%e6%95%b0%e4%b8%bb%e6%b5%81%e6%b5%8f%e8%a7%88%e5%99%a8%ef%bc%89.html</guid> <description><![CDATA[<pre><span style="color: #008000">/* Browser specific (not valid) styles to make preformatted text wrap */</span>
<span style="color: #800000">pre</span> {
	<span style="color: #ff0000">white-space</span>: <span style="color: #0000ff">pre-wrap</span>;       <span style="color: #008000">/* css-3 */</span>
	<span style="color: #ff0000">white-space</span>: <span style="color: #0000ff">-moz-pre-wrap</span>;  <span style="color: #008000">/* Mozilla, since 1999 */</span>
	<span style="color: #ff0000">white-space</span>: <span style="color: #0000ff">-pre-wrap</span>;      <span style="color: #008000">/* Opera 4-6 */</span>
	<span style="color: #ff0000">white-space</span>: <span style="color: #0000ff">-o-pre-wrap</span>;    <span style="color: #008000">/* Opera 7 */</span>
	<span style="color: #ff0000">word-wrap</span>:&#8230;</pre>]]></description> <content:encoded><![CDATA[<pre><span style="color: #008000">/* Browser specific (not valid) styles to make preformatted text wrap */</span>
<span style="color: #800000">pre</span> {
	<span style="color: #ff0000">white-space</span>: <span style="color: #0000ff">pre-wrap</span>;       <span style="color: #008000">/* css-3 */</span>
	<span style="color: #ff0000">white-space</span>: <span style="color: #0000ff">-moz-pre-wrap</span>;  <span style="color: #008000">/* Mozilla, since 1999 */</span>
	<span style="color: #ff0000">white-space</span>: <span style="color: #0000ff">-pre-wrap</span>;      <span style="color: #008000">/* Opera 4-6 */</span>
	<span style="color: #ff0000">white-space</span>: <span style="color: #0000ff">-o-pre-wrap</span>;    <span style="color: #008000">/* Opera 7 */</span>
	<span style="color: #ff0000">word-wrap</span>: <span style="color: #0000ff">break-word</span>;       <span style="color: #008000">/* Internet Explorer 5.5+ */</span>
} </pre>标签：<a href="http://www.imkevinyang.com/tags/css" title="CSS" rel="tag">CSS</a>, <a href="http://www.imkevinyang.com/tags/html" title="HTML" rel="tag">HTML</a>, <a href="http://www.imkevinyang.com/tags/pre" title="Pre" rel="tag">Pre</a>, <a href="http://www.imkevinyang.com/categories/techarticles/codebase" title="代码库" rel="tag">代码库</a>, <a href="http://www.imkevinyang.com/tags/%e6%a0%87%e7%ad%be" title="标签" rel="tag">标签</a>, <a href="http://www.imkevinyang.com/tags/browser" title="浏览器" rel="tag">浏览器</a>, <a href="http://www.imkevinyang.com/tags/%e8%87%aa%e5%8a%a8%e6%8d%a2%e8%a1%8c" title="自动换行" rel="tag">自动换行</a><br /><h4 style="background-color:#3B3B3B;border-bottom:2px groove gray;color:#F2F2F2;margin-top:20px;padding:6px 6px 6px 15px;margin:20px 0px 0px 0px">你可能对下面的文章感兴趣</h4><ul class="st-related-posts"><li><a href="http://www.imkevinyang.com/2009/11/button%e6%a0%87%e7%ad%be%e9%bc%a0%e6%a0%87%e7%82%b9%e5%87%bb%e4%ba%8b%e4%bb%b6%e7%9a%84%e8%a7%a6%e5%8f%91%e6%ba%90%e9%97%ae%e9%a2%98.html" title="Button标签鼠标点击事件的触发源问题 (2009/11/27)">Button标签鼠标点击事件的触发源问题</a> (2009/11/27)</li><li><a href="http://www.imkevinyang.com/2009/03/ie%e4%b8%ad%e4%bd%bf%e7%94%a8windowopen%e6%89%93%e5%bc%80%e6%96%b0%e7%aa%97%e5%8f%a3%e6%97%b6%e6%97%a0%e6%b3%95%e8%8e%b7%e5%8f%96referrer%e5%af%b9%e8%b1%a1.html" title="IE中使用window.open打开新窗口时无法获取Referrer对象 (2009/03/07)">IE中使用window.open打开新窗口时无法获取Referrer对象</a> (2009/03/07)</li><li><a href="http://www.imkevinyang.com/2009/10/wordpress%e8%af%84%e8%ae%ba%e4%b8%ad%e4%bf%9d%e7%95%99html%e4%bb%a3%e7%a0%81.html" title="Wordpress评论中保留Html代码 (2009/10/31)">Wordpress评论中保留Html代码</a> (2009/10/31)</li><li><a href="http://www.imkevinyang.com/2009/09/%e5%a6%82%e4%bd%95%e5%bf%ab%e9%80%9f%e6%9f%a5%e7%9c%8b%e4%b8%80%e4%b8%aa%e7%bd%91%e9%a1%b5%e7%9a%84%e5%af%b9%e9%bd%90%e6%96%b9%e5%bc%8f.html" title="如何快速查看一个网页的对齐方式 (2009/09/29)">如何快速查看一个网页的对齐方式</a> (2009/09/29)</li><li><a href="http://www.imkevinyang.com/2009/03/%e6%9c%80%e7%b2%be%e7%ae%80%e7%9a%84%e5%88%a4%e5%88%abie%e7%9a%84javascript%e4%bb%a3%e7%a0%81.html" title="最精简的判别IE的Javascript代码 (2009/03/23)">最精简的判别IE的Javascript代码</a> (2009/03/23)</li><li><a href="http://www.imkevinyang.com/2009/07/%e8%b7%a8%e5%9f%9f%e4%b8%8b%e8%af%b7%e6%b1%82silverlight-xap%e5%8c%85%e5%bc%95%e8%b5%b7%e7%9a%84%e9%97%ae%e9%a2%98.html" title="跨域下请求Silverlight Xap包引起的问题 (2009/07/12)">跨域下请求Silverlight Xap包引起的问题</a> (2009/07/12)</li></ul>]]></content:encoded> <wfw:commentRss>http://www.imkevinyang.com/2009/04/pre%e6%a0%87%e7%ad%be%e5%86%85%e6%96%87%e5%ad%97%e8%87%aa%e5%8a%a8%e6%8d%a2%e8%a1%8c%ef%bc%88%e5%85%bc%e5%ae%b9%e5%a4%9a%e6%95%b0%e4%b8%bb%e6%b5%81%e6%b5%8f%e8%a7%88%e5%99%a8%ef%bc%89.html/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>