Page 1 of 2
URLEncode
Posted: Thu Mar 02, 2006 3:45 pm
by Bonne_den_kule
Code updated For 5.20+
Code: Select all
Procedure.s URLEncode(string.s)
char.s
urlstring.s
For i=1 To Len(string)
char = Mid(string,i,1)
If FindString("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.!~*'()", UCase(char), 1) > 0
urlstring+char
Continue
ElseIf char=" "
urlstring+"+"
Continue
Else
urlstring+"%"+RSet(Hex(Asc(char)),2,"0")
EndIf
Next
ProcedureReturn urlstring
EndProcedure
EDIT:
Fixed a bug
Posted: Thu Mar 02, 2006 4:37 pm
by El_Choni
Couldn't resist...
Code: Select all
Procedure.s URLEncode2(string.s)
SEnd = @string+Len(string)
*Seeker.BYTE = @string
While *Seeker<SEnd
Select *Seeker\b
Case 32
urlstring$+"+"
Case 48 To 57, 65 To 90, 97 To 122
urlstring$+Chr(*Seeker\b)
Default
urlstring$+"%"+Right(Hex(*Seeker\b), 2)
EndSelect
*Seeker+1
Wend
ProcedureReturn urlstring$
EndProcedure
Posted: Thu Mar 02, 2006 6:38 pm
by va!n
@El_Choni!
Compiling your source with PB4b4 returns an ASM error here
Posted: Thu Mar 02, 2006 7:04 pm
by El_Choni
Yes, Trond reported that in the bug section. As a workaround, until this is fixed, you use this:
Code: Select all
Procedure.s URLEncode2(string.s)
SEnd = @string+Len(string)
*Seeker.BYTE = @string
While *Seeker<SEnd
Select *Seeker\b
Case 32
urlstring$+"+"
Case 48 To 57, 65 To 90
urlstring$+Chr(*Seeker\b)
Case 97 To 122
urlstring$+Chr(*Seeker\b)
Default
urlstring$+"%"+Right(Hex(*Seeker\b), 2)
EndSelect
*Seeker+1
Wend
ProcedureReturn urlstring$
EndProcedure
Posted: Thu Mar 02, 2006 7:04 pm
by Trond
And neither of your sources does a correct URLEncode.
The following (ranges of) characters should NOT be escaped:
A..Z
0..9
-
_
.
!
~
*
'
(
)
Posted: Thu Mar 02, 2006 7:09 pm
by El_Choni
Now?:
Code: Select all
Procedure.s URLEncode2(string.s)
SEnd = @string+Len(string)
*Seeker.BYTE = @string
While *Seeker<SEnd
Select *Seeker\b
Case 32
urlstring$+"+"
Case 48 To 57, 65 To 90
urlstring$+Chr(*Seeker\b)
Case 97 To 122
urlstring$+Chr(*Seeker\b)
Case '-','_','.','!','~','*',39,'(',')'
urlstring$+Chr(*Seeker\b)
Default
urlstring$+"%"+Right(Hex(*Seeker\b), 2)
EndSelect
*Seeker+1
Wend
ProcedureReturn urlstring$
EndProcedure
Posted: Thu Mar 02, 2006 8:08 pm
by Nik
And it isn't unicode enabled

This should be though I didn't test very much:
Code: Select all
Procedure.s URLEncode2(string.s)
SEnd = @string+Len(string)
*Seeker.CHARACTER = @string
Repeat
Select *Seeker\c
Case 32
urlstring$+"+"
Case 48 To 57, 65 To 90
urlstring$+Chr(*Seeker\c)
Case 97 To 122
urlstring$+Chr(*Seeker\c)
Case '-','_','.','!','~','*',39,'(',')'
urlstring$+Chr(*Seeker\c)
Default
urlstring$+"%"+Right(Hex(*Seeker\c), 2)
EndSelect
*Seeker+SizeOf(CHARACTER)
Until *Seeker>=@string+(Len(String)*SizeOf(Character))
ProcedureReturn urlstring$
EndProcedure
Posted: Thu Mar 02, 2006 9:50 pm
by Flype
And it could be simpler/shorter :
Code: Select all
Procedure.s URLEncode2(string.s)
*Seeker.CHARACTER = @string
Repeat
Select *Seeker\c
Case 32
urlstring$+"+"
Case 48 To 57, 65 To 90
urlstring$+Chr(*Seeker\c)
Case 97 To 122
urlstring$+Chr(*Seeker\c)
Case '-','_','.','!','~','*',39,'(',')'
urlstring$+Chr(*Seeker\c)
Default
urlstring$+"%"+Right(Hex(*Seeker\c), 2)
EndSelect
*Seeker+SizeOf(CHARACTER)
Until *Seeker\c = 0
ProcedureReturn urlstring$
EndProcedure
Posted: Fri Mar 03, 2006 12:20 am
by Bonne_den_kule
My ownage code

:
Code: Select all
Procedure.s URLEncode(string.s)
char.s
urlstring.s
For i=1 To Len(string)
char = Mid(string,i,1)
If FindString("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.!~*'()", UCase(char), 1) > 0
urlstring+char
Continue
ElseIf char=" "
urlstring+"+"
Continue
Else
urlstring+"%"+RSet(Hex(Asc(char)),2,"0")
EndIf
Next
ProcedureReturn urlstring
EndProcedure
Posted: Fri Mar 03, 2006 12:26 am
by Bonne_den_kule
Can someone compare the speed of all these URLEncode functions?
Posted: Fri Mar 03, 2006 11:11 am
by Trond
There is also an API function called UrlEncode() that should do this.
Posted: Fri Mar 03, 2006 11:14 am
by El_Choni
But ours are better

Posted: Fri Mar 03, 2006 11:45 am
by Bonne_den_kule
Our codes are pure...

Posted: Fri Mar 03, 2006 9:06 pm
by blueznl
Posted: Sat Mar 04, 2006 10:44 pm
by dell_jockey
El_Choni wrote:But ours are better

why are your codes better than an api call?

just wondering...