利用404特性同步文件(ASP版)

很久之前写的了,今天分享出来~

 

Entity Framework – 直接执行数据库命令

原文地址: http://msdn.microsoft.com/en-us/library/gg715124(v=vs.103)   使用 EF 4.1 或者更新版本, 你可以直接执行任何数据库命令. 在本节介绍的方法允许你对数据库执行原生的 SQL 命令.   通过 SQL 查询语句获取实体对象集 DbSet 类中的 SqlQuery 方法允许你执行一个返回实体对象集的原生 SQL 查询. 默认情况下, 返回的对象集会被上下文跟踪; 这可以通过对方法返回的 DbSqlQuery 对象调用 AsNoTracking 方法取消.返回的结果集一般为 DbSet 所对应的类型, 否则即便是其派生类也无法返回. 如果所查询的表包含了其他实体类型的数据, 那么所执行的 SQL 语句应该被正确书写, 保证只返回指定类型实体的数据. 下面的例子使用 SqlQuery 方法执行了一个 SQL 查询, 返回一个 Department 类型的实例集.

译注: AsNoTracking 方法必须再查询执行前调用, 查询执行后调用无效. 通过 SQL 查询获取非实体对象集 通过 Database 类中的 SqlQuery 方法来执行原生 SQL 命令, 可以返回任何类型的实例, 包括 .Net 中的原生类型. 但获取的数据将不会被上下文对象跟踪, 即使我们用这个方法来检索实体对象. 如:

让数据库执行原生的非查询 SQL 命令 可以通过 Database 类中的 ExecuteSqlCommand 方法执行非查询命令. 例如:

ExecuteSqlCommand 方法有时会被用在 Code First 创建的数据库的初始化函数中, 用来对数据库进行一些额外的配置 (例如, 设置索引). 需要注意的是, 上下文对象并不知道执行了 ExecuteSqlCommand 方法后数据库中的数据有什么改变, 除非你从数据库中载入或重新载入实体集. 调用存储过程 Code First 并不支持对存储过程的映射. 但是, 你可以通过 ExecuteSqlCommand 或 SqlQuery 方法直接调用存储过程. 例如: context.Database.ExecuteSqlCommand ("EXECUTE [dbo].[DoSomething]"). 译注: 本文提到的三个方法 (DbSet.SqlQuery, Database.SqlQuery, Database.ExecuteSqlCommand) 都支持参数化查询, 用法和 string.Format 类似, 但是在查询执行时会对传入的参数进行类型转换. 如: context.Departments.SqlQuery("select * from Department where DepartmentID = {0}", "6"); 该语句执行时, 会将字符串 "6" 转化为整数然后再代入查询语句中执行, 可以有效防止 SQL 注入. 防止 SQL 注入攻击 应用程序经常要从外部获取输入 (来自用户和其他外部代理) , 然后根据这些输入执行相关操作. 从用户或外部代理直接或间接获取的任何信息都可能利用目标程序语言的语法来执行违法操作. 当目标语言是结构化查询语言 (SQL) 时, 例如 Transact-SQL, 这个操作被称为 SQL 注入攻击. 恶意的用户可以直接在查询中注入命令执行操作, 删除数据库中的一个表, 拒绝提供服务或修改正在执行的操作的性质. 故你应该使用参数化的查询, 而不是直接将从外部获取的字符串插入到查询字符串中. from:http://www.cnblogs.com/mend/archive/2012/06/11/2544599.html

EntityFramework.BulkInsert扩展插入数据和EF本身插入数据比较

扩展下载地址:http://efbulkinsert.codeplex.com/ 注意同时安装依赖项目,不然会报错,还有,程序中有同一个dll的其他版本,那就可能一次安装不上,得一个一个安装依赖的dll Install-Package EntityFramework.MappingAPI -Version 6.0.0.7 Install-Package EntityFramework.BulkInsert-ef6 EntityFramework.BulkInsert插入数据和EF比较 初步猜测,它应该只是把多个sql合成一个,不管怎么优化,总该最后生成的是sql。 例如:20条数据,ef调试时看到的是一次连接,20次执行sql,这个批量,估计是一次连接,20个sql组合放到一个字符串提交,这样能减少时间。 再优化也不可能把sql给减少,同一sql在数据库中执行时间也不是EF能减少的。 实测(222数据库,表FinanceReceipts): 用Stopwatch监视执行时间(单位毫秒) 一次插入200条单据测试 EF插入耗时:11,086 BulkInsert插入耗时:740 一次插入10000条单据测试 EF插入耗时:510,640 BulkInsert插入耗时:3,200 通过看代码,和猜测的实现方式差不多,不过,代码中有表映射,为什么有这些功能? 因为 Insert 比数据库自带的 SqlBulkCopy 功能慢, EntityFramework.BulkInsert扩展在优化语句传输次数的同时,也采用了速度更快的 SqlBulkCopy 去将数据插入数据库,所以在插入大数据量时,比起EF本身的插入数据,可以说快得“离谱”。 不过,利用这个SqlBulkCopy快速插入数据,也就只能在插入上有改进,对于Update,Delete数据,速度上没有什么改进的 //批量插入测试代码 [csharp] view plain copy print? StringBuilder sb = new StringBuilder(); FinanceReceipts model = ReceiptsRepository.Entities.Include(o => o.FinanceReceiptDetail).Include(o => o.FinanceBillLog).First(o => o.ReceiptId == 214539); int createCount = 10000; model.ReceiptId = 0; model.ReceiptStatus = -1; model.ReceiptNo = ""; model.FinanceBillLog.OpenSafe().ToList().ForEach(m => m.ReceiptId = 0); model.FinanceReceiptDetail.OpenSafe().ToList().ForEach(m => m.ReceiptId = 0); model.ActualCreateTime = DateTime.Now; List<FinanceReceipts> entities = new List<FinanceReceipts>(); for (int i = 0; i < createCount; i++) {     FinanceReceipts temp = model.DeepCopy();     model.ReceiptNo = "ef" + i;     entities.Add(temp); } Stopwatch sw = new Stopwatch(); sw.Start(); ReceiptsRepository.Insert(entities); sw.Stop(); sb.AppendFormat("EF插入耗时:{0}\r\n", sw.ElapsedMilliseconds); model.ActualCreateTime = DateTime.Now; List<FinanceReceipts> entities2 = new List<FinanceReceipts>(); for (int i = 0; i < createCount; i++) {     FinanceReceipts temp = model;     model.ReceiptNo = "bi" + i;     entities2.Add(temp); } sw.Restart(); var ctx = (this.UnitOfWork as UnitOfWorkContextBase).DbContext;     using (var transactionScope = new TransactionScope())     {         // some stuff in dbcontext         ctx.BulkInsert(entities2);         ctx.SaveChanges();         transactionScope.Complete();     } sw.Stop(); sb.AppendFormat("BulkInsert插入耗时:{0}\r\n", sw.ElapsedMilliseconds); string ret = sb.ToString(); 插入100条,每次插入一条,循环插入测试 第1次: EF插入耗时:9006 BulkInsert插入耗时:4173 第2次: EF插入耗时:8738 BulkInsert插入耗时:3806 第3次: EF插入耗时:8784 BulkInsert插入耗时:3727 BulkInsert还是比EF本身插入数据稍微快一点,总的来说: BulkInsert 大致是只传一次sql语句,并用SqlBulkCopy快速插入(单据+单据明细+单据日志); 而EF是每个实体一条普通的Insert插入(单据1次,单据明细有多少条就传多少次,单据日志有多少条就传多少次) //每次插入一条,循环插入的测试代码 [csharp] view plain copy print? StringBuilder sb = new StringBuilder(); FinanceReceipts model = ReceiptsRepository.Entities.Include(o => o.FinanceReceiptDetail).Include(o => o.FinanceBillLog).First(o => o.ReceiptId == 214539); int createCount = 10; model.ReceiptId = 0; model.ReceiptStatus = -1; model.ReceiptNo = ""; model.FinanceBillLog.OpenSafe().ToList().ForEach(m => m.ReceiptId = 0); model.FinanceReceiptDetail.OpenSafe().ToList().ForEach(m => m.ReceiptId = 0); model.ActualCreateTime = DateTime.Now; List<FinanceReceipts> entities = new List<FinanceReceipts>(); for (int i = 0; i < createCount; i++) {     FinanceReceipts temp = model.DeepCopy();     model.ReceiptNo = "ef" + i;     entities.Add(temp); } Stopwatch sw = new Stopwatch(); sw.Start(); for (int i = 0; i < createCount; i++) {     ReceiptsRepository.Insert(entities[i]); } sw.Stop(); sb.AppendFormat("EF插入耗时:{0}\r\n", sw.ElapsedMilliseconds); model.ActualCreateTime = DateTime.Now; List<FinanceReceipts> entities2 = new List<FinanceReceipts>(); for (int i = 0; i < createCount; i++) {     FinanceReceipts temp = model;     model.ReceiptNo = "bi" + i;     entities2.Add(temp); } sw.Restart(); var ctx = (this.UnitOfWork as UnitOfWorkContextBase).DbContext; for (int i = 0; i < createCount; i++) {     using (var transactionScope = new TransactionScope())     {         // some stuff in dbcontext         ctx.BulkInsert(new List<FinanceReceipts>(){entities2[i]});         ctx.SaveChanges();         transactionScope.Complete();     } } sw.Stop(); sb.AppendFormat("BulkInsert插入耗时:{0}\r\n", sw.ElapsedMilliseconds); string ret = sb.ToString();   附:EntityFramework.BulkInsert 突出点是快,但是实际应用上,有诸多不便,比如: 我们用EF插入,自动增长键会带回数据库中的值,但是BulkInsert 不会; 外键关联表的数据,比如:日志、详情,用EF时,如果有数据会自动插入;用BulkInsert 不会插入,只会插入主表的数据,还要自己根据业务,查询出主表的主键然后赋值给 日志、详情的外键字段,然后我们才可以将这些数据再次插入数据库。 这个是比较麻烦的地方。   最新: 虽然在事务using语句中,但 ctx.BulkInsert(entityArray); 不会回滚事务 , 加上参数,才能回滚:ctx.BulkInsert(entityArray, tran.UnderlyingTransaction);   from:http://blog.csdn.net/pukuimin1226/article/details/48024995

