Официальный сайт студ.городка НГТУ
Программирование и БД » [ASP, URLDecode] Русских букв. 

#1  28.11.11 00:10

[ASP, URLDecode] Русских букв.

Привет комрады!

Какая-то ерунда - передаю GET в vbscript (asp) - разибираю GET и происходи какая-то ерунда - браузер по умолчанию urlENcode строки производит при передачи - т.е. вместо русских букв в параметрах получаю %XX - строка приходит нормально но не разбирается на параметры и их значения.
В том месте где русский символ он не URLDecod`ится (
Вопрос почему???

код в котором разбираю параметры и значния, напихал алертов, чтобы смотрреть что происходит. Но происходит какая-то ху#бятин@ ((

  Dim FormFields
  Set FormFields = CreateObject("Scripting.Dictionary")                        
Dim SourceData
SourceData=split(Request.QueryString, "&")
Dim Field, FieldName, FieldContents
Response.Write "<script>alert('|"& URLDecode(Request.QueryString) &"|');</script>"
    For Each Field In SourceData
      'Field name And contents is separated by "="
      Response.Write "<script>alert('|"& Request.QueryString &"|');</script>"
      Field = split(Field, "=")
      FieldName = URLDecode(Field(0))
      FieldContents = URLDecode(Field(1))
      Response.Write "<script>alert('FieldName:"& FieldName &"|FieldContents:" & FieldContents & "');</script>"
      'Add field To the dictionary
      FormFields.Add FieldName, FieldContents
    Next



Функция URLDecod`ирования:


Function URLDecode(ByVal What)
'URL decode Function
'2001 Antonin Foller, PSTRUH Software, http://www.motobit.com
  Dim Pos, pPos

  'replace + To Space
  What = Replace(What, "+", " ")

  on error resume Next
  Dim Stream: Set Stream = CreateObject("ADODB.Stream")
  If err = 0 Then 'URLDecode using ADODB.Stream, If possible
    on error goto 0
    Stream.Type = 2 'String
    Stream.Open

    'replace all %XX To character
    Pos = InStr(1, What, "%")
    pPos = 1
    Do While Pos > 0
      Stream.WriteText Mid(What, pPos, Pos - pPos) + _
        Chr(CLng("&H" & Mid(What, Pos + 1, 2)))
      pPos = Pos + 3
      Pos = InStr(pPos, What, "%")
    Loop
    Stream.WriteText Mid(What, pPos)

    'Read the text stream
    Stream.Position = 0
    URLDecode = Stream.ReadText

    'Free resources
    Stream.Close
  Else 'URL decode using string concentation
    on error goto 0
    'UfUf, this is a little slow method.
    'Do Not use it For data length over 100k
    Pos = InStr(1, What, "%")
    Do While Pos>0
      What = Left(What, Pos-1) + _
        Chr(Clng("&H" & Mid(What, Pos+1, 2))) + _
        Mid(What, Pos+3)
      Pos = InStr(Pos+1, What, "%")
    Loop
    URLDecode = What
  End If
End Function

Offline

#2  28.11.11 00:12

Re: [ASP, URLDecode] Русских букв.

а ну и собственно строка которую передаю

http://localhost/test.asp?f=%E8%E2%E0%ED%EE%E2&i=%22%E8%E2%E0%ED%22&o=%22%E8%E2%E0%ED%EE%E2%E8%F7%22&bd=01.10.1993&id=8

Offline

#3  28.11.11 03:51

$up
Профиль

Re: [ASP, URLDecode] Русских букв.

Просто тебе надо разобраться с кодировками. Где у тебя windows-1251, а где unicode

Offline

#4  28.11.11 18:00

Re: [ASP, URLDecode] Русских букв.

Да я уже понял что дело в ней. Уже передаю в UTF-8. Один фиг. При urldecode в русских названиях - пусто. Англицкие - без проблем. Хотя беру копирую значения параметра - вставляю в перекодировщик - проверить правильно был urlencode и правильно ли параметры дошли - и он урленкодит всё парвильно (http://url.foxtools.ru/) - русские названия.

Offline

#5  28.11.11 22:10

Re: [ASP, URLDecode] Русских букв.

кароч... съев изрядную дозу перца и поимев столько эротичных моментов с этим вопросом сделал через
base64encode\base64decode
ибо з@ip@ло

Offline

#6  29.11.11 06:03

sav
Профиль

Re: [ASP, URLDecode] Русских букв.

не важно чем ты пользуешься, у тебя есть несколько опций:
1. не задавать во время реквеста кодировку, знать на сервере в каком она виде придет
2. задать явно кодировку во время реквеста. не знаю, как это сделать в vbscript, на jQuery (а ты уже его юзал, судя по постам, это делается легко)
http://stackoverflow.com/questions/2662 … son-jquery
фактически передается некий html header, на сервере знаешь в каком виде она приходит.
на сервере ЯВНО выставляешь соответствующую кодировку.
Ключевое слово здесь ЯВНО.  Я в твоем коде не вижу, где ты указываешь кодировку.


просто, рекомендация: не изобретаем велосипед. должны быть встроенные механизмы, которые позволяют просто задав кодировку на сервере, получить набор параметр-значения. если таких механизмов нет (во что я не верю), выбирай другой инструмент. ты не должен ручками писать Function URLDecode(ByVal What). столько строк кода.

а вообще молодец, не останавливайся

Исправлено sav (29.11.11 06:04)

Offline

#7  29.11.11 08:15

Re: [ASP, URLDecode] Русских букв.

все передаваемые параметры можно получить из простой конструкции

Код::

param1 = Request("param1")

Советую почитать про объект request на w3school
Для формы с выбором файла сложнее: ASP использовался давнои много чего не умеет. Файл передается в бинарном виде, и разбирать его придется тебе ручками. Есть класс реализующий это, помоему Uploader называется, но и он с косяками - мне пришлось править его методы. Столкнувшись с продуктом нашей фирмы написанном на ASP, я до сих пор его проклинаю...

Offline

#8  11.12.11 22:39

Maq
Профиль

Re: [ASP, URLDecode] Русских букв.

в классическом аспе много проблем в его встроенных функциях, поэтому зачастую пишутся COM'компоненты с нужным набором функций, если нету возможность свалить с классического аспа.

Offline

Программирование и БД » [ASP, URLDecode] Русских букв. 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.028 сек.
Выполнено 14 запросов.