asp技术,经验分享,疑难解答,常用技巧

2010-6-30 16:53
伪静态是相对真实静态来讲的.
一、什么是静态技术?
所谓静态的意思,就是地址中不带问号。
二、为什么要用伪静态技术?
Web应用程序最大的特点之一就是无状态,当一个页面跳转到另一个页面时,那么这个页面上的所有参数都将抛弃,所以动态页面一般利用url地址来保存其参数,就像:
www.attjs.net/essay.asp?id=1
这样,搜索引擎在录取该页面时,可能会因为问号而进入死循环(以前动网就有这样一个漏洞,蜘蛛进去出不来了),所以很多时候带问号的地址是不会进去的,这样便降低了页面的收录效率。
既然这样,那么选用不带问号的url不是可以更好的让搜索引擎收录自己的网页?的确。静态网页的url正好不带问号,所以我们要伪造静态,目的就是为了SEO,提高网站的收录效率。
三、实现静态的三种方法
1、 重写url参数
参数过多,也不利于搜索引擎收录,故可以通过修改参数实现静态。
先看动态的url地址,当我们点击它时,页面跳转到essay.asp页面的同时,还传递给页面一个参数id=1,然后我们取得了id的值,再由"select * from article where id="& ID 找到对应的记录。由此可知,整个过程的关键是取得参数的值,所以,也可以在静态的url包含该参数的值。
又要包含参数的值,又要考虑静态,于是得出一个解决方案,即要实现这样的转换:
www.attjs.net/essay.asp?id=1
www.attjs.net/essay.asp?/1.html
比较两个url的格式,我们仅仅改变动态地址的参数,这种方式叫作重写url参数法。
不过它也存在表面和内在的缺陷。例如,它仍然存在.asp的记号,更重要的是它并没有去掉问号。
通常我们为了更好的缓解服务器压力,和增强搜索引擎的友好面.都将文章内容生成静态页面.
但是有的朋友为了实时的显示一些信息.或者还想运用动态脚本解决一些问题.不能用静态的方式来展示网站内容.
但是这就损失了对搜索引擎的友好面.怎么样在两者之间找个中间方法呢,这就产生了伪静态技术.
就是展示出来的是以.html一类的静态页面形式,但其实是用ASP一类的动态脚本来处理的.
我的一个思路是用IIS的404错误处理机制来实现的.这个比rewrite技术要灵活得多.
首先,设置站点属性-自定意错误
找到HTTP错误404,然后编辑属性->消息类型选中URL->URL填入“/index.asp”,或您的错误处理页面.
这样,比如用户或蜘蛛访问http://www.ynshangji.com/corp/?4080.html时(4080为文章在数据库的ID).由于些页面不存在,所以触发了404错误.转向了index.asp
在index.asp里加
CurrDomain=Request.ServerVariables("HTTP_HOST") '当前访问域名
CurrURL=Replace(Request.ServerVariables("QUERY_STRING"),"404;http://"&CurrDomain&":80","") '当前访问URL
此时的CurrURL应该是:12345.html .
这样,就得到用户正在试图访问的页面.然后提取里边的文章ID(应该为:12345),用正则,这里就不多说了.
然后到数据库里提取出文章内容.输出到页面里,就OK了.
这样.用户或蜘蛛看到的URL还是他访问的URL.而我们对内容的处理上可以用到了动态技术.这就是我们想要的结果.
说得简单了一些.但是基本思路就是这样了.
伪静态的利与弊
当然犹如一篇文章的作者所说的:"如果流量稍大一些使用伪静态就出现CPU使用超负荷,我的同时在线300多人就挂了,而不使用伪静态的时候同时在线超500人都不挂,我的ISS数是1000。”
确实是这样的,由于伪静态是用正则判断而不是真实地址,分辨到底显示哪个页面的责任也由直接指定转由CPU来判断了,所以CPU占有量的上升,确实是伪静态最大的弊病。
我们应该选择伪静态还是真静态?
1、使用真静态和假静态对SEO来说没有什么区别
2、使用真静态可能将导致硬盘损坏并将影响论坛性能
3、使用伪静态将占用一定量的CPU占有率,大量使用将导致CPU超负荷
4、最重要的一点,我们要静态是为了SEO
所以:
1、使用真静态的方法可以直接排除了,因为无论怎么生成,对硬盘来说都是很伤的。
2、既然真伪静态的效果一样,我们就可以选择伪静态了。
3、但是伪静态大量使用会照成CPU超负荷。
4、所以我们只要不大量使用就可以了。
5、既然静态只是给SEO看的,我们只需要伪静态给SEO就行了,不需要给用户使用。
6、所以我们只要在专门提供给SEO爬的Archiver中使用伪静态就可以了。
7、谢谢大家耐心看我写的文章。
8、有何不解的地方或是有不同的看法欢迎提出。
关于伪静态和真静态的评论
真正的静态化和伪静态还是有本质的区别的。为浏览用户处理一个纯粹htm和一个调用多个数据的php在CPU的使用率方面明显前者少。记得原来有个人说html下载硬盘读写频繁,他这么说好像读取数据库不用读写磁盘似的,何况还有一大堆缓存的零散php也是放在硬盘的,这些读取不用磁盘操作么?可笑。
读取单个htm+图片Flash等附件就可以实现的目的,何苦要读数据库又要读php缓存文件又要重新整合数据输出再+图片Flash等附件这么大费周章呢?CMS首页不需要很多的互动的,论坛那一套不应该拿到这里来用,相反应该更多考虑的是:美观!兼容!信息的直观!性能!还有稳定!
最后,不得不提的是安全性检查,请在把获取到的参数放进数据库之前,务必做好防sql注射处理哦~
一、什么是静态技术?
所谓静态的意思,就是地址中不带问号。
二、为什么要用伪静态技术?
Web应用程序最大的特点之一就是无状态,当一个页面跳转到另一个页面时,那么这个页面上的所有参数都将抛弃,所以动态页面一般利用url地址来保存其参数,就像:
www.attjs.net/essay.asp?id=1
这样,搜索引擎在录取该页面时,可能会因为问号而进入死循环(以前动网就有这样一个漏洞,蜘蛛进去出不来了),所以很多时候带问号的地址是不会进去的,这样便降低了页面的收录效率。
既然这样,那么选用不带问号的url不是可以更好的让搜索引擎收录自己的网页?的确。静态网页的url正好不带问号,所以我们要伪造静态,目的就是为了SEO,提高网站的收录效率。
三、实现静态的三种方法
1、 重写url参数
参数过多,也不利于搜索引擎收录,故可以通过修改参数实现静态。
先看动态的url地址,当我们点击它时,页面跳转到essay.asp页面的同时,还传递给页面一个参数id=1,然后我们取得了id的值,再由"select * from article where id="& ID 找到对应的记录。由此可知,整个过程的关键是取得参数的值,所以,也可以在静态的url包含该参数的值。
又要包含参数的值,又要考虑静态,于是得出一个解决方案,即要实现这样的转换:
www.attjs.net/essay.asp?id=1
www.attjs.net/essay.asp?/1.html
比较两个url的格式,我们仅仅改变动态地址的参数,这种方式叫作重写url参数法。
不过它也存在表面和内在的缺陷。例如,它仍然存在.asp的记号,更重要的是它并没有去掉问号。
通常我们为了更好的缓解服务器压力,和增强搜索引擎的友好面.都将文章内容生成静态页面.
但是有的朋友为了实时的显示一些信息.或者还想运用动态脚本解决一些问题.不能用静态的方式来展示网站内容.
但是这就损失了对搜索引擎的友好面.怎么样在两者之间找个中间方法呢,这就产生了伪静态技术.
就是展示出来的是以.html一类的静态页面形式,但其实是用ASP一类的动态脚本来处理的.
我的一个思路是用IIS的404错误处理机制来实现的.这个比rewrite技术要灵活得多.
首先,设置站点属性-自定意错误
找到HTTP错误404,然后编辑属性->消息类型选中URL->URL填入“/index.asp”,或您的错误处理页面.
这样,比如用户或蜘蛛访问http://www.ynshangji.com/corp/?4080.html时(4080为文章在数据库的ID).由于些页面不存在,所以触发了404错误.转向了index.asp
在index.asp里加
CurrDomain=Request.ServerVariables("HTTP_HOST") '当前访问域名
CurrURL=Replace(Request.ServerVariables("QUERY_STRING"),"404;http://"&CurrDomain&":80","") '当前访问URL
此时的CurrURL应该是:12345.html .
这样,就得到用户正在试图访问的页面.然后提取里边的文章ID(应该为:12345),用正则,这里就不多说了.
然后到数据库里提取出文章内容.输出到页面里,就OK了.
这样.用户或蜘蛛看到的URL还是他访问的URL.而我们对内容的处理上可以用到了动态技术.这就是我们想要的结果.
说得简单了一些.但是基本思路就是这样了.
伪静态的利与弊
当然犹如一篇文章的作者所说的:"如果流量稍大一些使用伪静态就出现CPU使用超负荷,我的同时在线300多人就挂了,而不使用伪静态的时候同时在线超500人都不挂,我的ISS数是1000。”
确实是这样的,由于伪静态是用正则判断而不是真实地址,分辨到底显示哪个页面的责任也由直接指定转由CPU来判断了,所以CPU占有量的上升,确实是伪静态最大的弊病。
我们应该选择伪静态还是真静态?
1、使用真静态和假静态对SEO来说没有什么区别
2、使用真静态可能将导致硬盘损坏并将影响论坛性能
3、使用伪静态将占用一定量的CPU占有率,大量使用将导致CPU超负荷
4、最重要的一点,我们要静态是为了SEO
所以:
1、使用真静态的方法可以直接排除了,因为无论怎么生成,对硬盘来说都是很伤的。
2、既然真伪静态的效果一样,我们就可以选择伪静态了。
3、但是伪静态大量使用会照成CPU超负荷。
4、所以我们只要不大量使用就可以了。
5、既然静态只是给SEO看的,我们只需要伪静态给SEO就行了,不需要给用户使用。
6、所以我们只要在专门提供给SEO爬的Archiver中使用伪静态就可以了。
7、谢谢大家耐心看我写的文章。
8、有何不解的地方或是有不同的看法欢迎提出。
关于伪静态和真静态的评论
真正的静态化和伪静态还是有本质的区别的。为浏览用户处理一个纯粹htm和一个调用多个数据的php在CPU的使用率方面明显前者少。记得原来有个人说html下载硬盘读写频繁,他这么说好像读取数据库不用读写磁盘似的,何况还有一大堆缓存的零散php也是放在硬盘的,这些读取不用磁盘操作么?可笑。
读取单个htm+图片Flash等附件就可以实现的目的,何苦要读数据库又要读php缓存文件又要重新整合数据输出再+图片Flash等附件这么大费周章呢?CMS首页不需要很多的互动的,论坛那一套不应该拿到这里来用,相反应该更多考虑的是:美观!兼容!信息的直观!性能!还有稳定!
最后,不得不提的是安全性检查,请在把获取到的参数放进数据库之前,务必做好防sql注射处理哦~