Lucene.Net

阅读目录 开始 Lucene简介 效果图 Demo文件说明 简单使用 重点类的说明 存在问题 调整后 Lucene.Net博文与资源下载 做过站内搜索的朋友应该对Lucene.Net不陌生,没做过的也许会问:就不是个查询嘛!为什么不能使用Like模糊查找呢? 原因很简单--模糊查询的契合度太低,匹配关键字之间不能含有其他内容。最重要的是它会造成数据库全表扫描,效率底下,即使使用视图,也会造成数据库服务器"亚历山大",那LuceneNet又是一个神马东西?如何使用?以下给出详细的介绍包括Demo 回到顶部 Lucene简介 首先说明的是--Lucene.Net只是一个全文检索开发包,不是一个成型的搜索引擎, 它的功能就是负责将文本数据按照某种分词算法进行切词,分词后的结果存储在索引库中,从索引库检索数据的速度灰常快. 对以上加粗的词汇稍作下阐述: 文本数据:Lucene.Net只能对文本信息进行检索,所以非文本信息要么转换成为文本信息,要么你就死了这条心吧! 分词算法:将一句完整的话分解成若干词汇的算法  常见的一元分词(Lucene.Net内置就是一元分词,效率高,契合度低),二元分词,基于词库的分词算法(契合度高,效率低)… 切词:将一句完整的话,按分词算法切成若干词语 比如:"不是所有痞子都叫一毛" 这句话,如果根据一元分词算法则被切成: 不 是 所 有 痞 子 都 叫 一 毛 如果二元分词算法则切成: 不是 是所 所有 有痞 痞子 子都 都叫 叫一  一毛 如果基于词库的算法有可能:不是 所有 痞子 都叫 一毛 具体看词库 索引库:简单的理解成一个提供了全文检索功能的数据库 如果文字难以理解 见Demo文件说明中的右侧图吧 回到顶部 效果图 首先展示效果图,避免各位观众不知偶所云. 这里有三张图: 图1 简单使用页面效果图 图2 对数据库新增数据后 索引库更新效果图 图3 将图2中的新增数据修改后 索引库更新效果图 回到顶部 Demo文件说明 回到顶部 简单使用 图1中的BookList.aspx 页面

BookList.aspx.cs 后台的处理操作

使用的分词方法与关键字变红 SplitContent.cs

回到顶部 重点类的说明 Analyzer类:LuceneNet中分词算法的基类 任何自定义算法都需继承它 FSDirectory类: 指定索引库文件存放文件位置  是Directory的子类(它有两个子类 还有一个RAMDirecory,它用来指定将索引库文件存放在内存中) IndexReader:对索引进行读取的类 静态方法bool  IndexExists(Directory directory)--判断目录directory是否是一个索引目录 IndexWriter:对索引进行写的类 静态方法bool  IsLocked(Directory directory)--判断目录是否锁定 它在对索引目录写之前会把目录锁定,两个IndexWrite无法同时操作一个索引文件 IndexWrite在进行写操作的时候会自动加锁 Close自动解锁 Unlock手动解锁(通常用在程序异常退出 IndexWrite还没来得及close) Document类:要检索的文档 相当于一条记录 Add(Field field)向文档中添加字段 Filed类:构造函数(字段名,字段值,是否存储原文,是否对该字段创建索引,存储索引词间距) 是否存储原文:Field.Store.YES 存储原值(如显示原内容必须为YES) Field.Store.NO不存储原值 Field.Store.YES压缩存储 是否创建索引:Field.Index.NOT_ANALYZED不创建索引 Field.Index.ANALYZED创建索引(利于检索) IndexSearcher:搜索类 Searcher类的子类 Search(查询条件Query,过滤条件Filter,检索见过存放容器Collector) Query类:所有查询条件父类(子类都具有Add方法) 子类PhraseQuery:多个关键词的拼接类 关键词间是且的关系      query.Add(new Term("字段名", 关键词)) query.Add(new Term("字段名2", 关键词2)) 类似于:where 字段名 contains 关键词 and 字段名2 contains 关键词2 子类BooleanQuery:类似PharseQuery 通过它实现关键词间的或关系(MUST必须有 Should可有可无  MUST_NOT必须没有 详见BookList2.aspx.cs代码) 回到顶部 存在问题 上述只是Lucene.Net的简单使用 接下来我们深入探讨上述使用过程中存在的一些问题以及指的改进的地方: Q1:创建索引事件耗时的操作,尤其是在数据量很大的情况下,索引库生成耗时是个问题 Q2:真实项目中肯定不可能存在创建索引按钮,那创建索引的事件什么时候触发,由谁触发呢? Q3:如代码中的Q一样 多个用户共同操作索引库时的并发问题   解答上述三个问题 A1.耗时的操作当然另起一个后台线程来完成撒 A2.在网站Application_Start的时,利用A1中的后台线程循环监听Books表的增删改操作,在对Books表的增删改成功之后,对索引库相对应的数据做出增删改操作 A3.并发问题最好的解决方式--建立请求队列,单线程处理队列,类似于操作系统的中的生产者消费者模式 回到顶部 调整后 IndexManager.cs类中定义后台线程 循环监听请求队列 负责对索引库的更新操作

