Rob Kudla wrote:
> 
> On Tuesday 30 December 2008 08:03, werner 007 wrote:
>> Ok, i got the answer by my self.
>> The chars of not printable and non-ascii are represented as Hex.
>> To convert it back:
> 
> That'll work, but it'll also run Replace() 160 times each time you do a 
> conversion.  I'd do something like this:
> 
> function urlencode(strin as string) as string
>       dim strout as string
>       dim i as integer
>       dim a as integer
>       for i = 1 to len(strin)
>               a = asc(mid(strin, i, 1))
>               if a < 33 or a > 126 then
>                  strout = strout & "%" & Hex$(a, 2)
>               else
>                  strout = strout & mid(strin, i, 1)
>               endif
>       next
>       return strout
> end
> 
> Rob
> 
> 

Hi Rob

First when i read your solution i was thinking "damn, i was lazy to make a
good job". 
But then, we are not looking for single chars but for three at once. 
So i modified your idea to

FUNCTION urlencode(strin AS String) AS String
  DIM strout AS String
  DIM i AS Integer
  DIM a AS Integer
  IF InStr(strin, "%") THEN ' we can safe cpu
  FOR i = 1 TO Len(strin)
      IF Mid(strin, i, 1) = "%" THEN ' we can proceed next 2 digits
        IF IsNumber(Val(Mid(strin, i + 1, 2))) THEN 
          strout &= Chr((CInt(Mid(strin, i + 1, 2)) / 10) * 16) 'convert hex
to decimal
          i = i + 2
        ELSE
         strout = strout & Mid(strin, i, 1)
        END IF
      ELSE 
        strout = strout & Mid(strin, i, 1)
      END IF
  NEXT
  END IF
  RETURN strout
END


Werner(007)

-- 
View this message in context: 
http://www.nabble.com/URL-encoding-%22-20%22-tp21216641p21225597.html
Sent from the gambas-user mailing list archive at Nabble.com.


------------------------------------------------------------------------------
_______________________________________________
Gambas-user mailing list
Gambas-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gambas-user

Reply via email to