Procedure.s url_encode( *szStr.CHARACTER )
	;!Author: Gustavo J. Fiorenza (aim: gushhfx)
	;!Date: 27/03/2008 - Rev: 2
	;!Compliance: rfc3986
	If *szStr
		Define.s szReturnString
		Repeat
 
			Select *szStr\c
 
				Case 'A' To 'Z', 'a' To 'z', '0' To '9', '-', '.', '_', '~' ; unreserved
					szReturnString + Chr(*szStr\c)
 
				Case  '!', '$', '&', 39, '(', ')', '*', '+', ',', ';', '=' ; reserved -> sub-delims
					szReturnString + Chr(*szStr\c)
 
				Case ':', '/', '?', '#', '[', ']', '@', '%' ; reserved -> gen-delims (last char placed to avoid recursive percent-encoding)
					szReturnString + Chr(*szStr\c)
 
				Default ; percent-encoding
					szReturnString + ("%" + Hex(*szStr\c)) ;-Note: test/review this method in the future.
 
			EndSelect
 
			*szStr + SizeOf(CHARACTER)
 
		Until *szStr\c = #Null
		ProcedureReturn szReturnString
	EndIf
EndProcedure