BookList2.aspx与BookList.aspx大同小异 这里不给出了 BookList2.aspx.cs 对数据库数据新增 修改  删除等操作

Global.ascx中设置

回到顶部 Lucene.Net博文与资源下载 http://www.cnblogs.com/birdshover/category/152283.html http://www.360doc.com/content/13/0509/08/5054188_284048627.shtml 点击此处下载示例代码   from:http://www.cnblogs.com/piziyimao/archive/2013/01/31/2887072.html#_label1

禁止浏览器缓存

html: <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-store, must-revalidate"> <meta http-equiv="expires" content="wed, 26 feb 1997 08:21:57 gmt"> <meta http-equiv="expires" content="0"> asp response.expires=0 response.addheader("pragma","no-cache") response.addheader("cache-control","no-store, must-revalidate") php header("expires: mon, 26 jul 1997 05:00:00 gmt"); header("cache-control: no-store, must-revalidate"); header("pragma: no-cache"); jsp: response.addheader("cache-control", "no-store, must-revalidate"); response.addheader("expires", "thu, 01 jan 1970 00:00:01 gmt"); 转自:http://www.oschina.net/code/snippet_81226_7660

ASP

asp已经诞生18年了,是我工作用的第一门语言。 ASP是Active Server Page的缩写,意为“动态服务器页面”。ASP是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单、方便的编程工具。ASP的网页文件的格式是 .asp。现在常用于各种动态网站中。   发展史 从1996年ASP诞生到2012年已经过去了17年。在这短短的17年中,ASP发生了重大的变化,直到现在的ASP。 asp的第一版是0.9测试版,自从1996年ASP1.0诞生,它给Web开发界带来了福音。早期的Web程序开发是十分繁琐的,以至于要制作一个简单的动态页面需要编写大量的C代码才能完成,这对于普通的程序员来说有点难了。而ASP却允许使用VBScript这种的简单脚本语言,编写嵌入在HTML网页中的代码。在进行程序设计的时候可以使用它的内部组件来实现一些高级功能(例如Cookie)。它的最大的贡献在于它的ADO(ActiveX Data Object),这个组件使得程序对数据库的操作十分简单,所以进行动态网页设计也变成一件轻松的事情。因此一夜之间,Web程序设计不再是想像中的艰巨任务,仿佛很多人都可以一显身手。 到了1998年,微软发布了ASP 2.0。它是Windows NT4 Option Pack的一部分,作为IIS(Internet Information Services,互联网信息服务) 4.0的外接式附件。它与ASP 1.0的主要区别在于它的外部组件是可以初始化的,这样,在ASP程序内部的所有组件都有了独立的内存空间,并可以进行事务处理。 到了2000年,随着Windows 2000的成功发布,这个操作系统的IIS(Internet Information Services,互联网信息服务) 5.0所附带的ASP 3.0也开始流行。与ASP 2.0相比,ASP 3.0的优势在于它使用了COM+,因而其效率会比它前面的版本要好,并且更稳定。 2001年,ASP·NET出现了。在刚开始开发的时候,它的名字是ASP+,但是,为了与微软的·NET计划相匹配,并且要表明这个ASP版本并不是对ASP 3.0的补充,微软将其命名为ASP·NET。ASP·NET在结构上与前面的版本大相径庭,它几乎完全是基于组件和模块化的,Web应用程序的开发人员使用这个开发环境可以实现更加模块化的、功能更强大的应用程序。   网页特点ASP是一种服务器端脚本编写环境,可以用来创建和运行动态网页或Web应用程序。ASP网页可以包含HTML标记、普通文本、脚本命令以及COM组件等。利用ASP可以向网页中添加交互式内容(如在线表单),也可以创建使用HTML网页作为用户界面的web应用程序。与HTML相比,ASP网页具有以下特点:⑴利用ASP可以实现突破静态网页的一些功能限制,实现动态网页技术;⑵ASP文件是包含在HTML代码所组成的文件中的,易于修改和测试;⑶服务器上的ASP解释程序会在服务器端执行ASP程序,并将结果以HTML格式传送到客户端浏览器上,因此使用各种浏览器都可以正常浏览ASP所产生的网页;⑷ASP提供了一些内置对象,使用这些对象可以使服务器端脚本功能更强。例如可以从web浏览器中获取用户通过HTML表单提交的信息,并在脚本中对这些信息进行处理,然后向web浏览器发送信息;⑸ASP可以使用服务器端ActiveX组件来执行各种各样的任务,例如存取数据库、发送Email或访问文件系统等;⑹由于服务器是将ASP程序执行的结果以HTML格式传回客户端浏览器,因此使用者不会看到ASP所编写的原始程序代码,可防止ASP程序代码被窃取;⑺ 方便连接ACCESS与SQL数据库;⑻开发需要有丰富的经验,否则会留出漏洞,让骇客(cracker)利用进行注入攻击。ASP也不仅仅局限于与HTML结合制作WEB网站,而且还可以与XHTML和WML语言结合制作WAP手机网站。但是其原理也是一样的。   工作原理当在Web站点中融入ASP功能后,将发生以下事情:1、用户向浏览器地址栏输入网址,默认页面的扩展名是.asp。2、浏览器向服务器发出请求。3、服务器引擎开始运行ASP程序。4、ASP文件按照从上到下的顺序开始处理,执行脚本命令,执行HTML页面内容。5、页面信息发送到浏览器。   生成txtFileName = "idcpcw.txt" '要保存的文本文件名Set fso = CreateObject("Scripting.FileSystemObject") '建立fso对象Set MyFile = fso.CreateTextFile(Server.mapPath(TxtFileName), True) '建立对象MyFile.WriteLine "文本的内容" & uuu '将name的值写入文本文件,uuu为数据库的数据MyFile.WriteLine "文本的内容" & uuu '同上[1] 

ASP内置对象 Request对象

