บทความนี้จะแนะนำฟังก์ชันที่กำหนดเองของ URLEncode และ URLDecode ที่ใช้ใน ASP เป็นหลัก ซึ่งแตกต่างจาก server.urlencode ที่มาพร้อมกับ ASP
เมื่อทำการโพสต์ใน Ajax ฉันพบว่าข้อมูลที่ได้รับจากเซิร์ฟเวอร์นั้นอ่านไม่ออกเสมอไป ฉันดูวิธีแก้ปัญหาบางอย่างบนอินเทอร์เน็ตและไม่สามารถเข้าใจได้ ไม่สามารถแยกวิเคราะห์หรือสร้างข้อผิดพลาด xml ฝั่งเซิร์ฟเวอร์ได้ ดังนั้นเราจึงเข้ารหัสก่อนโพสต์แล้วถอดรหัสบนเซิร์ฟเวอร์ ซึ่งจะช่วยแก้ปัญหาได้ แต่หากข้อมูลมีขนาดใหญ่ก็อาจส่งผลต่อความเร็วได้
แม้ว่าคำขอใน ASP จะถอดรหัสสตริงที่เข้ารหัส URL โดยอัตโนมัติ แต่ Request.BinaryRead(Request.TotalBytes) จะไม่ถอดรหัสเมื่อได้รับข้อมูลที่โพสต์ ดังนั้นจึงต้องถอดรหัส
ต่อไปนี้เป็นฟังก์ชันถอดรหัสของฟังก์ชัน server.urlencode ใน ASP ที่ฉันพบ
คัดลอกรหัสรหัสดังต่อไปนี้:
ฟังก์ชัน 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(โวลต์)
ผม=ผม+5
สิ้นสุดถ้า
อื่น
ถ้า c="+" แล้ว
deStr=deStr&" "
อื่น
deStr=deStr&c
สิ้นสุดถ้า
สิ้นสุดถ้า
ต่อไป
URLDecode=deStr
สิ้นสุดฟังก์ชัน
สิ่งที่แนบมาด้วยคือฟังก์ชันการเข้ารหัสอื่น ความแตกต่างระหว่างสิ่งนี้กับ server.urlencode คือ server.urlencode จะแปลงแท็ก เช่น html หรือ xml เช่น
การเข้ารหัสจะดำเนินการเช่นกัน แต่ฟังก์ชันด้านล่างจะไม่ดำเนินการ ฉันใช้สิ่งต่อไปนี้เพื่อเข้ารหัสแล้วถอดรหัส เนื่องจากฉันใช้ xml เมื่อใช้ post
คัดลอกรหัสรหัสดังต่อไปนี้:
การเข้ารหัส URL ฟังก์ชั่นส่วนตัว (vstrIn)
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
สิ้นสุดฟังก์ชัน