ฉันไม่รู้ว่าทำไมการเข้ารหัสของเครื่องมือค้นหาหลักๆ ถึงแตกต่างออกไปจริงๆ ในตอนนี้ แน่นอนว่ามันเป็น gb2312 หรือ utf-8 ปัญหาการเข้ารหัสเป็นเรื่องที่น่าปวดหัว... มันน่าปวดหัว...
เราได้รับคำหลักซึ่งมักจะมาจากการเข้าชม มีการวิเคราะห์ URL ตัวอย่างเช่น
http://www.google.com/search?hl=zh-CN&q=%E5%AD%A4%E7%8B%AC&lr =
คุณต้องรู้ว่าสิ่งนี้ถูกเข้ารหัสโดย urlencode
เราได้รับข้อมูลที่ต้องดำเนินการใน 2 ขั้นตอน ขั้นตอนแรกคือการทำการถอดรหัส url เมื่อพารามิเตอร์ปกติของเราถูกต้อง สิ่งนี้จะดำเนินการโดย asp เอง แต่ตอนนี้เราต้องทำการถอดรหัสด้วยตนเอง
มีฟังก์ชั่นมากมายบนอินเทอร์เน็ต แต่ทั้งหมดมีไว้สำหรับ Decode gb2312.utf-8 ในหน้า gb2312 เพื่อสิ่งนี้ เราสามารถถอดรหัสมันได้อย่างง่ายดายก่อน จากนั้นจึงตัดสินการเข้ารหัสตามเครื่องมือค้นหา หากเป็น utf-8 ให้แปลงเป็น gb2312 .
แต่เนื่องจากเว็บไซต์ของฉันเป็นหน้า utf-8 สิ่งเดียวที่ฉันพบคือการเข้ารหัส urldecode ของอักขระ utf-8 ฉันหยุดที่นี่เป็นเวลานาน วิธีที่แย่ที่สุด โดยส่งคีย์เวิร์ดที่แยกกันโดยใช้ xmlhttp ไปที่หน้า gb2312 asp แล้วแปลง gb2312 เป็น utf-8 หลังจากโค้ดที่อ่านไม่ออก (gb2312)
ต่อไปนี้เป็นโค้ดการใช้งาน
หลัก GetSearchKeyword(RefererUrl) คำหลัก
ถ้า RefererUrl="" หรือ len(RefererUrl)<1 ให้ออกจากฟังก์ชัน
เมื่อเกิดข้อผิดพลาดดำเนินการต่อต่อไป
ติ่มซำอีกครั้ง
ตั้งใหม่ = RegExp ใหม่
re.IgnoreCase = จริง
re.Global = จริง
ดิม เอ บี เจ
'คำค้นหาคลุมเครือ วิธีนี้เร็วกว่าและมีช่วงกว้างกว่า
re.Pattern = "(word=([^&]*)|q=([^&]*)|p=([^&]*)|query=([^&]*)|name=([ ^&]*)|_searchkey=([^&]*)|baidu.*?w=([^&]*))"
ตั้งค่า = re.Execute (RefererUrl)
ถ้า a.Count>0 แล้ว
ตั้งค่า b = a(a.Count-1).SubMatches
สำหรับ j=1 ถึง b.Count
ถ้า Len(b(j))>0 แล้ว
ถ้า instr(1,RefererUrl,"google",1) แล้ว
GetSearchKeyword=ตัดแต่ง(U8Decode(b(j)))
elseif instr(1,refererurl,"yahoo",1) แล้ว
GetSearchKeyword=ตัดแต่ง(U8Decode(b(j)))
elseif instr(1,refererurl,"yisou",1) แล้ว
GetSearchKeyword=ตัดแต่ง(getkey(b(j)))
elseif instr(1,refererurl,"3721",1) แล้ว
GetSearchKeyword=ตัดแต่ง(getkey(b(j)))
อื่น
GetSearchKeyword=ตัดแต่ง(getkey(b(j)))
สิ้นสุดถ้า
ออกจากฟังก์ชัน
สิ้นสุดถ้า
ต่อไป
สิ้นสุดถ้า
ถ้าทำผิด
ผิดพลาดชัดเจน
GetSearchKeyword = URL ผู้อ้างอิง
อื่น
GetSearchKeyword = ""
สิ้นสุดถ้า
ฟังก์ชันสิ้นสุด
ฟังก์ชั่นการเข้ารหัส URL (vstrIn)
dim strReturn, i, thischr
strReturn = ""
สำหรับ i = 1 ถึง Len (vstrIn)
ThisChr = กลาง(vStrIn,i,1)
ถ้า Abs(Asc(ThisChr)) < &HFF จากนั้น
strReturn = strReturn & ThisChr
อื่น
innerCode = Asc(ThisChr)
ถ้า innerCode < 0 แล้ว
InnerCode = InnerCode + &H10000
สิ้นสุดถ้า
Hight8 = (โค้ดภายในและ &HFF00) &HFF
Low8 = รหัสภายใน และ &HFF
strReturn = strReturn & "%" & Hex (สูง 8) & "%" & Hex (ต่ำ 8)
สิ้นสุดถ้า
ต่อไป
URLEncoding = strReturn
ฟังก์ชันสิ้นสุด
ฟังก์ชั่น getkey (คีย์)
dimoReq
ตั้งค่า oReq = CreateObject("MSXML2.XMLHTTP")
oReq.open "POST", " http://"&WebUrl&"/system/ShowGb2312XML.asp?a="&key,false
oReq.ส่ง
getkey=UTF2GB(oReq.responseText)
ฟังก์ชั่นสิ้นสุด
ฟังก์ชั่น chinese2unicode (Str)
ดิมิ
Str_one สลัว
dimStr_unicode
สำหรับ i=1 ถึง len(Str)
Str_one=กลาง(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& เลขฐานสิบหก(ascw(Str_one))
Str_unicode=Str_unicode&chr(59)
ต่อไป
การตอบสนองเขียน Str_unicode
ฟังก์ชั่นสิ้นสุด
ฟังก์ชั่น UTF2GB(UTFStr)
ขุดลึก GBSTR
สำหรับ Dig=1 ถึง len(UTFStr)
ถ้า mid(UTFStr,Dig,1)="%" แล้ว
ถ้า len(UTFStr) >= Dig+8 แล้ว
GBStr=GBStr & ConvChinese(กลาง(UTFStr,ขุด,9))
ขุด=ขุด+8
อื่น
GBStr=GBStr & กลาง(UTFStr,ขุด,1)
สิ้นสุดถ้า
อื่น
GBStr=GBStr & กลาง(UTFStr,ขุด,1)
สิ้นสุดถ้า
ต่อไป
UTF2GB=GBStr
ฟังก์ชั่นสิ้นสุด
ฟังก์ชั่น Conv Chinese(x)
สลัว a, i, j, DigS, Unicode
A=แยก(กลาง(x,2),"%")
ผม=0
เจ=0
สำหรับ i=0 ถึง ubound(A)
ก(i)=c16to2(ก(i))
ต่อไป
สำหรับ i=0 ถึง ubound(A)-1
DigS=instr(A(i),"0")
ยูนิโค้ด = ""
สำหรับ j=1 ถึง DigS-1
ถ้า j=1 แล้ว
A(i)=ขวา(A(i),เลน(A(i))-DigS)
Unicode=ยูนิโค้ด & A(i)
อื่น
ฉัน=ฉัน+1
A(i)=ขวา(A(i),เลน(A(i))-2)
Unicode=ยูนิโค้ด & A(i)
สิ้นสุดถ้า
ต่อไป
ถ้า len(c2to16(Unicode))=4 แล้ว
ConvChinese=ConvChinese & chrw(int("&H" & c2to16(Unicode)))
อื่น
ConvChinese=ConvChinese & chr(int("&H" & c2to16(Unicode)))
สิ้นสุดถ้า
ต่อไป
ฟังก์ชันสิ้นสุด
ฟังก์ชัน U8Decode(enStr)
'ป้อนสตริงจำนวนมากโดยคั่นด้วย % ขั้นแรกให้แบ่งเป็นอาร์เรย์ และตัดสินกฎการเสร็จสิ้นตามกฎ utf8
'อินพุต: ปิด E5 85 ปุ่ม B3 E9 94 คำ AE E5 AD 97
'เอาท์พุต: ปิด ปุ่ม B9D8 คำว่า BCFC D7D6
หรี่ c, i, i2,v, deStr, WeiS
สำหรับ i=1 ถึง len(enStr)
c=กลาง(enStr,i,1)
ถ้า c="%" แล้ว
v=c16to2(กลาง(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 ซ้ายสุดออก
ผม=ผม+3
สำหรับ i2=2 ถึง WeiS-1
c=c16to2(กลาง(enStr,i+1,2))
c=right(c,len(c)-2)'ลบสองตัวซ้ายสุดออกจากที่เหลือ
วี=วี & ค
ผม=ผม+3
ต่อไป
ถ้า len(c2to16(v)) =4 แล้ว
deStr=deStr & chrw(c2to10(v))
อื่น
deStr=deStr & chr(c2to10(v))
สิ้นสุดถ้า
ฉัน=ฉัน-1
อื่น
ถ้า c="+" แล้ว
deStr=deStr&" "
อื่น
deStr=deStr&c
สิ้นสุดถ้า
สิ้นสุดถ้า
ต่อไป
U8Decode = deStr
ฟังก์ชันสิ้นสุด
ฟังก์ชัน c16to2(x)
'ฟังก์ชันนี้ใช้ในการแปลงเลขฐานสิบหกเป็นไบนารี่ โดยทั่วไปเมื่อแปลง UTF-8 จะมีความยาวสองแบบ เช่น A9
'ตัวอย่าง: ใส่ "C2" ก็จะถูกแปลงเป็น "11000010" โดยที่ 1100 คือ "c" ซึ่งเป็น 12 (1100) ในรูปแบบทศนิยม จากนั้น 2 (10) จะต้องเติมด้วยตัวเลข 4 หลักที่น้อยกว่า 4 จึงจะกลายเป็น ( 0010)
ลดอุณหภูมิ
dim i:i=0'ตัวชี้ชั่วคราว
สำหรับ i=1 ถึง len(trim(x))
tempstr= c10to2(cint(int("&h" & กลาง(x,i,1))))
ทำในขณะที่ len(tempstr)<4
tempstr="0" & tempstr'หากมีตัวเลขน้อยกว่า 4 หลัก ให้กรอก 4 หลัก
วนซ้ำ
c16to2=c16to2 & tempstr
ต่อไป
ฟังก์ชันสิ้นสุด
ฟังก์ชัน c2to16(x)
'การแปลงจากไบนารี่เป็นเลขฐานสิบหก ทุก ๆ 4 0 หรือ 1 จะถูกแปลงเป็นตัวอักษรเลขฐานสิบหก แน่นอนว่าความยาวอินพุตไม่สามารถเป็นทวีคูณของ 4
dim i:i=1' ตัวชี้ชั่วคราว
สำหรับ i=1 ถึง len(x) ขั้นตอนที่ 4
c2to16=c2to16 & ฐานสิบหก(c2to10(กลาง(x,i,4)))
ต่อไป
ฟังก์ชันสิ้นสุด
ฟังก์ชัน c2to10(x)
'การแปลงไบนารี่อย่างง่ายเป็นทศนิยม ไม่ถือว่าการเติมศูนย์นำหน้า 4 ตัวที่จำเป็นสำหรับการแปลงเป็นเลขฐานสิบหก
'เพราะฟังก์ชั่นนี้มีประโยชน์มาก! มันจะถูกใช้ในอนาคตและผู้ที่เคยทำการสื่อสารและฮาร์ดแวร์ควรรู้
'สตริงถูกใช้ที่นี่เพื่อแสดงไบนารี
c2to10=0
ถ้า x = "0" ให้ออกจากฟังก์ชัน ถ้าเป็น 0 ให้รับ 0 แล้วเสร็จ
dim i:i=0'ตัวชี้ชั่วคราว
สำหรับ i= 0 ถึง len(x) -1' ไม่เช่นนั้น ให้ใช้โค้ด 8421 ในการคำนวณ เรื่องนี้ทราบมาตั้งแต่เริ่มเรียนคอมพิวเตอร์ครั้งแรก ฉันคิดถึงคุณ Xie Daojian ผู้สอนเรามาก!
ถ้า mid(x,len(x)-i,1)="1" แล้ว c2to10=c2to10+2^(i)
ต่อไป
ฟังก์ชันสิ้นสุด
ฟังก์ชัน c10to2(x)
'การแปลงจากทศนิยมเป็นไบนารี'
สัญญาณสลัวผลลัพธ์
ผลลัพธ์ = ""
'เครื่องหมาย
เครื่องหมาย = sgn(x)
x = เอบีเอส(x)
ถ้า x = 0 แล้ว
c10to2 = 0
ฟังก์ชั่นทางออก
สิ้นสุดถ้า
ทำจนกระทั่ง x = "0"
ผลลัพธ์ = ผลลัพธ์ & (x mod 2)
x = x2
วนซ้ำ
ผลลัพธ์ = strReverse (ผลลัพธ์)
ถ้าเครื่องหมาย = -1 แล้ว
c10to2 = "-" & ผลลัพธ์
อื่น
c10to2 = ผลลัพธ์
สิ้นสุดถ้า
ฟังก์ชันสิ้นสุด
ฟังก์ชัน URLDecode(enStr)
สลัว deStr,strSpecial
สลัว c, i, v
deStr=""
strSpecial="!""#$%&'()*+,/:;<=>?@[]^`{ |}~%"
สำหรับ i=1 ถึง len(enStr)
c=กลาง(enStr,i,1)
ถ้า c="%" แล้ว
v=eval("&h"+กลาง(enStr,i+1,2))
ถ้า inStr(strSpecial,chr(v))>0 แล้ว
deStr=deStr&chr(v)
ผม=ผม+2
อื่น
v=eval("&h"+กลาง(enStr,i+1,2)+กลาง(enStr,i+4,2))
deStr=deStr&chr(v)
ผม=ผม+5
สิ้นสุดถ้า
อื่น
ถ้า c="+" แล้ว
deStr=deStr&" "
อื่น
deStr=deStr&c
สิ้นสุดถ้า
สิ้นสุดถ้า
ต่อไป
URLDecode=deStr
สิ้นสุดการทำงาน
รหัสจำนวนมากออนไลน์อยู่ ไม่พบผู้เขียน
PS: ตอนนี้ฉันต้องยอมรับวันหยุดฤดูร้อน ด้วยเหตุผลทางครอบครัว ฉันจึงไม่อยากอยู่ในเมืองของฉัน . ฉันไม่ต้องการที่จะพูดชื่อเมือง ไม่อย่างนั้น ฉันจะดึงดูดคนรู้จัก ตราบใดที่ฉันไม่ได้อยู่ที่นี่ คุณสามารถติดต่อโรงเรียนในซานตงที่ถือเป็นประเด็นสำคัญได้หรือ
ไม่
?
การเขียนโปรแกรม แต่ฉันทำได้เพียงชื่อ X อันดับหนึ่งใน Information Olympiad เพราะฉันคิดว่าเทคโนโลยีไม่ควรสะท้อนให้เห็นในการแข่งขันเช่นเดียวกับความสามารถที่ไม่ควรทำ การแสดงก็เหมือนกันในการสอบที่ไม่มีความหมายเหล่านั้นฉันก็เช่นกัน งานอิเล็กทรอนิกส์ได้ที่หนึ่งในแต่ละจังหวัด...แต่ก็ถือว่าปานกลางนะ...การเรียนก็ปานกลาง...ขอแค่เน้นเรื่องทั่วไป...ก็ไม่อยากอยู่ใกล้บ้านจนเกินไป
ตอนนี้ ASP มีความเชี่ยวชาญมาก แม้ว่าจะมีข้อบกพร่องด้านความรู้อยู่บ้าง เช่น ปัญหาการเขียนโค้ด (เหงื่อออก...) แต่เครือข่ายก็ใหญ่มาก ฉันคิดว่าฉันไม่เพียงแต่จะได้รับสิ่งที่เรียกว่าความรู้จากหนังสือเรียนเท่านั้น และตอนนี้ฉันก็เป็นแล้ว อ่านหนังสือ ASP.NET ถ้ามันแพง เว็บไซต์โรงเรียนสามารถช่วยได้อย่างแน่นอน
ฉันกระตือรือร้นกับเทคโนโลยีใหม่ ๆ แม้ว่าฉันจะเรียกว่าเป็นคนที่มีความบกพร่องทางสุนทรียภาพ แต่ฉันอยากเห็นโครงสร้างของโปรแกรมของฉันโดยไม่อาเจียนเป็นเลือด
ลืมมันซะ... โพสต์เพิ่มเติม
ฉันพัฒนา D Database +asp ->xml+xslt->xhtml +css เป็นสิ่งที่เรียกว่า CMS
ยังใช้โปรแกรมแก้ไข FCK ที่ใช้โดย CSDN เท่านั้น ออกมาว่ามีการเปลี่ยนแปลงเมื่อผมมาวันนี้ แต่ระบบ FCK FIle ขอเปลี่ยนทุกอย่าง
ก่อนปิดเทอมฤดูร้อนแน่นอน .. หลายๆ คนไม่รู้จัก xslt หรอก...
ถ้าหาโรงเรียนไม่เจอ ฉันอาจจะเร่ร่อนไป บางทีก็หายไป แน่นอนว่านี่ไม่ใช่ภัยคุกคาม... ฉันแค่เกลียดเมืองของฉัน เกลียดทุกสิ่งที่ฉันเห็นและทำที่นั่น