2010-6-30 16:47
目前,各大搜索引擎如google、百度、雅虎已经对动态页面诸如asp,php有着不错的支持了,只要动态页面后面的参数不要太长,如控制在3个参数内,页面内容做点优化,各大搜索对该类页面收录甚至不比静态html页面差,我有个全站是asp页的网站,其收录及排名远远超过了很多静态页的网站。
当然,任何网站,结构再好,如果没有内容作为支撑的话,最终还是留不住用户。搜索引擎的发展速度,已经不是当初几乎不能收录动态页面的水平了,各大搜索都在全力发展自己的索引技术,一般的动态页面在它们那里已经是能够轻易的纳入麾下。
有的网站,其要求与用户有着较强的交互性,互动性,页面刷新很快,更新的内容也很多,这类网站是不适合生成静态页的,因为网站上的信息具有时效性,你如果生成了html静态页,然后搜索引擎又索引了你的这些内容页,展示给用户看,而用户看到的信息又有可能是过时的失效的信息,这对用户是个不好的体验。所以,我建议,此类网站的动态页面尽量不要生成html,既占用大量空间,又可能对用户造成不好的搜索体验。
虽然我们说,如今动态页面和静态html页面的收录、排名效果相比不会差到那里,只有你控制的好。但静态页面还是有点点优势的。如果你的内容,基本是长时间有效的,不会轻易变更的,那我还是建议你生成静态页html。
本文仅讨论asp生成静态页的方法。asp生成html有很多方法。
1、FSO,ado方式生成html。此类方法用的很多。比如飘易博客全站,除了统计,TAG系统是动态的外,其他全部生成了静态页面。当然,飘易博客在谷歌,百度的排名都很不错了。
2、采用组件如ISAPI_Rewrite重写,有自己服务器的站长还好办,虚拟主机的朋友就稍麻烦,除非请求服务商安装这个插件,再将程序参数提交服务器实现转化,看上去是静态化了,实际上是用静态路径访问数据库的内容。对于搜索引擎收入有一定作用,而且许多站长正是为此为苦苦寻找。
3、就是本文要讨论的重点内容。asp路径伪静态化。请看下述详细分解。
Asp页面如果你想使它看上去静态化,又不是完全真正静态化,目的就是使它对搜索引擎更友好点。讨好一下,作为辛苦的站长们也不为过嘛。就可以使用本方法。如show.asp?id=1的路径可以转换为show/?1.html,show.asp?id=1&id2=2转换为show/?1-2.html等等。
举例说明:我们需要把“http://www.piaoyi.org/show.asp?a=3&b=8”的url形式转换为“http://www.looi.com.cn/show/?3-8.html”的样子。
方法:建立目录show,在show下放入一个系统默认的首页文件,如default.asp,在default.asp里写如下代码:
<%
dim id,id1,id2,a,b
id=Request.ServerVariables("QUERY_STRING")
id1=replace(id,".html","")
id2=split(id1,"-")
a=id2(0)
b=id2(1)
response.write "a参数值为:"&a&"<br>b参数值为:"&b
''到这里已经获取了show.asp文件需要的a、b参数了。
''下面利用该参数,和以前一样打开数据库,获取内容。
%>
原理很简单。就是利用Request.ServerVariables("QUERY_STRING")取得接收的值(?后的参数),比如http://www.looi.com.cn/show/?3-8.html接收的就是3-8.html,对3-8.html进行过滤,我们只需要取得参数3和8,根据3和8再去从数据库中检索数据,后面跟动态ASP一样的了。
当然,任何网站,结构再好,如果没有内容作为支撑的话,最终还是留不住用户。搜索引擎的发展速度,已经不是当初几乎不能收录动态页面的水平了,各大搜索都在全力发展自己的索引技术,一般的动态页面在它们那里已经是能够轻易的纳入麾下。
有的网站,其要求与用户有着较强的交互性,互动性,页面刷新很快,更新的内容也很多,这类网站是不适合生成静态页的,因为网站上的信息具有时效性,你如果生成了html静态页,然后搜索引擎又索引了你的这些内容页,展示给用户看,而用户看到的信息又有可能是过时的失效的信息,这对用户是个不好的体验。所以,我建议,此类网站的动态页面尽量不要生成html,既占用大量空间,又可能对用户造成不好的搜索体验。
虽然我们说,如今动态页面和静态html页面的收录、排名效果相比不会差到那里,只有你控制的好。但静态页面还是有点点优势的。如果你的内容,基本是长时间有效的,不会轻易变更的,那我还是建议你生成静态页html。
本文仅讨论asp生成静态页的方法。asp生成html有很多方法。
1、FSO,ado方式生成html。此类方法用的很多。比如飘易博客全站,除了统计,TAG系统是动态的外,其他全部生成了静态页面。当然,飘易博客在谷歌,百度的排名都很不错了。
2、采用组件如ISAPI_Rewrite重写,有自己服务器的站长还好办,虚拟主机的朋友就稍麻烦,除非请求服务商安装这个插件,再将程序参数提交服务器实现转化,看上去是静态化了,实际上是用静态路径访问数据库的内容。对于搜索引擎收入有一定作用,而且许多站长正是为此为苦苦寻找。
3、就是本文要讨论的重点内容。asp路径伪静态化。请看下述详细分解。
Asp页面如果你想使它看上去静态化,又不是完全真正静态化,目的就是使它对搜索引擎更友好点。讨好一下,作为辛苦的站长们也不为过嘛。就可以使用本方法。如show.asp?id=1的路径可以转换为show/?1.html,show.asp?id=1&id2=2转换为show/?1-2.html等等。
举例说明:我们需要把“http://www.piaoyi.org/show.asp?a=3&b=8”的url形式转换为“http://www.looi.com.cn/show/?3-8.html”的样子。
方法:建立目录show,在show下放入一个系统默认的首页文件,如default.asp,在default.asp里写如下代码:
<%
dim id,id1,id2,a,b
id=Request.ServerVariables("QUERY_STRING")
id1=replace(id,".html","")
id2=split(id1,"-")
a=id2(0)
b=id2(1)
response.write "a参数值为:"&a&"<br>b参数值为:"&b
''到这里已经获取了show.asp文件需要的a、b参数了。
''下面利用该参数,和以前一样打开数据库,获取内容。
%>
原理很简单。就是利用Request.ServerVariables("QUERY_STRING")取得接收的值(?后的参数),比如http://www.looi.com.cn/show/?3-8.html接收的就是3-8.html,对3-8.html进行过滤,我们只需要取得参数3和8,根据3和8再去从数据库中检索数据,后面跟动态ASP一样的了。

