Public Class UTF8
Private stComponent As String
Private inComponentPos As Integer
Private inComponentSize As Integer
Public Sub new()
Call setComponentToDecode("")
End Sub
Public Sub setComponentToDecode(stComp As String)
stComponent = stComp
inComponentPos = 0
inComponentSize = Len(stComp)
End Sub
'// Retourne la valeur entiere du prochain caractere de la chaine
Public Function getNextCharInComponent() As Integer
Dim stCar As String
Dim inCar As Integer
inComponentPos = inComponentPos + 1
If (inComponentPos <= inComponentSize) Then
stCar = Mid(stComponent, inComponentPos, 1)
If (stCar = "%") Then
'// on doit lire les 2 caracteres suivants
getNextCharInComponent = Cint("&H" & Ucase(Mid(stComponent, inComponentPos+1, 1)) & Ucase(Mid(stComponent, inComponentPos+2, 1)))
inComponentPos = inComponentPos + 2
Else
getNextCharInComponent = Asc(stCar)
End If
Else
getNextCharInComponent = -1
End If
End Function
'// Décode une valeur "urlEncoded"
Public Function decodeValue(stValue As String) As String
Dim boFini As Boolean
Dim stRetour As String
Dim inCar(3) As Integer
stRetour = ""
Call setComponentToDecode(stValue)
boFini = False
While (boFini = False)
inCar(0) = oUTF8.getNextCharInComponent()
If (inCar(0) > -1) Then
If (inCar(0) < 128) Then
stRetour = stRetour & Chr$(inCar(0))
Elseif ((inCar(0) > 191) And (inCar(0) < 224)) Then
inCar(1) = getNextCharInComponent()
stRetour = stRetour & Chr$((((inCar(0) And 31) * 64) And 255) Or (inCar(1) And 63))
Else
inCar(1) = getNextCharInComponent()
inCar(2) = getNextCharInComponent()
stRetour = stRetour & Chr$((((inCar(0) And 15) * 4096) And 65535) Or (((inCar(1) And 63) * 64) And 255) Or (inCar(2) And 63))
End If
Else
boFini = True
End If
Wend
decodeValue = stRetour
End Function
End Class
[/syntax]
ça s'utilise comme ça:
[syntax="LotusScript"]
dim oUtf8 as UTF8
dim stValeurEncodee as string
dim stValeurDecodee as string
stValeurEncodee = "valeur isssue du query_string (par exemple)"
set oUtf8 = new UTF8()
stValeurDecodee = oUtf8.decodeValue(stValeurEncodee)
[/syntax]
Enjoy !