先说说这段代码的背景。它其实是一个很经典的ASP小工具——站内文本搜索器,当年在静态网站时代非常实用。整段代码的核心思路并不复杂:通过递归遍历服务器上的文件夹,逐个读取HTML文件,在里面查找用户输入的关键词,然后把匹配到的文件链接和标题列出来。

咱们拆开来看具体是怎么实现的。代码开头先定义了几个关键变量,比如head用来存页面标题,SearchString从请求参数中获取用户输入的内容。然后是一个很实用的辅助函数UnMapPath,它的作用是把服务器上的物理路径转换为虚拟路径。为什么要这么做?因为直接暴露物理路径既不安全,也不方便用户点击访问。

接下来是核心的SearchFile函数。这个函数接受三个参数:文件路径、搜索关键词和标题引用。它的工作流程是:用FileSystemObject打开文件,把全部内容读到content变量里,然后用InStr函数检查是否包含搜索词。如果找到了,还会进一步提取</code>标签之间的内容,方便在搜索结果中显示更有意义的标题,而不是直接显示文件名。</p> <p>有意思的是,它还设计了一个<code>FileLink</code>函数,专门用来生成带链接的HTML列表项。如果搜索到的文件没有提取到标题,那就会用文件名作为备选。这个细节很贴心,毕竟不是所有HTML文件都规范地写了<code><title></code>标签。</p> <p>真正的遍历逻辑在<code>SearchFolder</code>子程序里。它先检查当前文件夹下的所有文件,只处理扩展名为<code>.htm</code>的文件,然后调用<code>SearchFile</code>进行匹配。如果匹配成功,就把结果输出到页面,同时用一个全局计数器<code>count</code>记录匹配数量。处理完文件后,再递归处理子文件夹,确保不会漏掉任何深层目录。</p> <p>页面本身的设计也很简洁:一个搜索表单,用户输入关键词后提交,结果会以列表形式展示,每个匹配文件都带着可点击的链接和标题。整个工具没有依赖数据库,也没有复杂的配置,对于一个中小型静态网站来说,完全够用了。</p> <p>当然,这段代码也存在一些明显的时代痕迹。比如它只处理<code>.htm</code>扩展名,没有考虑<code>.html</code>或<code>.shtml</code>;字符集写的是<code>gb_2312-80</code>,现在基本都改用<code>UTF-8</code>了;而且没有做任何安全防护,比如防止注入攻击或者限制搜索范围。不过作为早期ASP时代的怀旧作品,它确实代表了那个年代解决“站内搜索”问题的一种典型思路。</p> </div> <div class="laiyuan"> 本文转载于:https://www.jb51.net/article/4791.htm 如有侵犯,请联系zhengruancom@outlook.com删除。<br/>免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。 </div> <div class="legal_box2"> <div class="legal_title"> <h2>同类商品 <em></em></h2> <div class="clear"></div> </div> <ul class="shapo_list"> <li> <a href="https://m.zhengruan.com/news/soft69"> <div class="img_box"> <img src="https://m.zhengruan.com/uploads/20200428/cd14258f0172a172f8a80798c38c1577.jpg" alt="DAEMON Tools Lite 10"> </div> <h2> DAEMON Tools Lite 10 </h2> <p> <em>¥</em>0.00 <del>¥0.00 </del> </p> </a> </li> <li> <a href="https://m.zhengruan.com/news/soft67"> <div class="img_box"> <img src="https://m.zhengruan.com/uploads/20200428/fbf473d4d30833324962e441c0f18265.jpg" alt="DAEMON Tools Ultra 5"> </div> <h2> DAEMON Tools Ultra 5 </h2> <p> <em>¥</em>0.00 <del>¥0.00 </del> </p> </a> </li> <li> <a href="https://m.zhengruan.com/news/soft68"> <div class="img_box"> <img src="https://m.zhengruan.com/uploads/20200428/1ae250399abf4ff584d86d52c79b5bb6.jpg" alt="DAEMON Tools Pro 8"> </div> <h2> DAEMON Tools Pro 8 </h2> <p> <em>¥</em>0.00 <del>¥0.00 </del> </p> </a> </li> <li> <a href="https://m.zhengruan.com/news/soft29"> <div class="img_box"> <img src="https://m.zhengruan.com/uploads/20200428/77d3c04866e1b842d9b6ff0e9368bdf8.jpg" alt="CorelDRAW X8 简体中文"> </div> <h2> CorelDRAW X8 简体中文 </h2> <p> <em>¥</em>0.00 <del>¥0.00 </del> </p> </a> </li> <div class="clear"></div> </ul> </div> <div class="legal_box2"> <div class="legal_title"> <h2>相关文章 <em></em></h2> <a href="https://m.zhengruan.com/newslist/313_1"> 更多 <em class="icon"></em></a> <div class="clear"></div> </div> <ul class="gal_article_list"> <li> <a href="https://m.zhengruan.com/news/767861"> <em class="icon"></em> <p> python环境变量配置与验证:从概念到实操的排错指南 </p> </a> </li> <li> <a href="https://m.zhengruan.com/news/767860"> <em class="icon"></em> <p> python3安装实操:从环境检查到虚拟环境验证的完整步骤 </p> </a> </li> <li> <a href="https://m.zhengruan.com/news/767859"> <em class="icon"></em> <p> python for 循环:环境准备、实操流程与验证边界 </p> </a> </li> <li> <a href="https://m.zhengruan.com/news/767858"> <em class="icon"></em> <p> 怎么安装python:后端开发环境配置、验证与排错指南 </p> </a> </li> <li> <a href="https://m.zhengruan.com/news/767857"> <em class="icon"></em> <p> python怎么用:从环境准备到依赖管理的实操与验证 </p> </a> </li> </ul> </div> </main> <footer> <div class="main_foot"> <a href="https://m.zhengruan.com" class="foot_logo"><img src="https://m.zhengruan.com/statics/mob/zrimages/logo_b.png" alt="正软"></a> <p>联系方式: bd@zhengruan.com<br>网站备案号:苏ICP备2026018738号-1</p> <ul> <li class="one"><a href="https://m.zhengruan.com" class="cBlack"><b class="i_index"></b>首页</a></li> <li><a href="http://www.zhengruan.com" class="cBlack"><b class="i_pc"></b>电脑端</a></li> <li><span class="return_top"><b class="i_top"></b>顶部</span></li> </ul> </div> </footer> <script> var _hmt = _hmt || []; (function () { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?3835539565b311d85319cd21da8fd0d9"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> <!-- Matomo --> <script> var _paq = window._paq = window._paq || []; /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function () { var u = "https://tongji.php.cn/"; _paq.push(['setTrackerUrl', u + 'matomo.php']); _paq.push(['setSiteId', '36']); var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0]; g.async = true; g.src = u + 'matomo.js'; s.parentNode.insertBefore(g, s); })(); </script> <!-- End Matomo Code --> </body> <script> function countView(){ $.ajax({ type: "post", url: "/countView?&time="+new Date().getTime(), data:{'type':'news','id':"715072"}, async:false, dataType: "json", success: function(result){ console.log(result) }, error:function(){ } }); } $(function(){ countView(); }) </script> </html>