#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
#4 28.11.11 18:00
Re: [ASP, URLDecode] Русских букв.
Да я уже понял что дело в ней. Уже передаю в UTF-8. Один фиг. При urldecode в русских названиях - пусто. Англицкие - без проблем. Хотя беру копирую значения параметра - вставляю в перекодировщик - проверить правильно был urlencode и правильно ли параметры дошли - и он урленкодит всё парвильно (http://url.foxtools.ru/) - русские названия.
Offline
#6 29.11.11 06:03
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

