Archiv

TechInfo

urlDecode/urlEncode

By Dirk Bergles

Es gibt nun zwei zentrale Funktionen für die URL Kodierung in der Library SWM_Error.
Bisher wurden Strings einfach, leider an mehreren Stellen, per Evaluate und @URLEncode/@URLDecode kodiert. Nun existieren zwei reine Script-Funktionen, so daß erstens der teure Evaluate wegfällt und zweitens auch Strings erlaubt sind, welche größer 2K sind. in einem Evaluate würde ja der String als Konstante eingebaut werden und die sie ja bekanntlich auf 2K Größe beschränkt.

Da vermutlich jeder seine "eigenen" Funktionen gleich benannt hat, urlDecode() und urlEncode(), kann es wahrscheinlich hier und da zu einer doppelten Deklaration und Fehler beim Kompilieren kommen.

In folgenden Libraries und Agenten habe ich den Aufruf angepasst, bzw. die lokalen Funktionen entfernt.


XTT_DataSourceEntry
SWM_URLHandler
WUI_getView (Agent)
WUI_Web_DisplayNotesView (Agent)
BuildAdvancedFTSearch (Agent)
WUI_Web_ProcessPostedFile (Agent)


Es existieren aber noch etliche hart verdrahtete Evaluates mit einem @URLEn(De)code.



Hier die beiden Funktionen als reine Scriptlösung, ohne Evaluate


Public Function urlDecode(s As String) As String
On Error Goto Repeater
If Len(s) = 0 Then Exit Function
Dim i As Integer
Dim tmp As String
Dim c As String
For i = 1 To Len(s)
c = Mid$(s, i, 1)
If c = "+" Then c = " "
If c = "%" Then
c = Chr$("&H" + Mid$(s, i + 1, 2))
i = i + 2
End If
tmp = tmp + c
Next i
urlDecode = tmp
Exit Function
Repeater:
Error Err, Error & {
::} & Getthreadinfo(1) & {():} & Erl
End Function
Public Function urlEncode(s As String) As String
On Error Goto Repeater
If Len(s) = 0 Then Exit Function

Dim tmp As String
Dim c As String
Dim i As Integer

For i = 1 To Len(s)
c = Mid(s, i, 1)
If (Asc(c) >= 65 And Asc(c) <= 90) _
Or (Asc(c) >= 97 And Asc(c) <= 122) _
Or (Asc(c) >= 48 And Asc(c) <= 58) _
Or Asc(c) = 38 _
Or (Asc(c) >= 45 And Asc(c) <= 47) _
Or Asc(c) = 58 Or Asc(c) = 61 _
Or Asc(c) = 63 Or Asc(c) = 126 Then
tmp = tmp + c
Else
tmp = tmp + "%" + Hex(Asc(c))
End If
Next i
urlEncode = tmp
Exit Function
Repeater:
Error Err, Error & {
::} & Getthreadinfo(1) & {():} & Erl
End Function

Einen Kommentar erstellen