集合 Request.ClientCertificate(key[SubField])所有客户证书的信息的集合。对于Key,该集合具有如下的关键字: Subject证书的主题。包含所有关于证书收据的信息。能和所有的子域后缀一起使用。 Issuer证书的发行人。包含所有关于证书验证的信息。除了CN外,能和所有的子域后缀一起使用。 VadidFrom证书发行的日期。使用VBScript格式。 ValidUntil该证书不在有效的时间。 SerialNumber包含该证书的序列号。 Certificate包含整个证书内容的二进制流,使用ASN.1格式。 对于SubField,Subject和Issuer关键字可以具有如下的子域后缀:(比如:SubjectOU或IssuerL) C起源国家。 O公司或组织名称。 OU组织单元。 CN用户的常规名称。 L局部。 S州(或省)。 T个人或公司的标题。 GN给定名称。 I初始。 当文件cervbs.inc(VBScript使用)或cerjavas.inc(Jscript使用)通过使用#INCLUDE导向包含在你的Active Server Page里时,下面两个标志可以使用: ceCertPresent指明客户证书是否存在,其值为TRUE或FALSE。 ceUnrecongnizedIssure指明在该链表中的最后的证书的发行者是否未知,其值为TRUE或FALSE。 Request.Cookies(Cookie[(key).Attribute]) Cookie的集合。允许获得浏览器的Cookie。Cookie指明返回那一个Cookie。Key用于从Cookie字典中返回具有某一关键字的Cookie值。对于Attribute,你能使用属性HasKeys来确定某一Cookie是否具有子关键字。HasKeys的值为TRUE或FALSE。 Request.Form(Parameter)[(Index).Count] 填写在HTML的表单中所有的数据的集合。Parameter是在HTML表单中某一元素的名称。当某一参数具有不止一个值(比如,当在<SELECT>中使用MULTIPLE属性时)时,使用Index。当某一参数具有多值时,Count指明多值个数。 Request.QueryString(Varible)[(Index).Count] 查询字符串的所有值的集合。Varible是在查询字符串某一变量的名称。当某一变量具有多于一个值时,使用Index。当某一参数具有多值时,Count指明值的个数。 Request.ServerVaribles(Server Environment Variable) 环境变量的集合。允许读取HTTP头。你可以通过使用HTTP_前缀来读取任何头信息。比如,HTTP_USER_AGENT接受客户代理HTTP头(浏览器类型)。除此外,你可以使用下表所示的变量获得任何环境信息。 ALL_HTTP客户端发送的所有HTTP标头,他的结果都有前缀HTTP_。 ALL_RAW客户端发送的所有HTTP标头,其结果和客户端发送时一样,没有前缀HTTP_ APPL_MD_PATH应用程序的元数据库路径。 APPL_PHYSICAL_PATH与应用程序元数据库路径相应的物理路径。 AUTH_PASSWORD当使用基本验证模式时,客户在密码对话框中输入的密码。 AUTH_TYPE这是用户访问受保护的脚本时,服务器用于检验用户的验证方法。 AUTH_USER代验证的用户名。 CERT_COOKIE唯一的客户证书ID号。 CERT_FLAG客户证书标志,如有客户端证书,则bit0为0。如果客户端证书验证无效,bit1被设置为1。 CERT_ISSUER用户证书中的发行者字段。 CERT_KEYSIZE安全套接字层连接关键字的位数,如128。 CERT_SECRETKEYSIZE服务器验证私人关键字的位数。如1024。 CERT_SERIALNUMBER客户证书的序列号字段。 CERT_SERVER_ISSUER服务器证书的发行者字段 CERT_SERVER_SUBJECT服务器证书的主题字段。 CERT_SUBJECT客户端证书的主题字段。 CONTENT_LENGTH客户端发出内容的长度。 CONTENT_TYPE客户发送的form内容或HTTP PUT的数据类型。 GATEWAY_INTERFACE服务器使用的网关界面。 HTTPS如果请求穿过安全通道(SSL),则返回ON。如果请求来自非安全通道,则返回OFF。 HTTPS_KEYSIZE安全套接字层连接关键字的位数,如128。 HTTPS_SECRETKEYSIZE服务器验证私人关键字的位数。如1024。 HTTPS_SERVER_ISSUER服务器证书的发行者字段。 HTTPS_SERVER_SUBJECT服务器证书的主题字段。 INSTANCE_IDIIS实例的ID号。 INSTANCE_META_PATH响应请求的IIS实例的元数据库路径。 LOCAL_ADDR返回接受请求的服务器地址。 LOGON_USER用户登录Windows NT的帐号 PATH_INFO客户端提供的路径信息。 PATH_TRANSLATED通过由虚拟至物理的映射后得到的路径。 QUERY_STRING查询字符串内容。 REMOTE_ADDR发出请求的远程主机的IP地址。 REMOTE_HOST发出请求的远程主机名称。 REQUEST_METHOD提出请求的方法。比如GET、HEAD、POST等等。 SCRIPT_NAME执行脚本的名称。 SERVER_NAME服务器的主机名、DNS地址或IP地址。 SERVER_PORT接受请求的服务器端口号。 SERVER_PORT_SECURE如果接受请求的服务器端口为安全端口时,则为1,否则为0。 SERVER_PROTOCOL服务器使用的协议的名称和版本。 SERVER_SOFTWARE应答请求并运行网关的服务器软件的名称和版本。 URL提供URL的基本部分。  方法 Request.BinaryRead(Count) 接收一个HTML表单的未经过处理的内容。当调用此方法时,Count指明要接收多少字节。在调用此方法后,Count指明实际上接收到多少个字节。 属性 Request.TotalBytes 查询体的长度,以字节为单位。

清除页面缓存

当使用ASP进行Web编程时,你发现确实修改了程序代码,确认没有改错,却发现输出的Webyemi8an没有变化,这就是服务端将此ASP文件加入了页面缓存。    清楚页面缓存有一下几种方法;    1.在ASP页面首部加入一下代码:      Response.Buffer=True      Response.ExpiresAbsolute=Now()-1      Response.Expires=0      Response.CacheControl=“no-cache”      Response.AddHeader “Pragma”,“no-Cache”    2.在HTML代码中加入下面的代码,不过这些代码似乎不能解决刷新无效的问题,因为这些代码只是针对客户端的页面缓存而已,只具有清楚客户端的页面缓存的功能。      <HEAD>        <META HTTP-EQUIV="Pragma" CONTENT="no-cache">        <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">        <META HTTP-EQUIV="Expires" CONTENT="no-cache">      </HEAD>    3.如果一个ASP文件是url.asp,那么在访问的时候,脚本链接应该为:      <input type="button" onclick="window.location.href=’url.asp?’+Math.random()" value="提交"/> 

Jmail邮件发送简单示例

 set msg = server.createobject("jmail.message")  msg.logging = true msg.charset = "gb2312" msg.from = "webmaster@w3cnet.com" msg.fromname = "标准网络"  msg.addrecipient "w3cnet@qq.com"  msg.subject = "会员验证" msg.htmlbody = "<span style=’color:red;'>LED</span>" 'msg.body = "this is html content" msg.addattachment("D:\ximancolor\Jmail\baidu.gif") msg.send("127.0.0.1")