2009-11-12 17:25
在Asp程序中用Jmail发邮件的比较多,主要是因为多数虚拟主机支持他,其它的支持的较少。下面是一个Jmail发邮件的例子代码:
如果您在自己的机器上试,请下载Jmail.dll,下载解压后,双击Setup.bat 即可完成安装!
<%
On error resume next
Dim JMail, contentId
Set JMail = Server.CreateObject("JMail.Message")
JMail.Charset = "gb2312" ' 邮件字符集,默认为"US-ASCII"
' JMail.ISOEncodeHeaders = False ' 是否进行ISO编码,默认为True
' 发送者信息(可用变量方式赋值)
JMail.From = "someone@51windows.net" ' 发送者地址
JMail.FromName = "海娃" ' 发送者姓名
JMail.Subject = "邮件主题" ' 邮件主题
' 身份验证
JMail.MailServerUserName = "myusername" ' 身份验证的用户名
JMail.MailServerPassword = "mypassword" ' 身份验证的密码
' 设置优先级,范围从1到5,越大的优先级越高,3为普通
JMail.Priority = 3
JMail.AddHeader "Originating-IP", Request.ServerVariables("REMOTE_ADDR")
' 加入一个收件人【变量email:收件人地址】可以同一语句重复加入多个
JMail.AddRecipient("someone@somehost.com")
' 加入附件【变量filename:附件文件的绝对地址,确保用户IUSR_机器名有访问的权限】
' 【参数设置是(True)否(False)为Inline方式】
'contentId = JMail.AddAttachment (Server.MapPath("jmail.asp"), True)
' 邮件主体(HTML(注意信件内链接附件的方式))
JMail.HTMLBody = "<html><head><META content=zh-cn http-equiv=Content-Language><meta http-equiv=""Content-Type"" content=""text/html; charset=gb2312""><style type=text/css>A:link { FONT-SIZE: 9pt; TEXT-DECORATION: none; color: #000000}A:visited {FONT-SIZE: 9pt; TEXT-DECORATION: none; color: #666666}A:hover {COLOR: #ff6600; FONT-SIZE: 9pt; TEXT-DECORATION: underline}BODY {FONT-SIZE: 9pt} --></style></head><body><font color=red>邮件正文</font><br><font color=green>邮件正文</font><br><b>邮件正文</b></body></html>"
' 邮件主体(文本部分)
JMail.Body = "我们的邮件采用了HTML格式,但是您的邮件查看软件可能不支持。。。邮件正文,邮件正文,邮件正文"
' 发送【调用格式:objJMail.Send([username:password@]SMTPServerAddress[:Port])】
JMail.Send("smtp.163.com")
' 关闭并清除对象
JMail.Close()
Set JMail = Nothing
if err.number<>0 then
response.write "发送发送失败!"
else
response.write "邮件发送成功!"
end if
%>
如果您在自己的机器上试,请下载Jmail.dll,下载解压后,双击Setup.bat 即可完成安装!
<%
On error resume next
Dim JMail, contentId
Set JMail = Server.CreateObject("JMail.Message")
JMail.Charset = "gb2312" ' 邮件字符集,默认为"US-ASCII"
' JMail.ISOEncodeHeaders = False ' 是否进行ISO编码,默认为True
' 发送者信息(可用变量方式赋值)
JMail.From = "someone@51windows.net" ' 发送者地址
JMail.FromName = "海娃" ' 发送者姓名
JMail.Subject = "邮件主题" ' 邮件主题
' 身份验证
JMail.MailServerUserName = "myusername" ' 身份验证的用户名
JMail.MailServerPassword = "mypassword" ' 身份验证的密码
' 设置优先级,范围从1到5,越大的优先级越高,3为普通
JMail.Priority = 3
JMail.AddHeader "Originating-IP", Request.ServerVariables("REMOTE_ADDR")
' 加入一个收件人【变量email:收件人地址】可以同一语句重复加入多个
JMail.AddRecipient("someone@somehost.com")
' 加入附件【变量filename:附件文件的绝对地址,确保用户IUSR_机器名有访问的权限】
' 【参数设置是(True)否(False)为Inline方式】
'contentId = JMail.AddAttachment (Server.MapPath("jmail.asp"), True)
' 邮件主体(HTML(注意信件内链接附件的方式))
JMail.HTMLBody = "<html><head><META content=zh-cn http-equiv=Content-Language><meta http-equiv=""Content-Type"" content=""text/html; charset=gb2312""><style type=text/css>A:link { FONT-SIZE: 9pt; TEXT-DECORATION: none; color: #000000}A:visited {FONT-SIZE: 9pt; TEXT-DECORATION: none; color: #666666}A:hover {COLOR: #ff6600; FONT-SIZE: 9pt; TEXT-DECORATION: underline}BODY {FONT-SIZE: 9pt} --></style></head><body><font color=red>邮件正文</font><br><font color=green>邮件正文</font><br><b>邮件正文</b></body></html>"
' 邮件主体(文本部分)
JMail.Body = "我们的邮件采用了HTML格式,但是您的邮件查看软件可能不支持。。。邮件正文,邮件正文,邮件正文"
' 发送【调用格式:objJMail.Send([username:password@]SMTPServerAddress[:Port])】
JMail.Send("smtp.163.com")
' 关闭并清除对象
JMail.Close()
Set JMail = Nothing
if err.number<>0 then
response.write "发送发送失败!"
else
response.write "邮件发送成功!"
end if
%>

