不知道為什么現在各大搜索引擎編碼居然不一樣.當然不是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)后再進行GB2312 to UTF-8的轉換.
下面主要實現代碼.
Public Function GetSearchKeyword(RefererUrl) 搜索關鍵詞
if RefererUrl="" or len(RefererUrl)<1 then exit function
on error resume next
Dim re
Set re = New RegExp
re.IgnoreCase = True
re.Global = True
Dim a,b,j
模糊查找關鍵詞,此方法速度較快,范圍也較大
re.Pattern = "(word=([^&]*)|q=([^&]*)|p=([^&]*)|query=([^&]*)|name=([^&]*)|_searchkey=([^&]*)|baidu.*?w=([^&]*))"
Set a = re.Execute(RefererUrl)
If a.Count>0 then
Set b = a(a.Count-1).SubMatches
For j=1 to b.Count
If Len(b(j))>0 then
if instr(1,RefererUrl,"google",1) then
GetSearchKeyword=Trim(U8Decode(b(j)))
elseif instr(1,refererurl,"yahoo",1) then
GetSearchKeyword=Trim(U8Decode(b(j)))
elseif instr(1,refererurl,"yisou",1) then
GetSearchKeyword=Trim(getkey(b(j)))
elseif instr(1,refererurl,"3721",1) then
GetSearchKeyword=Trim(getkey(b(j)))
else
GetSearchKeyword=Trim(getkey(b(j)))
end if
Exit Function