|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
专业性的服务。有的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做网站,开发效率高,使用人数少,减少不必要的开销。交互性是互动方式,是有开发人员决定的。 |
|