Функция декодирования URL-адресов, простая и понятная. Основная причина в том, что исходный китайский URL-адрес закодирован. Когда он используется конкретно, его необходимо восстановить на китайский, поэтому такая функция необходима. Например:
Когда мы ищем Script Home в Baidu, параметры после URL-адреса:
http://www.baidu.com/s?cl=3&wd=%BD%C5%B1%BE%D6%AE%BC%D2
Если мы хотим восстановить %BD%C5%B1%BE%D6%AE%BC%D2 на китайский язык, просто используйте следующую функцию.
<%
response.write urldecode(http://www.baidu.com/s?cl=3&wd=%BD%C5%B1%BE%D6%AE%BC%D2)
'==============================================
'Имя функции: URLDecode
'Функция: декодирование URL
'==============================================
Функция URLDecode (URL-код ByVal)
Dim start,final,length,char,i,butf8,pass
Тусклый левый стр, правый стр, финалстр
Dim b0,b1,bx,blength,position,u,utf8
При ошибке Возобновить Далее
b0 = Массив (192 224 240 248 252 254)
URL-код = Заменить (URL-код, +, )
пройти = 0
utf8 = -1
длина = Len(код URL): начало = InStr(код URL,%) : окончательный = InStrRev(код URL,%)
Если начало = 0 или длина < 3, тогда URLDecode = urlcode: выход из функции
leftstr = Left(urlcode,start - 1): rightstr = Right(urlcode,length - 2 - окончательный)
Для i = начало До финала
символ = Mid(urlcode,i,1)
Если символ = %Тогда
bx = URLDecode_Hex(Mid(urlcode,i + 1,2))
Если bx > 31 и bx < 128 Тогда
я = я + 2
финалстр = финалстр & ChrW(bx)
ИначеЕсли bx > 127 Тогда
я = я + 2
Если utf8 < 0 Тогда
Butf8 = 1: bдлина = -1: b1 = bx
Для позиции = от 4 до 0 Шаг -1
Если b1 >= b0(позиция) и b1 < b0(позиция + 1) Тогда
bдлина = позиция
Выход для
Конец, если
Следующий
Если bдлина > -1 Тогда
Для позиции = 0 Для bдлины
b1 = URLDecode_Hex(Mid(urlcode,i + позиция * 3 + 2,2))
Если b1 < 128 или b1 > 191. Тогда Butf8 = 0: выход.
Следующий
Еще
ноф8 = 0
Конец, если
Если Butf8 = 1 и blength = 0, то Butf8 = -2
Если Butf8 > -1 и utf8 = -2 Тогда i = start - 1 : Finalstr = : pass = 1
utf8 = бутф8
Конец, если
Если проход = 0 Тогда
Если utf8 = 1 Тогда
b1 = bx: u = 0: bдлина = -1
Для позиции = от 4 до 0 Шаг -1
Если b1 >= b0(позиция) и b1 < b0(позиция + 1) Тогда
bдлина = позиция
b1 = (b1 xOr b0(позиция)) * 64 ^ (позиция + 1)
Выход для
Конец, если
Следующий
Если bдлина > -1 Тогда
Для позиции = 0 Для bдлины
bx = URLDecode_Hex(Mid(urlcode,i + 2,2)) : я = я + 3
Если bx < 128 или bx > 191. Тогда u = 0: выход.
u = u + (bx И 63) * 64 ^ (blength — позиция)
Следующий
Если u > 0, то Finalstr = Finalstr & ChrW(b1 + u)
Конец, если
Еще
b1 = bx * &h100: u = 0
bx = URLDecode_Hex(Mid(urlcode,i + 2,2))
Если bx > 0 Тогда
и = b1 + bx
я = я + 3
Еще
Если Left(urlcode,1) = % Тогда
u = b1 + Asc(Mid(urlcode,i + 3,1))
я = я + 2
Еще
u = b1 + Asc(Mid(urlcode,i + 1,1))
я = я + 1
Конец, если
Конец, если
финалстр = финалстр & Chr(u)
Конец, если
Еще
пройти = 0
Конец, если
Конец, если
Еще
финалстр = финалстр и символ
Конец, если
Следующий
URLDecode = левая строка, финальная строка и правая строка
Конечная функция
Функция URLDecode_Hex(ByVal h)
При ошибке Возобновить Далее
h = &h & Trim(h): URLDecode_Hex = -1
Если Len(h) <> 4, то выйти из функции
Если isNumeric(h), то URLDecode_Hex = cInt(h)
Конечная функция
%>