Qualcuno può aiutarmi?
Esiste già una funzione di decodifica?
Grazie.
Carlo.
Usa la Replace() per sostituire i vari caratteri "illegali" con il loro
equivalente "legale". Di solito solo l'apice singolo da' questo tipo di
problemi, altri caratteri (se sono dentro a stringhe come di solito
avviente) sono ignorati.
Davide
Tu hai bisogno di rimpiazzare (replace()) i caratteri "illegali".
In generale, per la maggior parte dei DB è sufficiente rimpiazzare l'apice
con la classica, strausata e conosciutissima funzione:
Testo = Replace(Testo, "'", "''")
Se il tuo DB si comporta in modo strano, ovvero protesta anche per
l'inserimento di caratteri diversi dall'apice, è un DB Access.
Romeo_
> Se però il testo scritto dall'utente contiene caratteri riservati per la
> sintassi
> SQL (apici, doppi apici, parentesi graffe, etc.) il motore del database mi
> restituisce errore. Ho cercato di risolvere l'inconveniente utilizzando la
> funzione di codifica URLEncode: il testo viene scritto codificato (access
> accetta tutto) ma non riesco a trovare una funzione di decodifica del testo
> per riproporlo all'utente così come era stato scritto in origine.
Forse potrebbe esserti utile questo script:
---[inizio]---
<%
' Funzione per codificare il messaggio in modo da evitare che simboli
particolari mandino in crash il database
Function DBEncode(ByVal s)
Dim result, ch
Do While Len(s) > 0
ch = Asc(s)
s = Right(s, Len(s)-1)
If (ch >= Asc("a") And ch <= Asc("z")) Or (ch >= Asc("A") And ch <= Asc("Z"))
Then
result = result & Chr(ch)
ElseIf ch = Asc(" ") Then
result = result & " "
Else
If Ch < 10 then
Char = "00" & Ch
ElseIF Ch > 9 and Ch < 100 then
Char = "0" & Ch
Else
Char = Ch
End If
result = result & "&" & Char
End If
Loop
DBEncode = result
End Function
'Funzione per decodificare il messaggio
Function DBDecode(s)
Dim Result, ch
Do while Len(s) > 0
ch = Left(s,1)
If ch <> "&" then
Result = Result & ch
s = Right(s,len(s)-1)
Else
Cod_Ch = Cint(Mid(s,2,3))
If Cod_Ch <> 60 and Cod_Ch <> 62 then
Result = Result & Chr(Cod_Ch)
Else
If Cod_Ch = 60 then
Result = Result & "<"
Else
Result = Result & ">"
End If
End If
s = Right(s,len(s)-4)
End If
Loop
DBDecode = Result
End Function
---[fine]---
Per usarle:
<%
Testo = "Qualsiasi carattere"
Codifica = DBEncode(Testo)
Decodifica = DBDecode(Codifica)
%>
Praticamente DBEncode codifica ogni singolo carattere in codice esadecimale, e
DBDecode effettua l'operazione contraria.
La sequenza delle conversioni è molto banale infatti, DBEncode converte il
carattere nel relativo codice ASCII (quindi possono essere inseriti tutti i
caratteri a partire dal codice ASCII 0 sino al 255) e quindi effettua la
conversione da numero a base dieci a numero a base 16 ( 0 = 00 ... 255 = FF).
DBDecode effettua le operazioni inverse.
L'unico problema riguarda lo spazio utilizzato infatti, ogni singolo carattere
occuperà non uno ma due caratteri (scusate la ripetizione) e quindi se devo
memorizzare un testo di 27 caratteri, il campo del DB deve accettarne 54.
Avevo creato le stesse function in modo tale da convertire in esadecimale solo i
caratteri non letterali e/o numerici in modo da limitare lo spazio utilizzato.
Naturalmente, la procedura di codifica inseriva PRIMA del codice esadecimale il
carattere & (o qualsiasi altro carattere diverso da quelli letterali e numerici)
in modo che la funzione di decodifica, trovando questo carattere, convertisse le
due lettere che lo seguivano altrimenti non effettuava alcuna conversione.
Sò di non essere una cima nelle spiegazioni però spero di essere stato
abbastanza chiaro.
Michele Mariotti