2009-9-23 14:06
日文会导致access在搜索时出错,就是内存溢出,在sql下不会有这种问题,要在access下解决的话在储存和读取时用下面的函数
储存
Function jp2code(CodeStr)
jp2code=Replace(Replace(Replace(Replace(Replace(CodeStr,"ガ","j30AC"),"ギ","j30AE"),"グ","j30B0"),"ゲ","j30B2"),"ゴ","j30B4")
jp2code=Replace(Replace(Replace(Replace(Replace(jp2code,"ザ","j30B6"),"ジ","j30B8"),"ズ","j30BA"),"ゼ","j30BC"),"ゾ","j30BE")
jp2code=Replace(Replace(Replace(Replace(Replace(jp2code,"ダ","j30C0"),"ヂ","j30C2"),"ヅ","j30C5"),"デ","j30C7"),"ド","j30C9")
jp2code=Replace(Replace(Replace(Replace(Replace(jp2code,"バ","j30D0"),"ビ","j30D3"),"ブ","j30D6"),"ベ","j30D9"),"ボ","j30DC")
jp2code=Replace(Replace(Replace(Replace(Replace(jp2code,"パ","j30D1"),"ピ","j30D4"),"プ","j30D7"),"ペ","j30DA"),"ポ","j30DD")
jp2code=Replace(jp2code,"ヴ","j30F4")
End Function
读取
Function code2jp(CodeStr)
code2jp=Replace(Replace(Replace(Replace(Replace(CodeStr,"j30AC","ガ"),"j30AE","ギ"),"j30B0","グ"),"j30B2","ゲ"),"j30B4","ゴ")
code2jp=Replace(Replace(Replace(Replace(Replace(code2jp,"j30B6","ザ"),"j30B8","ジ"),"j30BA","ズ"),"j30BC","ゼ"),"j30BE","ゾ")
code2jp=Replace(Replace(Replace(Replace(Replace(code2jp,"j30C0","ダ"),"j30C2","ヂ"),"j30C5","ヅ"),"j30C7","デ"),"j30C9","ド")
code2jp=Replace(Replace(Replace(Replace(Replace(code2jp,"j30D0","バ"),"j30D3","ビ"),"j30D6","ブ"),"j30D9","ベ"),"j30DC","ボ")
code2jp=Replace(Replace(Replace(Replace(Replace(code2jp,"j30D1","パ"),"j30D4","ピ"),"j30D7","プ"),"j30DA","ペ"),"j30DD","ポ")
code2jp=Replace(code2jp,"j30F4","ヴ")
End Function
如果还不好用在下个下面的软件试试..
oBlog3.1 Access数据库日文字符转换程序
适用范围:
本程序只适用于Access数据库,解决日文字符导致搜索时内存溢出的问题
只适用于从3.0beta/3.0/3.1beta1升级到3.1的数据库
直接从3.1版本开始的网站不必执行该程序
使用SQL Server数据库的网站不必执行该程序
注意:
1:请务必备份你的数据库文件!!
2:升级完成后不必重新发布全站
3:升级完成后需要手动压缩一下数据库文件
下载地址:
http://www.oblog.cn/down/oblog31_convertjp.rar
储存
Function jp2code(CodeStr)
jp2code=Replace(Replace(Replace(Replace(Replace(CodeStr,"ガ","j30AC"),"ギ","j30AE"),"グ","j30B0"),"ゲ","j30B2"),"ゴ","j30B4")
jp2code=Replace(Replace(Replace(Replace(Replace(jp2code,"ザ","j30B6"),"ジ","j30B8"),"ズ","j30BA"),"ゼ","j30BC"),"ゾ","j30BE")
jp2code=Replace(Replace(Replace(Replace(Replace(jp2code,"ダ","j30C0"),"ヂ","j30C2"),"ヅ","j30C5"),"デ","j30C7"),"ド","j30C9")
jp2code=Replace(Replace(Replace(Replace(Replace(jp2code,"バ","j30D0"),"ビ","j30D3"),"ブ","j30D6"),"ベ","j30D9"),"ボ","j30DC")
jp2code=Replace(Replace(Replace(Replace(Replace(jp2code,"パ","j30D1"),"ピ","j30D4"),"プ","j30D7"),"ペ","j30DA"),"ポ","j30DD")
jp2code=Replace(jp2code,"ヴ","j30F4")
End Function
读取
Function code2jp(CodeStr)
code2jp=Replace(Replace(Replace(Replace(Replace(CodeStr,"j30AC","ガ"),"j30AE","ギ"),"j30B0","グ"),"j30B2","ゲ"),"j30B4","ゴ")
code2jp=Replace(Replace(Replace(Replace(Replace(code2jp,"j30B6","ザ"),"j30B8","ジ"),"j30BA","ズ"),"j30BC","ゼ"),"j30BE","ゾ")
code2jp=Replace(Replace(Replace(Replace(Replace(code2jp,"j30C0","ダ"),"j30C2","ヂ"),"j30C5","ヅ"),"j30C7","デ"),"j30C9","ド")
code2jp=Replace(Replace(Replace(Replace(Replace(code2jp,"j30D0","バ"),"j30D3","ビ"),"j30D6","ブ"),"j30D9","ベ"),"j30DC","ボ")
code2jp=Replace(Replace(Replace(Replace(Replace(code2jp,"j30D1","パ"),"j30D4","ピ"),"j30D7","プ"),"j30DA","ペ"),"j30DD","ポ")
code2jp=Replace(code2jp,"j30F4","ヴ")
End Function
如果还不好用在下个下面的软件试试..
oBlog3.1 Access数据库日文字符转换程序
适用范围:
本程序只适用于Access数据库,解决日文字符导致搜索时内存溢出的问题
只适用于从3.0beta/3.0/3.1beta1升级到3.1的数据库
直接从3.1版本开始的网站不必执行该程序
使用SQL Server数据库的网站不必执行该程序
注意:
1:请务必备份你的数据库文件!!
2:升级完成后不必重新发布全站
3:升级完成后需要手动压缩一下数据库文件
下载地址:
http://www.oblog.cn/down/oblog31_convertjp.rar
采集程序的主要步骤如下:
一、获取被采集的页面的内容
二、从获取代码中提取所有用的数据
一、获取被采集的页面的内容
我目前所掌握的ASP常用获取被采集的页面的内容方法:
1、用serverXMLHTTP组件获取数据
以下内容为程序代码:
Function GetBody(weburl)
'创建对象
Dim ObjXMLHTTP
Set ObjXMLHTTP=Server.CreateObject("MSXML2.serverXMLHTTP")
'请求文件,以异步形式
ObjXMLHTTP.Open "GET",weburl,False
ObjXMLHTTP.send
While ObjXMLHTTP.readyState <> 4
ObjXMLHTTP.waitForResponse 1000
Wend
'得到结果
GetBody=ObjXMLHTTP.responseBody
'释放对象
Set ObjXMLHTTP=Nothing
End Function
调用方法:
GetBody(文件的URLf地址)
2、或XMLHTTP组件获取数据
以下内容为程序代码:
Function GetBody(weburl)
'创建对象
Set Retrieval = CreateObject("Microsoft.XMLHTTP")
With Retrieval
.Open "Get", weburl, False, "", ""
.Send
GetBody = .ResponseBody
End With
'释放对象
Set Retrieval = Nothing
End Function
调用方法:
GetBody(文件的URLf地址)
这样获取的数据内容还需要进行编码转换才可以使用
以下内容为程序代码:
Function BytesToBstr(body,Cset)
dim objstream
set objstream = Server.CreateObject("adodb.stream")
objstream.Type = 1
objstream.Mode =3
objstream.Open
objstream.Write body
objstream.Position = 0
objstream.Type = 2
objstream.Charset = Cset
BytesToBstr = objstream.ReadText
objstream.Close
set objstream = nothing
End Function
调用方法:BytesToBstr(要转换的数据,编码)'编码常用为GB2312和UTF-8
二、从获取代码中提取所有用的数据
目前我掌握的方法有:
1、用ASP内置的MID函数截取需要的数据
以下内容为程序代码:
Function body(wstr,start,over)
start=Newstring(wstr,start)
'设置需要处理的数据的唯一的开始标记
over=Newstring(wstr,over)
'和start相对应的就是需要处理的数据的唯一的结束标记
body=mid(wstr,start,over-start)
'设置显示页面的范围
End Function
调用方法:body(被采集的页面的内容,开始标记,结束标记)
2、用正则获取需要的数据
以下内容为程序代码:
Function body(wstr,start,over)
Set xiaoqi = New Regexp'设置配置对象
xiaoqi.IgnoreCase = True'忽略大小写
xiaoqi.Global = True'设置为全文搜索
xiaoqi.Pattern = "”&start&“.+?”&over&“"'正则表达式
Set Matches =xiaoqi.Execute(wstr)'开始执行配置
set xiaoqi=nothing
body=""
For Each Match in Matches
body=body&Match.Value '循环匹配
Next
End Function
调用方法:body(被采集的页面的内容,开始标记,结束标记)
采集程序祥细思路:
1、取得网站的分页列表页的每页地址
目前绝大部分动态网站的分页地址都有规则,如:
动态页
第一页:index.asp?page=1
第二页:index.asp?page=2
第三页:index.asp?page=3
.....
静态页
第一页:page_1.htm
第二页:page_2.htm
第三页:page_3.htm
.....
取得网站的分页列表页的每页地址,只需要用变量替代每页地址的变化的字符即可如:page_<%="&page&"%>.htm
2、获取被采集网站的分页列表页内容
3、从分页列表代码中提取被采集的内容页面的URL连接地址
绝大部分分页页面里的内容页连接也有固定规则,如:
连接1
连接2
连接3
用以下代码就可以获得一个URL连接集合
以下内容为程序代码:
Set xiaoqi = New Regexp
xiaoqi.IgnoreCase = True
xiaoqi.Global = True
xiaoqi.Pattern = ””“.+?”““
Set Matches =xiaoqi.Execute(页面列表内容)
set xiaoqi=nothing
url=""
For Each Match in Matches
url=url&Match.Value
Next
4、取得被采集的内容页面内容,根据”提取标记“从被采集的内容页面分别截取要取得的数据
因为是动态生成的页面,大多数内容页面内都有相同的html标记,我们可以根据这些有规则的标记提取需要的各个部分的内容。
如:
每个页面都有网页标题,用我上面写的MID截取函数就可以获得之间的值,也可以用正则表达式来获得。
例:body("","")
一、获取被采集的页面的内容
二、从获取代码中提取所有用的数据
一、获取被采集的页面的内容
我目前所掌握的ASP常用获取被采集的页面的内容方法:
1、用serverXMLHTTP组件获取数据
以下内容为程序代码:
Function GetBody(weburl)
'创建对象
Dim ObjXMLHTTP
Set ObjXMLHTTP=Server.CreateObject("MSXML2.serverXMLHTTP")
'请求文件,以异步形式
ObjXMLHTTP.Open "GET",weburl,False
ObjXMLHTTP.send
While ObjXMLHTTP.readyState <> 4
ObjXMLHTTP.waitForResponse 1000
Wend
'得到结果
GetBody=ObjXMLHTTP.responseBody
'释放对象
Set ObjXMLHTTP=Nothing
End Function
调用方法:
GetBody(文件的URLf地址)
2、或XMLHTTP组件获取数据
以下内容为程序代码:
Function GetBody(weburl)
'创建对象
Set Retrieval = CreateObject("Microsoft.XMLHTTP")
With Retrieval
.Open "Get", weburl, False, "", ""
.Send
GetBody = .ResponseBody
End With
'释放对象
Set Retrieval = Nothing
End Function
调用方法:
GetBody(文件的URLf地址)
这样获取的数据内容还需要进行编码转换才可以使用
以下内容为程序代码:
Function BytesToBstr(body,Cset)
dim objstream
set objstream = Server.CreateObject("adodb.stream")
objstream.Type = 1
objstream.Mode =3
objstream.Open
objstream.Write body
objstream.Position = 0
objstream.Type = 2
objstream.Charset = Cset
BytesToBstr = objstream.ReadText
objstream.Close
set objstream = nothing
End Function
调用方法:BytesToBstr(要转换的数据,编码)'编码常用为GB2312和UTF-8
二、从获取代码中提取所有用的数据
目前我掌握的方法有:
1、用ASP内置的MID函数截取需要的数据
以下内容为程序代码:
Function body(wstr,start,over)
start=Newstring(wstr,start)
'设置需要处理的数据的唯一的开始标记
over=Newstring(wstr,over)
'和start相对应的就是需要处理的数据的唯一的结束标记
body=mid(wstr,start,over-start)
'设置显示页面的范围
End Function
调用方法:body(被采集的页面的内容,开始标记,结束标记)
2、用正则获取需要的数据
以下内容为程序代码:
Function body(wstr,start,over)
Set xiaoqi = New Regexp'设置配置对象
xiaoqi.IgnoreCase = True'忽略大小写
xiaoqi.Global = True'设置为全文搜索
xiaoqi.Pattern = "”&start&“.+?”&over&“"'正则表达式
Set Matches =xiaoqi.Execute(wstr)'开始执行配置
set xiaoqi=nothing
body=""
For Each Match in Matches
body=body&Match.Value '循环匹配
Next
End Function
调用方法:body(被采集的页面的内容,开始标记,结束标记)
采集程序祥细思路:
1、取得网站的分页列表页的每页地址
目前绝大部分动态网站的分页地址都有规则,如:
动态页
第一页:index.asp?page=1
第二页:index.asp?page=2
第三页:index.asp?page=3
.....
静态页
第一页:page_1.htm
第二页:page_2.htm
第三页:page_3.htm
.....
取得网站的分页列表页的每页地址,只需要用变量替代每页地址的变化的字符即可如:page_<%="&page&"%>.htm
2、获取被采集网站的分页列表页内容
3、从分页列表代码中提取被采集的内容页面的URL连接地址
绝大部分分页页面里的内容页连接也有固定规则,如:
连接1
连接2
连接3
用以下代码就可以获得一个URL连接集合
以下内容为程序代码:
Set xiaoqi = New Regexp
xiaoqi.IgnoreCase = True
xiaoqi.Global = True
xiaoqi.Pattern = ””“.+?”““
Set Matches =xiaoqi.Execute(页面列表内容)
set xiaoqi=nothing
url=""
For Each Match in Matches
url=url&Match.Value
Next
4、取得被采集的内容页面内容,根据”提取标记“从被采集的内容页面分别截取要取得的数据
因为是动态生成的页面,大多数内容页面内都有相同的html标记,我们可以根据这些有规则的标记提取需要的各个部分的内容。
如:
每个页面都有网页标题,用我上面写的MID截取函数就可以获得之间的值,也可以用正则表达式来获得。
例:body("","")




