URLEncode: Difference between revisions

From Pickwiki
Jump to navigationJump to search
Stuboy (talk | contribs)
mNo edit summary
Stuboy (talk | contribs)
mNo edit summary
Line 3: Line 3:
This is a function to correctly URLEncode a string.<br>
This is a function to correctly URLEncode a string.<br>
URL encoding of a character consists of a "%" symbol, followed by the two-digit hexadecimal representation (case-insensitive) of the ISO-Latin code point for the character.<br>
URL encoding of a character consists of a "%" symbol, followed by the two-digit hexadecimal representation (case-insensitive) of the ISO-Latin code point for the character.<br>
See http://www.permadi.com/tutorial/urlEncoding/ for more info.
Some of the encoding decisions can get tricky in the 32-47 range and you will have to decide how you might encode sections of strings to override encrypting some potentially valid unencoded URI delimiters.
 
References:<br>
See http://www.gbiv.com/protocols/uri/rfc/rfc3986.html#characters<br>
See http://www.permadi.com/tutorial/urlEncoding




Line 13: Line 17:


   *// basic example:
   *// basic example:
   *// deffun URLEncode(string) ;* calling *URLEncode ;*- use this if you globally catalogue the program
   *// deffun URLEncode(string) ;* calling *URLEncode ;*[use 'calling globID' if you globally catalogue the program]
   *// encodedString = URLEncode(unencodedString)
   *// encodedString = URLEncode(unencodedString)


Line 26: Line 30:


   *// ranges of ascii codes of all characters to be encoded
   *// ranges of ascii codes of all characters to be encoded
   *// 0-31 ASCII Control Characters These characters are not printable Unsafe
   *// 0-31 ASCII Control Characters Unsafe
   *// 32-47 Reserved Characters ' '!?#$%&'()*+,-./ Unsafe
   *// 32-47 Reserved Characters ' '!?#$%&'()*+,-./ Unsafe
   *// 48-57 ASCII Characters and Numbers 0-9 Safe
   *// 48-57 ASCII Characters and Numbers 0-9 Safe
Line 43: Line 47:


   *// 'Normal' encoding start/end characters (decimal ascii)
   *// 'Normal' encoding start/end characters (decimal ascii)
   equ E.ASCII.START to (00:@am:34:@am:38:@am:47:@am:58:@am:91:@am:96:@am:123),
   equ E.ASCII.START to (00:@am:38:@am:47:@am:58:@am:91:@am:96:@am:123),
       E.ASCII.END  to (31:@am:36:@am:38:@am:47:@am:64:@am:94:@am:96:@am:255),
       E.ASCII.END  to (36:@am:44:@am:47:@am:64:@am:94:@am:96:@am:255),
       E.MAXRANGE    to 8
       E.MAXRANGE    to 7


   *// convert 'special' encoding characters "%+[sp]"
   *// convert 'special' encoding characters "%+[sp]"
   string = change(inString,E.PERCENT,E.PERCENT:'25')
   outString = change(inString,E.PERCENT,E.PERCENT:'25')
   string = change(string,E.PLUS,E.PERCENT:'2B')
 
   string = change(string,E.SPACE,E.PLUS)
  *// space may be converted to '+' under some schemes...
   *//outString = change(outString,E.PLUS,E.PERCENT:'2B')
   *//outString = change(outString,E.SPACE,E.PLUS)


   *// now convert 'normal' character ranges
   *// now convert 'normal' character ranges
Line 57: Line 63:
         jchar = char(j)  ;*// get char from decimal val
         jchar = char(j)  ;*// get char from decimal val
         *// index() character before change() - faster
         *// index() character before change() - faster
         if index(string,jchar,1) then
         if index(outString,jchar,1) then
             string = change(string,jchar,E.PERCENT:dtx(j,2))
             outString = change(outString,jchar,E.PERCENT:dtx(j,2))
         end
         end
       next j
       next j
   next i
   next i


return(string)
return(outString)
the:end
the:end



Revision as of 02:55, 30 June 2006

HomePage>>SourceCode>>BasicSource>>URLEncode

This is a function to correctly URLEncode a string.
URL encoding of a character consists of a "%" symbol, followed by the two-digit hexadecimal representation (case-insensitive) of the ISO-Latin code point for the character.
Some of the encoding decisions can get tricky in the 32-47 range and you will have to decide how you might encode sections of strings to override encrypting some potentially valid unencoded URI delimiters.

References:
See http://www.gbiv.com/protocols/uri/rfc/rfc3986.html#characters
See http://www.permadi.com/tutorial/urlEncoding


function URLEncode(inString)

   *// perform standard URL encoding for UV ascii. ISO-8859-1 (ISO-Latin) character set.
   *// stuart boydell 17-Dec-2004

   *// basic example:
   *// deffun URLEncode(string) ;* calling *URLEncode ;*[use 'calling globID' if you globally catalogue the program]
   *// encodedString = URLEncode(unencodedString)

   *// Only alphanumerics [0-9a-zA-Z], the special characters $-_.+!*'(), 
   *// and reserved characters used for their reserved purposes may be 
   *// used unencoded within a URL.

   *// This process encodes unsafe characters to their URL safe
   *// equivalent. eg. char(2) -> "%02"

   *// First encodes char(37) "%" to %25 then loops through other ASCII.CODES ranges.

   *// ranges of ascii codes of all characters to be encoded
   *// 0-31 	ASCII Control Characters 	Unsafe
   *// 32-47 	Reserved Characters 	' '!?#$%&'()*+,-./ 	Unsafe
   *// 48-57 	ASCII Characters and Numbers 	0-9 	Safe
   *// 58-64 	Reserved Characters 	:;<=>?@ 	Unsafe
   *// 65-90 	ASCII Characters 	A-Z 	Safe
   *// 91-96 	Reserved Characters 	[\]^_` 	Unsafe
   *// 97-122 	ASCII Characters 	a-z 	Safe
   *// 123-126 	Reserved Characters 	{|}~ 	Unsafe
   *// 127 	Control Characters 	' ' 	Unsafe
   *// 128-255 	Non-ASCII Characters 	' ' 	Unsafe
   
   *// 'Special' encoding characters
   equ E.PERCENT     to '%',
       E.SPACE       to ' ',
       E.PLUS        to '+'

   *// 'Normal' encoding start/end characters (decimal ascii)
   equ E.ASCII.START to (00:@am:38:@am:47:@am:58:@am:91:@am:96:@am:123),
       E.ASCII.END   to (36:@am:44:@am:47:@am:64:@am:94:@am:96:@am:255),
       E.MAXRANGE    to 7

   *// convert 'special' encoding characters "%+[sp]"
   outString = change(inString,E.PERCENT,E.PERCENT:'25')

   *// space may be converted to '+' under some schemes...
   *//outString = change(outString,E.PLUS,E.PERCENT:'2B')
   *//outString = change(outString,E.SPACE,E.PLUS)

   *// now convert 'normal' character ranges
   for i = 1 to E.MAXRANGE
      for j = E.ASCII.START<i> to E.ASCII.END<i>
         jchar = char(j)  ;*// get char from decimal val
         *// index() character before change() - faster
         if index(outString,jchar,1) then
            outString = change(outString,jchar,E.PERCENT:dtx(j,2))
         end
      next j
   next i

return(outString)
the:end






HomePage>>SourceCode>>BasicSource>>URLEncode