asp数组使用

在ASP编程中使用数组 数组的定义Dim MyArrayMyArray = Array(1,5,123,12,98) 可扩展数组Dim MyArray()for i = 0 to 10ReDim Preserve MyArray(i)MyArray(i)=inext 将一个字符串分割并返回分割结果的数组Dim MyArrayMyArray = Split(tempcnt,chr(13)&chr(10))For I = Lbound(MyArray) to Ubound(MyArray) Response.Write MyArray(I) & "<br>"Next 数组排序函数function..Sort(ary) KeepChecking = TRUE Do Until KeepChecking = FALSE KeepChecking = FALSE For I = 0 to UBound(ary) If I = UBound(ary) Then Exit For If ary(I) > ary(I+1) Then FirstValue = ary(I) SecondValue = ary(I+1) ary(I) = SecondValue ary(I+1) = FirstValue KeepChecking = TRUE End If Next Loop Sort = ary End function.. 数组排序函数应用例子Dim MyArray MyArray = Array(1,5,123,12,98)MyArray = Sort(MyArray) For I = Lbound(MyArray) to Ubound(MyArray) Response.Write MyArray(I) & "<br>"Next 在Application和Session中使用数组Application.LockApplication("StoredArray") = MyArrayApplication.Unlock LocalArray = Application("StoredArray") 覆盖Application中的数组Application.LockApplication("StoredArray") = LocalArrayApplication.Unlock Session使用方法与Application相同 从数据库中把数据导入数组中Dim MyArray取出全部记录MyArray = RS.GetRows取出前10项记录MyArray = RS.GetRows(10) For row = 0 To UBound(MyArray, 2)For col = 0 To UBound(MyArray, 1)Response.Write (col, row) & "<br>"NextNext   回复——————————————————————————-- .2. 有效的在asp中利用数组admin(2006-3-22 7:57:28) IP:一个数组是一个基本的数据结构,它是由跟随若干数字的变量组成,代替了声明10个变量来代表10个值的过程,你可以声明一个数组,并且把10个元素存入到这个数组中。 就像声明其他变量一样,数组需要与其大小相同大的内存,因此他们非常高效。在数组中为了获得一个特殊的变量,你需要参考它的索引。一个数组中正确的索引值是从0到(下标-1),如果一个数组的大小是10,我们可以从0到9来索引元素。数组不是复杂的结构,记住,你可以像应用其他变量一样来应用数组中的变量,规则是一样的。 现在让我们看看如何定义一个数组,如何动态的更改数组的大小,一些有用的asp数组函数,在数组中如何查找元素和我们怎样在页面和页面之间传递数组。 ……………………………………… 定义一个简单的数组 有两种方法在asp中定义数组,让我们看看每种的例子: 方法一:MyArray = Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct", "Nov","Dec") 方法二:Dim myArray(2) myArray(0)="Jan"myArray(1)="Feb" 在方法一中,我们用一行定义整个数组,这种方法在数组中有特殊的用途,如上面那样只存储一年中的12个月。在方法二中,我们在多行中用单独的元素定义值,如果你想从纪录中将不同的值存入数组元素中,或者在一个循环中定义每一个元素的值,就要用到这种方法,例如:Dim myArray(20)Dim I For I=0 to 20Myarray(I)="This is message " & INext ……………………………………………………………………………………. 动态改变数组的大小 现在让我们看看动态改变数组的大小。为什么你要做这个?举例说如果你不知道一个查询中有多少项目,但是你又想把这些数据存入到数组中,这时你将不能用上面的方法,除非你获得了数据的总数然后声明数组。为了避免这些,我们看看其中的方法: DIM myArray()Dim I REDIM myArray(20) '将数组重新定义为20维 For I=0 to 20MyArray(I)="This is item " & INext 在上面的例子中,声明数组没有包含任何的数字项目,它的作用是告诉asp有一个数组被声明了,然后我们用REDIM语句来重新定义数组有20维,并且向其中存入数据。 ……………………………………………………………………………………. 有用的数组函数 Ubound(arrayName)函数 这个函数是返回数组的下标,也就是数组最后一个元素的标记。 Dim myArray(10)Dim I For I=0 to 10MyArray(I)="Item " & INextResponse.write "ubound(myArray) = " & ubound(myArray) Lbound(arrayName)函数 这个函数是返回数组的上标,也就是数组第一个元素的标记。可以用上面的例子进行试验,不过不要忘了把Ubound换成Lbound哟! Split(string, splitby)函数 这个函数返回基于0的一维数组,其中包含指定数目的子字符串。这里有两个参数,string是一个字符串,sqlitby是分隔符,让我们看一个例子来理解这个函数的功能: Dim myStringDim myArrayDim I MyString = "a,b,c,d"MyArray = split(MyString,",") For I=0 to Ubound(MyArray)Response.write MyArray(I) & "<br>"Next 这个例子的意思是:将字符串"a,b,c,d"转换成一个有四个元素一维数组,其中字符串中的","是分隔符。最后我们用循环将这个数组显示出来。如果大家觉得不容易懂,可以自己上机调试一下就明白了,其实很简单。 ……………………………………………………………………………………. 在数组中查找元素这有一个函数,它能返回数组中的元素索引。这个索引是数组元素的基本位置,如:0代表myArray(0)。 function findArray(arrName,srcStr)dim Idim pint,cnt cnt=0 for i=0 to ubound(arrName)if cnt=0 thenif srcStr=arrName(i) thenpint=icnt=1end ifend ifnextfindArray=pint+1end function 现在我们来用一用这个函数: Dim myArray(20)Dim k For k=0 to 20MyArray(k)="Item " & kNext Response.write findArray(myArray,"Item 8") & "<p>"Response.write myArray(findArray(myArray,"Item 8")) 赶紧在本机上调试一下,看看这个函数的功能。 ……………………………………………………………………………………. 向另一个页面传递数组 现在有很多种方法向另一页面传递数组,目前有三种方法: 定义一个又逗号分隔的字符串,然后再下一页中用Split函数重新建立数组。将数组存储在一个Session变量中,然后在下一个页面中调用。通过表单的隐含区域来传递数组,他们都是自动用逗号分开,然后再用Split函数重新建立数组。 前两种方法很好,但是都比第三中复杂。在这里我们将只介绍第三种,因为它是最简单最有效的。 1.asp:<%dim Idim myArray(20) for I=0 to 20myArray(I)="Item " & Inext%><html><body><form name="testform" method="post" action="2.asp"><%for I=0 to ubound(myArray)response.write "<input type=hidden name=myArray value=’" & myArray(I) & "'>"next%><p><input type="submit"></form></body></html> 以上我们做的是在一个表单中用单独的隐含域存储数组中的每个元素,我们再看看下一页: 2.asp<html><body><%dim arrStringdim myArraydim I arrString=request("myArray")myArray = split(arrString,",") for I=0 to ubound(myArray) response.write "Item "&I&" = " & myArray(I) & "<br>" & vbCrLfnext%></body></html> 调试了吗?怎么样,简单吧!数组就这么传递过去了。好了,通过以上的讲解,我想初学者一定对asp中的数组有了一定的了解,当然这里将的都只是最基本的,其实数组的功能远远不只这些,如果大家肯钻研,它能使在asp的程序运行效率大大提高。

