もちろん、なぜ主要な検索エンジンのエンコーディングが実際に異なっているのかはわかりません。もちろん、それは gb2312 か utf-8 です。エンコーディングの問題は頭痛の種です...
通常、訪問者を通じてキーワードを取得します
。たとえば、
http://www.google.com/search ?hl=zh-CN&q=%E5%AD%A4%E7%8B%AC&lr =
これが urlencode によってエンコードされていることを知っておく必要があります。
情報の取得は 2 つのステップで実行する必要があります。最初のステップは、通常のパラメーターが有効な場合、これは ASP 自体によって実行されますが、
インターネット上には
手動でデコードする必要があります。ですが、これらはすべて gb2312 ページの gb2312.utf-8 をデコードするためのもので、最初にそれを簡単にデコードし、検索エンジンに従ってエンコードを判断し、それが utf-8 である場合は gb2312 に変換します。
しかし、
私のウェブサイトはutf-8ページなので、私が見つけたのはutf-8文字のurldecodeエンコーディングだけでした。最悪の方法は、xmlhttp を使用して分割されたキーワードを送信し、文字化けしたコード (gb2312) の後に gb2312 を utf-8 に変換することです。
以下は、
Public Function GetSearchKeyword(RefererUrl) の検索です。キーワード
RefererUrl="" または len(RefererUrl)<1 の場合、関数を終了します
エラー時は次から再開
ディムリ
re = 新しい正規表現を設定します
re.IgnoreCase = True
re.Global = True
ディム a、b、j
'あいまいな検索キーワード、この方法の方が高速で範囲が広い
re.Pattern = "(word=([^&]*)|q=([^&]*)|p=([^&]*)|query=([^&]*)|name=([ ^&]*)|_searchkey=([^&]*)|baidu.*?w=([^&]*))"
a = re.Execute(RefererUrl) を設定します
a.Count>0 の場合
b = a(a.Count-1).SubMatches を設定します。
j=1 から b.Count の場合
Len(b(j))>0 の場合
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)))
それ以外
GetSearchKeyword=Trim(getkey(b(j)))
終了する場合
終了関数
終了する場合
次
終了の場合
エラーの場合は
エラークリア
GetSearchKeyword = RefererUrl
それ以外
GetSearchKeyword = ""
終了する場合
終了機能
関数 URLEncoding(vstrIn)
dim strReturn,i,thischr
strReturn = ""
For i = 1 To Len(vstrIn)
ThisChr = Mid(vStrIn,i,1)
If Abs(Asc(ThisChr)) < &HFF then
strReturn = strReturn & ThisChr
それ以外
innerCode = Asc(ThisChr)
innerCode < 0 の場合
innerCode = innerCode + &H10000
終了の場合
Hight8 = (innerCode と &HFF00) &HFF
Low8 = innerCode および &HFF
strReturn = strReturn & "%" & Hex(Hight8) & "%" & Hex(Low8)
終了の場合
次
URLEncoding = strReturn
終了機能
関数 getkey(キー)
ディモリクエスト
set oReq = CreateObject("MSXML2.XMLHTTP")
oReq.open "POST"," http://"&WebUrl&"/system/ShowGb2312XML.asp?a="&key,false
oリクエスト送信
getkey=UTF2GB(oReq.responseText)
終了関数
関数 chinese2unicode(Str)
ディミ
ディム Str_one
dimStr_unicode
i=1 から len(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)
次
Response.Write Str_unicode
終了関数
関数 UTF2GB(UTFStr)
ディムディグ、GBSTR
Dig=1 から len(UTFStr) の場合
Mid(UTFStr,Dig,1)="%" の場合
len(UTFStr) >= Dig+8 の場合
GBStr=GBStr & Conv Chinese(mid(UTFStr,Dig,9))
掘る=掘る+8
それ以外
GBStr=GBStr & Mid(UTFStr,Dig,1)
終了する場合
それ以外
GBStr=GBStr & Mid(UTFStr,Dig,1)
終了する場合
次
UTF2GB=GBStr
終了関数
関数Conv Chinese(x)
ディム a、i、j、DigS、Unicode
A=split(mid(x,2),"%")
i=0
j=0
i=0 から ubound(A) まで
A(i)=c16to2(A(i))
次
i=0 から ubound(A)-1 の場合
DigS=instr(A(i),"0")
ユニコード=""
j=1 から DigS-1 まで
j=1 の場合
A(i)=right(A(i),len(A(i))-DigS)
Unicode=Unicode & A(i)
それ以外
i=i+1
A(i)=右(A(i),len(A(i))-2)
Unicode=Unicode & A(i)
終了する場合
次
len(c2to16(Unicode))=4 の場合
Conv中国語=Conv中国語 & chrw(int("&H" & c2to16(Unicode)))
それ以外
Conv中国語=Conv中国語 & chr(int("&H" & c2to16(Unicode)))
終了する場合
次
終了関数
function U8Decode(enStr)
'%で区切られた文字列の束を入力し、配列に分割してutf8の規則に従って補完規則を判定する
'入力: オフ E5 85 B3 キー E9 94 AE ワード E5 AD 97
'出力: オフ B9D8 キー BCFC ワード D7D6
dim c,i,i2,v,deStr,WeiS
(i=1 から len(enStr) まで)
c=Mid(enStr,i,1)
c="%" の場合
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
i2=2 から WeiS-1 へ
c=c16to2(Mid(enStr,i+1,2))
c=right(c,len(c)-2)'残りから左端の 2 つを削除します
v=v&c
i=i+3
次
len(c2to16(v)) =4 の場合
deStr=deStr & chrw(c2to10(v))
それ以外
deStr=deStr & chr(c2to10(v))
終了する場合
i=i-1
それ以外
c="+" の場合
deStr=deStr&" "
それ以外
deStr=deStr&c
終了する場合
終了する場合
次
U8Decode = deStr
終了関数
function c16to2(x)
'この関数は 16 進数を 2 進数に変換するために使用されます。通常、UTF-8 を変換する場合は、A9 などの 2 つの長さにすることができます。
例: 「C2」と入力すると、「11000010」に変換されます。1100 は「c」で、10 進数の 12 (1100) です。( 0010)。
ディムテンプストラ
0'i=1 から len(trim(x)) への
一時ポインタ
tempstr= c10to2(cint(int("&h" & mid(x,i,1))))
len(tempstr)<4 の間実行します
tempstr="0" & tempstr'4桁に満たない場合は4桁を記入してください
ループ
c16to2=c16to2 & tempstr
次
関数 c2to16(x)
の終了
「2 進数から 16 進数への変換。4 つの 0 または 1 が 16 進数の文字に変換されます。もちろん、入力長を 4
dim i:i=1 の倍数にすることはできません」一時ポインター
i=1 から len(x) へのステップ 4
c2to16=c2to16 & hex(c2to10(mid(x,i,4)))
次
終了関数
function c2to10(x)
単純な 2 進数から 10 進数への変換では、16 進数への変換に必要な先頭 4 つのゼロ埋め込みは考慮されません。
「この機能はとても便利だから!」今後も使われるようになるので、通信やハードウェアをやっている人なら知っているはずです。
'ここではバイナリを表すために文字列が使用されています
c2to10=0
if x="0" then exit function' 0 の場合は、0 を取得して終了します。
dim i:i=0'一時ポインタ
for i= 0 to len(x) -1' それ以外の場合は、8421 コードを使用して計算します。これは、私たちがコンピューターを学び始めたときからわかっていました。私たちにたくさんのことを教えてくれた Xie Daojian 先生が懐かしいです。
Mid(x,len(x)-i,1)="1" の場合、c2to10=c2to10+2^(i)
次
終了関数
function c10to2(x)
'10進数から2進数への変換
薄暗い標識、結果
結果 = ""
'シンボル
符号 = sgn(x)
x = 絶対値(x)
x = 0 の場合
c10to2 = 0
終了関数
終了する場合
x = "0" になるまで行う
結果 = 結果 & (x mod 2)
x = x2
ループ
結果 = strReverse(結果)
符号 = -1 の場合
c10to2 = "-" & 結果
それ以外
c10to2 = 結果
終了する場合
関数関数の終了
URLDecode(enStr)
dim deStr,strSpecial
薄暗い c、i、v
deStr=""
strSpecial="!""#$%&'()*+,/:;<=>?@[]^`{ |}~%"
i=1 から len(enStr) まで
c=Mid(enStr,i,1)
c="%" の場合
v=eval("&h"+Mid(enStr,i+1,2))
if inStr(strSpecial,chr(v))>0 then
deStr=deStr&chr(v)
i=i+2
それ以外
v=eval("&h"+Mid(enStr,i+1,2)+Mid(enStr,i+4,2))
deStr=deStr&chr(v)
i=i+5
終了する場合
それ以外
c="+" の場合
deStr=deStr&" "
それ以外
deStr=deStr&c
終了する場合
終了する場合
次
URLDecode=deStr
関数の終了
多くのコードがオンラインにあります。
PS: 家庭の事情により、今は夏休みを受け入れなければなりません。高校受験は地元に集中しています。
都市の名前は言いたくないのです
が、そうでない場合は、私がここにいない限り、山東省の学校に連絡してもらえますか?
QQ: 32113739
プログラミングはできるけど、情報オリンピックで一流のXの名前しか得られないのは、才能が評価されるべきではないのと同じように、テクノロジーがいわゆるコンテストに反映されるべきではないと思うからです。電子工作で各州で1位を獲得しました...でも、私の勉強は平均的です...だから、それが一般的な焦点である限り...私はただ家に近づきたくないのです。
今では ASP がとても上手になってきましたが、コーディングの問題など多少の知識不足はありますが(汗...)、ネットワークがとても大きいので、いわゆる教科書的な知識だけでは得られないと思います。高価な場合は、ASP.NET の本を読んでください。学校の Web サイトは間違いなく役に立ちます。
私は美的障害があると呼ばれていますが、血を吐くことなく自分のプログラムの構造を確認したいと思っています。
忘れてください...その他の投稿
私が開発した D Database +asp ->xml+xslt->xhtml +css は、CSDN
で使用されている FCK エディターも使用しています
今日来たときに変更されたことがわかりました。しかし、FCK ファイルシステムはすべて変更させてください。
このシステムは間違いなく夏休みが終わるまでにリリースされるでしょう。しかし、多くの友人は使いやすさに問題があると言っています。 .. 多くの人は xslt の方法を知りません。ため息をつきます...
学校が見つからなかったら、私はさまよってしまうかも知れません、もちろん、これは脅威ではありません...私はただ自分の街が嫌いです。そこで見るものや行うことすべてが嫌いです。