莫相离 发表于 2015-1-16 22:36:05

ASP教程之asp完成关头词猎取(各搜刮引擎,gb2312及...

专业性的服务。有的ASP商提供垂直型的应用服务,针对某一特定行业提供应用服务。不晓得为何如今各年夜搜刮引擎编码竟然纷歧样.固然不是gb2312就是utf-8了.编码成绩是对照头疼的成绩...头疼的不要命...
我们取得关头词,通常为经由过程来访页面的url举行剖析的.好比
http://www.google.com/search?hl=zh-CN&q=%E5%AD%A4%E7%8B%AC&lr=
列位一定晓得这个是经由过程urlencode编码的.
我们失掉个中的信息,必要举行2步.第一步是举行urldecode,在我们一般参数活得的时分,这个是由asp本人来举行的,可是如今我们不能不举行手工解码.
网上函数良多,但都是针关于gb2312页面解gb2312.utf-8的.关于这个,我们能够很轻松的先辈行解码,然后依据搜刮引擎判别它的编码,假如是utf-8就再转换为gb2312.
可是因为我的网站是utf-8页面的.而utf-8页面我找到的只要解utf-8字符的urldecode编码的.在这里停留了好久,最初我只能用最糟的办法,把拆分出来的关头词用xmlhttp提交到一个gb2312的asp页面,然后活得乱码(gb2312)后再举行gb2312toutf-8的转换.
上面次要完成代码.
PublicFunctionGetSearchKeyword(RefererUrl)搜刮关头词
ifRefererUrl=""orlen(RefererUrl)<1thenexitfunction

onerrorresumenext

Dimre
Setre=NewRegExp
re.IgnoreCase=True
re.Global=True
Dima,b,j
含混查找关头词,此办法速率较快,局限也较年夜
re.Pattern="(word=([^&]*)|q=([^&]*)|p=([^&]*)|query=([^&]*)|name=([^&]*)|_searchkey=([^&]*)|baidu.*?w=([^&]*))"
Seta=re.Execute(RefererUrl)
Ifa.Count>0then
Setb=a(a.Count-1).SubMatches
Forj=1tob.Count
IfLen(b(j))>0then
ifinstr(1,RefererUrl,"google",1)then
GetSearchKeyword=Trim(U8Decode(b(j)))
elseifinstr(1,refererurl,"yahoo",1)then
GetSearchKeyword=Trim(U8Decode(b(j)))
elseifinstr(1,refererurl,"yisou",1)then
GetSearchKeyword=Trim(getkey(b(j)))
elseifinstr(1,refererurl,"3721",1)then
GetSearchKeyword=Trim(getkey(b(j)))
else
GetSearchKeyword=Trim(getkey(b(j)))
endif
ExitFunction
endif
Next
EndIf
iferrthen
err.clear
GetSearchKeyword=RefererUrl
else
GetSearchKeyword=""
endif
EndFunction

FunctionURLEncoding(vstrIn)
dimstrReturn,i,thischr
strReturn=""
Fori=1ToLen(vstrIn)
ThisChr=Mid(vStrIn,i,1)
IfAbs(Asc(ThisChr))<&HFFThen
strReturn=strReturn&ThisChr
Else
innerCode=Asc(ThisChr)
IfinnerCode<0Then
innerCode=innerCode+&H10000
EndIf
Hight8=(innerCodeAnd&HFF00)&HFF
Low8=innerCodeAnd&HFF
strReturn=strReturn&"%"&Hex(Hight8)&"%"&Hex(Low8)
EndIf
Next
URLEncoding=strReturn
EndFunction
functiongetkey(key)
dimoReq
setoReq=CreateObject("MSXML2.XMLHTTP")
oReq.open"POST","http://"&WebUrl&"/system/ShowGb2312XML.asp?a="&key,false
oReq.send
getkey=UTF2GB(oReq.responseText)
endfunction
functionchinese2unicode(Str)
dimi
dimStr_one
dimStr_unicode
fori=1tolen(Str)
Str_one=Mid(Str,i,1)
Str_unicode=Str_unicode&chr(38)
Str_unicode=Str_unicode&chr(35)
Str_unicode=Str_unicode&chr(120)
Str_unicode=Str_unicode&Hex(ascw(Str_one))
Str_unicode=Str_unicode&chr(59)
next
Response.WriteStr_unicode
endfunction

functionUTF2GB(UTFStr)
Dimdig,GBSTR
forDig=1tolen(UTFStr)
ifmid(UTFStr,Dig,1)="%"then
iflen(UTFStr)>=Dig+8then
GBStr=GBStr&ConvChinese(mid(UTFStr,Dig,9))
Dig=Dig+8
else
GBStr=GBStr&mid(UTFStr,Dig,1)
endif
else
GBStr=GBStr&mid(UTFStr,Dig,1)
endif
next
UTF2GB=GBStr
endfunction

functionConvChinese(x)
dima,i,j,DigS,Unicode
A=split(mid(x,2),"%")
i=0
j=0

fori=0toubound(A)
A(i)=c16to2(A(i))
next

fori=0toubound(A)-1
DigS=instr(A(i),"0")
Unicode=""
forj=1toDigS-1
ifj=1then
A(i)=right(A(i),len(A(i))-DigS)
Unicode=Unicode&A(i)
else
i=i+1
A(i)=right(A(i),len(A(i))-2)
Unicode=Unicode&A(i)
endif
next

iflen(c2to16(Unicode))=4then
ConvChinese=ConvChinese&chrw(int("&H"&c2to16(Unicode)))
else
ConvChinese=ConvChinese&chr(int("&H"&c2to16(Unicode)))
endif
next
endfunction
functionU8Decode(enStr)
输出一堆有%分开的字符串,先分红数组,依据utf8划定规矩来判别补齐划定规矩
输出:关E585B3键E994AE字E5AD97
输入:关B9D8键BCFC字D7D6
dimc,i,i2,v,deStr,WeiS
fori=1tolen(enStr)
c=Mid(enStr,i,1)
ifc="%"then
v=c16to2(Mid(enStr,i+1,2))
判别第一次呈现0的地位,
多是1(单字节),3(3-1字节),4,5,6,7不成能是2和年夜于7
实际上到7,实践不会凌驾3。
WeiS=instr(v,"0")
v=right(v,len(v)-WeiS)第一个往失落最右边的WeiS个
i=i+3
fori2=2toWeiS-1
c=c16to2(Mid(enStr,i+1,2))
c=right(c,len(c)-2)其他往失落最右边的两个
v=v&c
i=i+3
next
iflen(c2to16(v))=4then
deStr=deStr&chrw(c2to10(v))
else
deStr=deStr&chr(c2to10(v))
endif
i=i-1
else
ifc="+"then
deStr=deStr&""
else
deStr=deStr&c
endif
endif
next
U8Decode=deStr
endfunction
functionc16to2(x)
这个函数是用来转换16进制到2进制的,能够是任何长度的,一样平常转换UTF-8的时分是两个长度,好比A9
好比:输出“C2”,转化成“11000010”,个中1100是"c"是10进制的12(1100),那末2(10)不敷4位要补齐成(0010)。
dimtempstr
dimi:i=0一时的指针
fori=1tolen(trim(x))
tempstr=c10to2(cint(int("&h"&mid(x,i,1))))
dowhilelen(tempstr)<4
tempstr="0"&tempstr假如不敷4位那末补齐4位数
loop
c16to2=c16to2&tempstr
next
endfunction
functionc2to16(x)
2进制到16进制的转换,每4个0或1转换成一个16进制字母,输出长度固然不成能不是4的倍数了
dimi:i=1一时的指针
fori=1tolen(x)step4
c2to16=c2to16&hex(c2to10(mid(x,i,4)))
next
endfunction
functionc2to10(x)
纯真的2进制到10进制的转换,不思索转16进制所必要的4位前零补齐。
由于这个函数很有效!今后也会用到,做过通信和硬件的人应当晓得。
这里用字符串代表二进制
c2to10=0
ifx="0"thenexitfunction假如是0的话间接得0就完事
dimi:i=0一时的指针
fori=0tolen(x)-1不然使用8421码盘算,这个从我最入手下手学盘算机的时分就会,好吊唁现在教我们的谢道建老师长教师啊!
ifmid(x,len(x)-i,1)="1"thenc2to10=c2to10+2^(i)
next
endfunction
functionc10to2(x)
10进制到2进制的转换
dimsign,result
result=""
标记
sign=sgn(x)
x=abs(x)
ifx=0then
c10to2=0
exitfunction
endif
dountilx="0"
result=result&(xmod2)
x=x2
loop
result=strReverse(result)
ifsign=-1then
c10to2="-"&result
else
c10to2=result
endif
endfunction
functionURLDecode(enStr)
dimdeStr,strSpecial
dimc,i,v
deStr=""
strSpecial="!""#$%&()*+,/:;<=>?@[]^`{|}~%"
fori=1tolen(enStr)
c=Mid(enStr,i,1)
ifc="%"then
v=eval("&h"+Mid(enStr,i+1,2))
ifinStr(strSpecial,chr(v))>0then
deStr=deStr&chr(v)
i=i+2
else
v=eval("&h"+Mid(enStr,i+1,2)+Mid(enStr,i+4,2))
deStr=deStr&chr(v)
i=i+5
endif
else
ifc="+"then
deStr=deStr&""
else
deStr=deStr&c
endif
endif
next
URLDecode=deStr
endfunction
很多代码都是网上的.找不到作者.
PS:如今寒假就要承受,因为家庭缘故原由我不想留在我的乡村.中考抵达当地重点.不想说乡村名字.不然会招来熟人.只需不在山东的黉舍算是重点的能不克不及接洽下.
QQ:32113739
对程序有极年夜乐趣,但信息奥赛只活得一等的X名.由于我以为手艺不该该在所谓比赛中表现,就如才干不该该在那些偶然义的测验中表现一样.电子作品也弄了各省一等..不外也一样平常.进修一样平常...以是只需是一样平常重点就行了..只是不想在离家太近的中央.
如今asp非常纯熟,固然有些常识缺点,好比编码成绩(汗...),可是收集云云年夜,我想我不是只要在教材中才干失掉所谓的常识.并且如今正在啃asp.net的书,假如贵校做网站完整能够协助.
对新手艺非常狂热,固然被他们称为审美有停滞的人.但我想看到布局偶的程序还不至于吐血.
算了..再贴点.
偶开辟DDatabase+asp->xml+xslt->xhtml+css的算是叫CMS的器材
http://www.joysou.com
也用了CSDN用的FCK编纂器,明天下去才发明换了.不外谁人FCK的FIle体系让偶一切改失落.
这个体系在寒假停止前必定会公布.不外良多伴侣说易用性有成绩...良多人不会xslt.汗...
唉...假如找不到黉舍.我大概会流浪,大概会消散吧.固然这不是威逼..只是恨我的乡村,恨那边看到的,干过的统统.
在实现ERP等高端的ASP应用时,用户需要提供核心的经营资料,需要ASP商有很高的信用度。楼上说交互性不好,太牵强了吧。在微软提供的一套框架中,利用asp做网站,开发效率高,使用人数少,减少不必要的开销。交互性是互动方式,是有开发人员决定的。

第二个灵魂 发表于 2015-1-18 20:55:13

他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。

飘飘悠悠 发表于 2015-1-23 13:49:30

我想问如何掌握学习节奏(先学什么再学什么)最好详细点?

精灵巫婆 发表于 2015-1-31 17:11:23

尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。

海妖 发表于 2015-2-6 20:40:37

下面简单介绍一下我学习ASP的方法,希望对想学习ASP的朋友有所帮助...

莫相离 发表于 2015-2-18 16:12:44

交流是必要的,不管是生活还是学习我们都要试着去交流,通过交流我们可以学到很多我们自己本身所没有的知识,可以分享别人的经验甚至经历。

admin 发表于 2015-3-6 08:45:53

它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。

小女巫 发表于 2015-3-12 22:52:02

学习是为了用的,是为了让你的程序产生价值,把握住这个原则会比较轻松点。除此之外,课外时间一定要多参加一些社会实践活动,来锻炼自己的能力。

飘灵儿 发表于 2015-3-20 04:47:08

Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名")
页: [1]
查看完整版本: ASP教程之asp完成关头词猎取(各搜刮引擎,gb2312及...