asp函数详解

Array()  FUNCTION: 返回一个数组  SYNTAX: Array(list)  ARGUMENTS: 字符,数字均可  EXAMPLE: <%  Dim myArray()  For i = 1 to 7  Redim Preserve myArray(i)  myArray(i) = WeekdayName(i)  Next  %>  RESULT: 建立了一个包含7个元素的数组myArray  myArray("Sunday","Monday", … … "Saturday") CInt()  FUNCTION: 将一个表达式转化为数字类型  SYNTAX: CInt(expression)  ARGUMENTS: 任何有效的字符均可  EXAMPLE: <%  f = "234"  response.write cINT(f) + 2  %>  RESULT: 236  转化字符"234"为数字"234",如果字符串为空,则返回0值 CreateObject()  FUNCTION: 建立和返回一个已注册的ACTIVEX组件的实例。  SYNTAX: CreateObject(objName)  ARGUMENTS: objName 是任何一个有效、已注册的ACTIVEX组件的名字.  EXAMPLE: <%  Set con = Server.CreateObject("ADODB.Connection")  %>  RESULT: CStr()  FUNCTION: 转化一个表达式为字符串.  SYNTAX: CStr(expression)  ARGUMENTS: expression 是任何有效的表达式。  EXAMPLE: <%  s = 3 + 2  response.write "The result is: " & cStr(s)  %>  RESULT: 转化数字“5”为字符“5”。 Date()  FUNCTION: 返回当前系统日期.  SYNTAX: Date()  ARGUMENTS: None.  EXAMPLE: <%=Date%>  RESULT: 8/4/99 DateAdd()  FUNCTION: 返回一个被改变了的日期。  SYNTAX: DateAdd(timeinterval,number,date)  ARGUMENTS: timeinterval is the time interval to add; number is amount of time intervals to add; and date is the starting date.  EXAMPLE: <%  currentDate = #8/4/99#  newDate = DateAdd("m",3,currentDate)  response.write newDate  %>   <%  currentDate = #12:34:45 PM#  newDate = DateAdd("h",3,currentDate)  response.write newDate  %>  RESULT: 11/4/99  3:34:45 PM   "m" = "month";  "d" = "day";   If currentDate is in time format then,  "h" = "hour";  "s" = "second"; DateDiff()  FUNCTION: 返回两个日期之间的差值 。  SYNTAX: DateDiff(timeinterval,date1,date2 [, firstdayofweek [, firstweekofyear>>)  ARGUMENTS: timeinterval 表示相隔时间的类型,如“M“表示“月”。  EXAMPLE: <%  fromDate = #8/4/99#  toDate = #1/1/2000#  response.write "There are " & _  DateDiff("d",fromDate,toDate) & _  " days to millenium from 8/4/99."  %>  RESULT: 从8/4/99 到2000年还有 150 天. Day()  FUNCTION: 返回一个月的第几日 .  SYNTAX: Day(date)  ARGUMENTS: date 是任何有效的日期。  EXAMPLE: <%=Day(#8/4/99#)%>  RESULT: 4 FormatCurrency()  FUNCTION: 返回表达式,此表达式已被格式化为货币值  SYNTAX: FormatCurrency(Expression [, Digit [, LeadingDigit [, Paren [, GroupDigit>>>>)  ARGUMENTS: Digit 指示小数点右侧显示位数的数值。默认值为 -1,指示使用的是计算机的区域设置;   LeadingDigit 三态常数,指示是否显示小数值小数点前面的零。  EXAMPLE: <%=FormatCurrency(34.3456)%>  RESULT: $34.35 FormatDateTime()  FUNCTION: 返回表达式,此表达式已被格式化为日期或时间  SYNTAX: FormatDateTime(Date, [, NamedFormat>)  ARGUMENTS: NamedFormat 指示所使用的日期/时间格式的数值,如果省略,则使用 vbGeneralDate.  EXAMPLE: <%=FormatDateTime("08/4/99", vbLongDate)%>  RESULT: Wednesday, August 04, 1999 FormatNumber()  FUNCTION: 返回表达式,此表达式已被格式化为数值.  SYNTAX: FormatNumber(Expression [, Digit [, LeadingDigit [, Paren [, GroupDigit>>>>)  ARGUMENTS: Digit 指示小数点右侧显示位数的数值。默认值为 -1,指示使用的是计算机的区域设置。; LeadingDigit i指示小数点右侧显示位数的数值。默认值为 -1,指示使用的是计算机的区域设置。; Paren 指示小数点右侧显示位数的数值。默认值为 -1,指示使用的是计算机的区域设置。; GroupDigit i指示小数点右侧显示位数的数值。默认值为 -1,指示使用的是计算机的区域设置。.  EXAMPLE: <%=FormatNumber(45.324567, 3)%>  RESULT: 45.325 FormatPercent()  FUNCTION: 返回表达式,此表达式已被格式化为尾随有 % 符号的百分比(乘以 100 )。 (%)  SYNTAX: FormatPercent(Expression [, Digit [, LeadingDigit [, Paren [, GroupDigit>>>>)  ARGUMENTS: 同上.  EXAMPLE: <%=FormatPercent(0.45267, 3)%>  RESULT: 45.267% Hour()  FUNCTION: 以24时返回小时数.  SYNTAX: Hour(time)  ARGUMENTS:  EXAMPLE: <%=Hour(#4:45:34 PM#)%>  RESULT: 16  (Hour has been converted to 24-hour system) Instr()  FUNCTION: 返回字符或字符串在另一个字符串中第一次出现的位置.  SYNTAX: Instr([start, > strToBeSearched, strSearchFor [, compare>)  ARGUMENTS: Start为搜索的起始值,strToBeSearched接受搜索的字符串 strSearchFor要搜索的字符compare 比较方式(详细见ASP常数)  EXAMPLE: <%  strText = "This is a test!!"  pos = Instr(strText, "a")  response.write pos  %>  RESULT: 9 InstrRev()  FUNCTION: 同上,只是从字符串的最后一个搜索起  SYNTAX: InstrRev([start, > strToBeSearched, strSearchFor [, compare>)  ARGUMENTS: 同上.  EXAMPLE: <%  strText = "This is a test!!"  pos = InstrRev(strText, "s")  response.write pos  %>  RESULT: 13 Int()  FUNCTION: 返回数值类型,不四舍五入。  SYNTAX: Int(number)  ARGUMENTS:  EXAMPLE: <%=INT(32.89)%>  RESULT: 32 IsArray()  FUNCTION: 判断一对象是否为数组,返回布尔值 .  SYNTAX: IsArray(name)  ARGUMENTS:  EXAMPLE: <%  strTest = "Test!"  response.write IsArray(strTest)  %>  RESULT: False IsDate()  FUNCTION: 判断一对象是否为日期,返回布尔值  SYNTAX: IsDate(expression)  ARGUMENTS: expression is any valid expression.  EXAMPLE: <%  strTest = "8/4/99"  response.write IsDate(strTest)  %>  RESULT: True IsEmpty()  FUNCTION: 判断一对象是否初始化,返回布尔值.  SYNTAX: IsEmpty(expression)  ARGUMENTS:  EXAMPLE: <%  Dim i  response.write IsEmpty(i)  %>  RESULT: True IsNull()  FUNCTION: 判断一对象是否为空,返回布尔值.  SYNTAX: IsNull(expression)  ARGUMENTS:  EXAMPLE: <%  Dim i  response.write IsNull(i)  %>  RESULT: False  IsNumeric()  FUNCTION: 判断一对象是否为数字,返回布尔值.  SYNTAX: IsNumeric(expression)  ARGUMENTS:  EXAMPLE: <%  i = "345"  response.write IsNumeric(i)  %>  RESULT: True  就算数字加了引号,ASP还是认为它是数字。 IsObject()  FUNCTION: 判断一对象是否为对象,返回布尔值.  SYNTAX: IsObject(expression)  ARGUMENTS:  EXAMPLE: <%  Set con = Server.CreateObject("ADODB.Connection")  response.write IsObject(con)  %>  RESULT: True LBound()  FUNCTION: 返回指定数组维的最小可用下标.  SYNTAX: Lbound(arrayname [, dimension>)  ARGUMENTS: dimension 指明要返回哪一维下界的整数。使用 1 表示第一维,2 表示第二维,以此类  推。如果省略 dimension 参数,默认值为 1.  EXAMPLE: <%  i = Array("Monday","Tuesday","Wednesday")  response.write LBound(i)  %>  RESULT: 0 LCase()  FUNCTION: 返回字符串的小写形式  SYNTAX: Lcase(string)  ARGUMENTS: string is any valid string expression.  EXAMPLE: <%  strTest = "This is a test!"  response.write LCase(strTest)  %>  RESULT: this is a test! Left()  FUNCTION: 返回字符串左边第length个字符以前的字符(含第length个字符).  SYNTAX: Left(string, length)  ARGUMENTS:  EXAMPLE: <%  strTest = "This is a test!"  response.write Left(strTest, 3)  %>  RESULT: Thi Len()  FUNCTION: 返回字符串的长度.  SYNTAX: Len(string | varName)  ARGUMENTS:  EXAMPLE: <%  strTest = "This is a test!"  response.write Len(strTest)  %>  RESULT: 15 LTrim()  FUNCTION: 去掉字符串左边的空格.  SYNTAX: LTrim(string)  ARGUMENTS:  EXAMPLE: <%  strTest = " This is a test!"  response.write LTrim(strTest)  %>  RESULT: This is a test! Mid()  FUNCTION: 返回特定长度的字符串(从start开始,长度为length).  SYNTAX: Mid(string, start [, length>)  ARGUMENTS:  EXAMPLE: <%  strTest = "This is a test! Today is Monday."  response.write Mid(strTest, 17, 5)  %>  RESULT: Today Minute()  FUNCTION: 返回时间的分钏.  SYNTAX: Minute(time)  ARGUMENTS:  EXAMPLE: <%=Minute(#12:45:32 PM#)%>  RESULT: 45 Month()  FUNCTION: 返回日期.  SYNTAX: Month(date)  ARGUMENTS: date is any valid date expression.  EXAMPLE: <%=Month(#08/04/99#)%>  RESULT: 8 MonthName()  FUNCTION: Returns a string identifying the specified month.  SYNTAX: MonthName(month, [, Abb>)  ARGUMENTS: month is the numeric representation for a given month; Abb (optional) is a boolean value used to display month abbreviation. True will display the abbreviated month name and False […]

