Io e il mio collega abbiamo fatto una cosa malatissima che x poco non funziona!
Vi posto il codice, secondo me è una cosa utilissima perchè oltre a comprimere una qualsiasi stringa la cripta pure (E' UNA FIGATA)
Vi spiego come funziona e qual'è il problema.
Allora, il primo file è questo:
(a.asp) Quando faccio buf=funczippa(2,stringa) chiamo la funzione per comprimere la stringa e poi la metto nel campo nascosto della form
-------------------------------------------------------------------
<%
stringa = "PROVA PER VERIFICARE UNA STRINGA MOOOOLTO LUNGA E PER VEDERE QUANTI CARATTERI SERVONO PER CONTROBILANCIARE LA LUNGHEZZA DI UN FORM MULTIPART"
buf=funczippa(2,stringa)
%>
<form action="b.asp" method="post" enctype="text/plain">
<input type="hidden" name="jj" value="<%response.binarywrite buf%>">
<input type="submit">
</form>
--------------------------------------------------------------------
La funzione fa questo:
SE LE VIENE PASSATO 1 NEL PARAMETRO OPERAZIONE DECOMPRIME LA STRINGA
ALTRIMENTI LA COMPRIME.
X COMPRIMERLA NON FA NIENT'ALTRO KE LEGGERE OGNI CARATTERE DELLA STRINGA ORIGINALE E SOSTITUIRLO CON LA SEQUENZA DI BIT RELATIVA NELLA MATRICE INIZIALE.
ALLA FINE DI QUESTO CICLO HO UNA STRINGA DI 1 E 0 KE POI CONVERTO IN BYTE.
E' QUESTA STRINGA KE VIENE SPEDITA (I CARATTERI KIARAMENTE SONO ILLEGIBILI)
NELLA PAGINA B.ASP RICEVO LA STRINGA E RICHIAMO LA FUNZIONE FUNCZIPPA PASSANDOGLI COME OPERATORE 1 PER DECOMPRIMERE.
QUI NON FACCIO NINET'ALTRO KE LEGGERE OGNI CARATTERE BINARIO, TRASFORMARLO IN CARATTERE X RECUPERARE LA STRINGA COMPRESSA IN FORMATO LEGGIBILE.
PER ULTIMO LEGGO QUESTA STRINGA, LA CONVERTO IN UNA STRINGA DI 1 E 0 E CONTROLLO NELLA MATRICE X FARE LE SOSTITUZIONI CON LE LETTERE ORIGINALI.
E' UN PO' UN MACELLO MA SPERO DI ESSERMI UN PO' SPIEGATO.
IL PROBLEMA E' CHE FUNZIONA NON SEMPRE PERCHE' QUALCHE CARATTERE LO PERDE O LO SOSTIUTISCE IN QUALCHE MODO.
PROVATELA, SE RIUSCIAMO A FARLA FUNZIONARE SARA' UTILISSIMA!
CIAO A TUTTI!
FUNZIONE FUNCZIPPA:
E' una funzione abbastanza malata che comprime e decomprime in base al primo parametro che le viene passato.
function funczippa(operazione,stringa)
dim stringabinaria, stringanorm, stringabytes, byteletto, carattere
dim codici(44,2)
codici(1,1) = "¤": codici(1,2) = "0000"
codici(2,1) = "|": codici(2,2) = "0010"
codici(3,1) = "3": codici(3,2) = "0100"
codici(4,1) = "0": codici(4,2) = "0110"
codici(5,1) = "1": codici(5,2) = "00010"
codici(6,1) = "7": codici(6,2) = "00011"
codici(7,1) = "2": codici(7,2) = "00110"
codici(8,1) = "4": codici(8,2) = "00111"
codici(9,1) = "5": codici(9,2) = "01010"
codici(10,1) = "6": codici(10,2) = "01011"
codici(11,1) = "8": codici(11,2) = "01110"
codici(12,1) = "9": codici(12,2) = "01111"
codici(13,1) = "A": codici(13,2) = "11000"
codici(14,1) = "E": codici(14,2) = "100000"
codici(15,1) = "B": codici(15,2) = "100001"
codici(16,1) = "C": codici(16,2) = "100010"
codici(17,1) = "D": codici(17,2) = "100011"
codici(18,1) = "T": codici(18,2) = "100100"
codici(19,1) = "F": codici(19,2) = "100101"
codici(20,1) = "G": codici(20,2) = "100110"
codici(21,1) = "Q": codici(21,2) = "100111"
codici(22,1) = "R": codici(22,2) = "101000"
codici(23,1) = "L": codici(23,2) = "101001"
codici(24,1) = "M": codici(24,2) = "101010"
codici(25,1) = "N": codici(25,2) = "101011"
codici(26,1) = "O": codici(26,2) = "101100"
codici(27,1) = "P": codici(27,2) = "101101"
codici(28,1) = "S": codici(28,2) = "101110"
codici(29,1) = "U": codici(29,2) = "110010"
codici(30,1) = "V": codici(30,2) = "110011"
codici(31,1) = "W": codici(31,2) = "110100"
codici(32,1) = "X": codici(32,2) = "110101"
codici(33,1) = "Y": codici(33,2) = "110110"
codici(34,1) = "Z": codici(34,2) = "110111"
codici(35,1) = " ": codici(35,2) = "111000"
codici(36,1) = ".": codici(36,2) = "111001"
codici(37,1) = "/": codici(37,2) = "111010"
codici(38,1) = "+": codici(38,2) = "111011"
codici(39,1) = "*": codici(39,2) = "111100"
codici(40,1) = "-": codici(40,2) = "111101"
codici(41,1) = "H": codici(41,2) = "111110"
codici(42,1) = "I": codici(42,2) = "111111"
codici(43,1) = "K": codici(43,2) = "1011110"
codici(44,1) = "J": codici(44,2) = "1011111"
'----------------------- DECOMPRESSIONE -----------------------
if operazione = 1 then
For i = 1 To lenB(stringa)
stringabytes = stringabytes & chr(ascB(midB,stringa,i,1)))
Next
for i = 1 to len(stringabytes)
byteletto = asc(mid(stringabytes,i,1))
'-- LEGGO IL CODICE ASCII DI OGNI CARATTERE E LO CONVERTO IN BINARIO -'-- ALLA FINE AVRO' UNA STRINGONA BINARIA -----------
if byteletto < 128 then
stringabinaria = stringabinaria &"0"
else
stringabinaria = stringabinaria &"1"
byteletto = byteletto - 128
end if
if byteletto < 64 then
stringabinaria = stringabinaria &"0"
else
stringabinaria = stringabinaria &"1"
byteletto = byteletto - 64
end if
if byteletto < 32 then
stringabinaria = stringabinaria &"0"
else
stringabinaria = stringabinaria &"1"
byteletto = byteletto - 32
end if
if byteletto < 16 then
stringabinaria = stringabinaria &"0"
else
stringabinaria = stringabinaria &"1"
byteletto = byteletto - 16
end if
if byteletto < 8 then
stringabinaria = stringabinaria &"0"
else
stringabinaria = stringabinaria &"1"
byteletto = byteletto - 8
end if
if byteletto < 4 then
stringabinaria = stringabinaria &"0"
else
stringabinaria = stringabinaria &"1"
byteletto = byteletto - 4
end if
if byteletto < 2 then
stringabinaria = stringabinaria &"0"
else
stringabinaria = stringabinaria &"1"
byteletto = byteletto - 2
end if
if byteletto < 1 then
stringabinaria = stringabinaria &"0"
else
stringabinaria = stringabinaria &"1"
byteletto = byteletto - 1
end if
next
for i = 1 to len(stringabinaria)
for ii = 44 to 1 step -1
if mid(stringabinaria,i,len(codici(ii,2))) = codici(ii,2) then
stringanorm = stringanorm & codici(ii,1)
i = i + len(codici(ii,2)) - 1
exit for
end if
next
next
else
'---------------- QUI INVECE COMPRIMO LA STRINGA -------------------
stringanorm = cstr(stringa)
'- OGNI CARATTERE LO SOSTITUISCO CON LA PRIMA COLONNA DELLA MATRICE--
for i = 1 to len(stringanorm)
for ii = 1 to 44
if mid(stringanorm,i,1) = codici(ii,1) then
stringabinaria = stringabinaria & codici(ii,2)
exit for
end if
next
next
' -- AGGIUNGO GLI ZERI PER AVERE UNA STRINGA DI 1 E 0 MULTIPLA DI 8
for i = 1 to 8
if len(stringabinaria) mod 8 <> 0 then
stringabinaria=stringabinaria &"0"
end if
next
' CONVERTO 8 BIT ALLA VOLTA E MI COSTRUISCO LA STRINGA IN VERO BINARIO
for i = 1 to len(stringabinaria) step 8
car=ChrB(AscB(chr(128*cint(mid(stringabinaria,i,1) )+64*cint(mid(stringabinaria,i+1,1))+32*cint(mid(s tringabinaria,i+2,1))+16*cint(mid(stringabinaria,i +3,1))+8*cint(mid(stringabinaria,i+4,1))+4*cint(mi d(stringabinaria,i+5,1))+2*cint(mid(stringabinaria ,i+6,1))+1*cint(mid(stringabinaria,i+7,1)))))
stringabytes = stringabytes & car
Next
end if
if operazione = 1 then funczippa = stringanorm else funczippa = stringabytes
end function
%>
-----------------------------------------------------------------
Questo è l'ultimo file
(B.ASP)
<%
'CALCOLO QUANTI BYTE LA PAGINA HA RICEVUTO
ByteCount = Request.TotalBytes
'VETT_BYTE E' UN VETTORE DI BYTE KE CARICO COL METODO BINARYREAD
dim vett_byte
vett_byte = Request.BinaryRead(ByteCount)
Response.Write funczippa(1,vett_byte)
%>