asp汉字转化为拼音

很多问题都是因为中文问题造成的 如文件名最好别用中文 现在的解决方法一般是产生一个ID,将这个ID做文件名 网页上如果url带汉字也经常出错 现在的解决方法一般用urlencode编码 现在用了这个转化,就好多了 原理,使用Dictionary技术1.添加索引2.遍历词典 <%Set d = CreateObject("Scripting.Dictionary")d.add "a",-20319d.add "ai",-20317d.add "an",-20304d.add "ang",-20295d.add "ao",-20292d.add "ba",-20283d.add "bai",-20265d.add "ban",-20257d.add "bang",-20242d.add "bao",-20230d.add "bei",-20051d.add "ben",-20036d.add "beng",-20032d.add "bi",-20026d.add "bian",-20002d.add "biao",-19990d.add "bie",-19986d.add "bin",-19982d.add "bing",-19976d.add "bo",-19805d.add "bu",-19784d.add "ca",-19775d.add "cai",-19774d.add "can",-19763d.add "cang",-19756d.add "cao",-19751d.add "ce",-19746d.add "ceng",-19741d.add "cha",-19739d.add "chai",-19728d.add "chan",-19725d.add "chang",-19715d.add "chao",-19540d.add "che",-19531d.add "chen",-19525d.add "cheng",-19515d.add "chi",-19500d.add "chong",-19484d.add "chou",-19479d.add "chu",-19467d.add "chuai",-19289d.add "chuan",-19288d.add "chuang",-19281d.add "chui",-19275d.add "chun",-19270d.add "chuo",-19263d.add "ci",-19261d.add "cong",-19249d.add "cou",-19243d.add "cu",-19242d.add "cuan",-19238d.add "cui",-19235d.add "cun",-19227d.add "cuo",-19224d.add "da",-19218d.add "dai",-19212d.add "dan",-19038d.add "dang",-19023d.add "dao",-19018d.add "de",-19006d.add "deng",-19003d.add "di",-18996d.add "dian",-18977d.add "diao",-18961d.add "die",-18952d.add "ding",-18783d.add "diu",-18774d.add "dong",-18773d.add "dou",-18763d.add "du",-18756d.add "duan",-18741d.add "dui",-18735d.add "dun",-18731d.add "duo",-18722d.add "e",-18710d.add "en",-18697d.add "er",-18696d.add "fa",-18526d.add "fan",-18518d.add "fang",-18501d.add "fei",-18490d.add "fen",-18478d.add "feng",-18463d.add "fo",-18448d.add "fou",-18447d.add "fu",-18446d.add "ga",-18239d.add "gai",-18237d.add "gan",-18231d.add "gang",-18220d.add "gao",-18211d.add "ge",-18201d.add "gei",-18184d.add "gen",-18183d.add "geng",-18181d.add "gong",-18012d.add "gou",-17997d.add "gu",-17988d.add "gua",-17970d.add "guai",-17964d.add "guan",-17961d.add "guang",-17950d.add "gui",-17947d.add "gun",-17931d.add "guo",-17928d.add "ha",-17922d.add "hai",-17759d.add "han",-17752d.add "hang",-17733d.add "hao",-17730d.add "he",-17721d.add "hei",-17703d.add "hen",-17701d.add "heng",-17697d.add "hong",-17692d.add "hou",-17683d.add "hu",-17676d.add "hua",-17496d.add "huai",-17487d.add "huan",-17482d.add "huang",-17468d.add "hui",-17454d.add "hun",-17433d.add "huo",-17427d.add "ji",-17417d.add "jia",-17202d.add "jian",-17185d.add "jiang",-16983d.add "jiao",-16970d.add "jie",-16942d.add "jin",-16915d.add "jing",-16733d.add "jiong",-16708d.add "jiu",-16706d.add "ju",-16689d.add "juan",-16664d.add "jue",-16657d.add "jun",-16647d.add "ka",-16474d.add "kai",-16470d.add "kan",-16465d.add "kang",-16459d.add "kao",-16452d.add "ke",-16448d.add "ken",-16433d.add "keng",-16429d.add "kong",-16427d.add "kou",-16423d.add "ku",-16419d.add "kua",-16412d.add "kuai",-16407d.add "kuan",-16403d.add "kuang",-16401d.add "kui",-16393d.add "kun",-16220d.add "kuo",-16216d.add "la",-16212d.add "lai",-16205d.add "lan",-16202d.add "lang",-16187d.add "lao",-16180d.add "le",-16171d.add "lei",-16169d.add "leng",-16158d.add "li",-16155d.add "lia",-15959d.add "lian",-15958d.add "liang",-15944d.add "liao",-15933d.add "lie",-15920d.add "lin",-15915d.add "ling",-15903d.add "liu",-15889d.add "long",-15878d.add "lou",-15707d.add "lu",-15701d.add "lv",-15681d.add "luan",-15667d.add "lue",-15661d.add "lun",-15659d.add "luo",-15652d.add "ma",-15640d.add "mai",-15631d.add "man",-15625d.add "mang",-15454d.add "mao",-15448d.add "me",-15436d.add "mei",-15435d.add "men",-15419d.add "meng",-15416d.add "mi",-15408d.add "mian",-15394d.add "miao",-15385d.add "mie",-15377d.add "min",-15375d.add "ming",-15369d.add "miu",-15363d.add "mo",-15362d.add "mou",-15183d.add "mu",-15180d.add "na",-15165d.add "nai",-15158d.add "nan",-15153d.add "nang",-15150d.add "nao",-15149d.add "ne",-15144d.add "nei",-15143d.add "nen",-15141d.add "neng",-15140d.add "ni",-15139d.add "nian",-15128d.add "niang",-15121d.add "niao",-15119d.add "nie",-15117d.add "nin",-15110d.add "ning",-15109d.add "niu",-14941d.add "nong",-14937d.add "nu",-14933d.add "nv",-14930d.add "nuan",-14929d.add "nue",-14928d.add "nuo",-14926d.add "o",-14922d.add "ou",-14921d.add "pa",-14914d.add "pai",-14908d.add "pan",-14902d.add "pang",-14894d.add "pao",-14889d.add "pei",-14882d.add "pen",-14873d.add "peng",-14871d.add "pi",-14857d.add "pian",-14678d.add "piao",-14674d.add "pie",-14670d.add "pin",-14668d.add "ping",-14663d.add "po",-14654d.add "pu",-14645d.add "qi",-14630d.add "qia",-14594d.add "qian",-14429d.add "qiang",-14407d.add "qiao",-14399d.add "qie",-14384d.add "qin",-14379d.add "qing",-14368d.add "qiong",-14355d.add "qiu",-14353d.add "qu",-14345d.add "quan",-14170d.add "que",-14159d.add "qun",-14151d.add "ran",-14149d.add "rang",-14145d.add "rao",-14140d.add "re",-14137d.add "ren",-14135d.add "reng",-14125d.add "ri",-14123d.add "rong",-14122d.add "rou",-14112d.add "ru",-14109d.add "ruan",-14099d.add "rui",-14097d.add "run",-14094d.add "ruo",-14092d.add "sa",-14090d.add "sai",-14087d.add "san",-14083d.add "sang",-13917d.add "sao",-13914d.add "se",-13910d.add "sen",-13907d.add "seng",-13906d.add "sha",-13905d.add "shai",-13896d.add "shan",-13894d.add "shang",-13878d.add "shao",-13870d.add "she",-13859d.add "shen",-13847d.add "sheng",-13831d.add "shi",-13658d.add "shou",-13611d.add "shu",-13601d.add "shua",-13406d.add "shuai",-13404d.add "shuan",-13400d.add "shuang",-13398d.add "shui",-13395d.add "shun",-13391d.add "shuo",-13387d.add "si",-13383d.add "song",-13367d.add "sou",-13359d.add "su",-13356d.add "suan",-13343d.add "sui",-13340d.add "sun",-13329d.add "suo",-13326d.add "ta",-13318d.add "tai",-13147d.add "tan",-13138d.add "tang",-13120d.add "tao",-13107d.add "te",-13096d.add "teng",-13095d.add "ti",-13091d.add "tian",-13076d.add "tiao",-13068d.add "tie",-13063d.add "ting",-13060d.add "tong",-12888d.add "tou",-12875d.add "tu",-12871d.add "tuan",-12860d.add "tui",-12858d.add "tun",-12852d.add "tuo",-12849d.add "wa",-12838d.add "wai",-12831d.add "wan",-12829d.add "wang",-12812d.add "wei",-12802d.add "wen",-12607d.add "weng",-12597d.add "wo",-12594d.add "wu",-12585d.add "xi",-12556d.add "xia",-12359d.add "xian",-12346d.add "xiang",-12320d.add "xiao",-12300d.add "xie",-12120d.add "xin",-12099d.add "xing",-12089d.add "xiong",-12074d.add "xiu",-12067d.add "xu",-12058d.add "xuan",-12039d.add "xue",-11867d.add "xun",-11861d.add "ya",-11847d.add "yan",-11831d.add "yang",-11798d.add "yao",-11781d.add "ye",-11604d.add "yi",-11589d.add "yin",-11536d.add "ying",-11358d.add "yo",-11340d.add "yong",-11339d.add "you",-11324d.add "yu",-11303d.add "yuan",-11097d.add "yue",-11077d.add "yun",-11067d.add "za",-11055d.add "zai",-11052d.add "zan",-11045d.add "zang",-11041d.add "zao",-11038d.add "ze",-11024d.add "zei",-11020d.add "zen",-11019d.add "zeng",-11018d.add "zha",-11014d.add "zhai",-10838d.add "zhan",-10832d.add "zhang",-10815d.add "zhao",-10800d.add "zhe",-10790d.add "zhen",-10780d.add "zheng",-10764d.add "zhi",-10587d.add "zhong",-10544d.add "zhou",-10533d.add "zhu",-10519d.add "zhua",-10331d.add "zhuai",-10329d.add "zhuan",-10328d.add "zhuang",-10322d.add "zhui",-10315d.add "zhun",-10309d.add "zhuo",-10307d.add "zi",-10296d.add "zong",-10281d.add "zou",-10274d.add "zu",-10270d.add "zuan",-10262d.add "zui",-10260d.add "zun",-10256d.add "zuo",-10254 function g(num)if num>0 and num<160 theng=chr(num)else if num<-20319 or num>-10247 theng=""elsea=d.Itemsb=d.keysfor i=d.count-1 to 0 step -1if a(i)<=num then exit fornextg=b(i)end ifend ifend functionfunction c(str)c=""for i=1 to len(str)c=c&g(asc(mid(str,i,1)))nextend function response.write c(request("hz"))%><form method=post>请在此处输入中文:<input name=hz></form>