[ASP] Controllare il testo inserito in Textarea

seranto

Nuovo Utente
7 Nov 2006
12
3
3
Verona
Buongiorno a tutti.

Premessa:
utilizzo un Form di contatto su pagina html che invia i dati inseriti dal visitatore ad una pagina di controllo scritta in asp classico, dove un codice verifica la compilazione dei campi obbligatori e l’accettazione dell’Informativa sul trattamento dati. Quando è tutto ok al visitatore appare un riepilogo di quanto inserito con la conferma dell’invio dei dati, mentre se qualcosa non ha funzionato appare un altro tipo di messaggio con dettagli sul problema.

Quesito:
nel campo Textarea del Form, dove generalmente si può scrivere abbastanza liberamente, è possibile un controllo approfondito sul testo con Classic Asp (niente Javascript)?
Ad esempio per controllare la lingua utilizzata, identificare link attivi o parole inopportune, ecc.
A questo controllo però dovrebbe poter seguire un blocco dell’invio (no cose tipo asterischi che sostituiscono le BadWords), rimandando ad una pagina adeguata contenente la descrizione del problema.

Grazie, Sergio
 

seranto

Nuovo Utente
7 Nov 2006
12
3
3
Verona
...intercettare la lingua non credo sia possibile, ci si potrebbe lavorare su per quanto riguarda le badwords e link.
Che ne pensi?
Grazie per l'intervento!
In effetti per quanto riguarda l'intercettazione della lingua era più che altro una curiosità, conviene lavorare sul riconoscimento della lingua del browser del visitatore, ecc. ecc.

Mi interessa maggiormente invece l'intercettazione di link attivi: indirizzi email o link inseriti allo scopo di far scaricare file inopportuni.
Ci tengo a precisare comunque che queste non sono necessità, sono soprattutto mie curiosità!

Utilizzo abitualmente una funzione per il controllo del formato degli indirizzi email, magari non ha una grande utilità ma l'ho sfruttata, doppiando il suo codice in una seconda funzione che ho provato a modificare per vedere se riesco ad effettuare un controllo sulle parole inserite. La sto sperimentando in locale ed a volte funziona a volte no. Sicuramente ho commesso qualche bestialità nella modifica, o meglio ancora non è la strada più corretta!
Se posso proverei a postare il codice della funzione (sono poche righe).

Grazie
 
Ultima modifica:

seranto

Nuovo Utente
7 Nov 2006
12
3
3
Verona
Grazie.
Sono riuscito a far funzionare la funzione che stavo testando! Non sarà un capolavoro ma è semplice, e mi blocca, proprio come volevo, l'invio dal Form di messaggi contenenti sia collegamenti ipertestuali che qualsiasi altra parola indico di controllare, rimandando il visitatore ad una pagina esplicativa.
Grazie comunque per avermi letto!
Sergio
 

seranto

Nuovo Utente
7 Nov 2006
12
3
3
Verona
difficile, ci sto provano... potresti pubblicare lo script?
usi InStr?
lo script che stavo testando intercetta il contenuto, lo cancella ma non so come far bloccare il tutto...
esempio: http://www.caprioli.info/fitness/filtro.asp
Il Form è in una pagina html e punta alla pagina di controllo in asp nella quale (dopo il tag di chiusura) ho inserito queste funzioni:
<%
Function CheckMessaggio(str)

Dim testomessaggio

testomessaggio = instr(str, "@") or instr(str, "www") or instr(str, "WWW") or instr(str, "http") or instr(str, "HTTP") or instr(str, "PAPERINO") or instr(str, "TOPOLINO") or instr(str, "Paperino") or instr(str, "Topolino")

if (testomessaggio > 0) and (testomessaggio < len(str)) or (testomessaggio > len(str)) then
CheckMessaggio = false
exit function
end if

CheckMessaggio = true

End Function


Function CheckEmail(str)

Dim i, j, first, last, char


i = instr(str, "@")
if (i > 0) and (i < len(str)) then
first = left(str, i - 1)
last = mid(str, i+1, len(str))
else
CheckEmail = false
exit function
end if

if (len(first) = 0) then
CheckEmail = false
exit function
end if

i = instrrev(last, ".")

if len(mid(last,1,i)) = 0 then
CheckEmail = false
exit function
end if

j = len(last) - i
if (j <= 1) or (j >= 15) then
CheckEmail = false
exit function
end if

i = 0
do until (i = len(first))
i = i + 1
char = mid(first, i, 1)

if (asc(char) <> 45) and (asc(char) <> 46) and _
(asc(char) < 48 or asc(char) > 57) and _
(asc(char) < 65 or asc(char) > 90) and _
(asc(char) <> 95) and _
(asc(char) < 97 or asc(char) > 122) then

CheckEmail = false
exit function
end if
loop

i = 0
do until i = len(last)
i = i + 1
char = mid(last, i, 1)

if (asc(char) <> 45) and (asc(char) <> 46) and _
(asc(char) < 48 or asc(char) > 57) and _
(asc(char) < 65 or asc(char) > 90) and _
(asc(char) <> 95) and _
(asc(char) < 97 or asc(char) > 122) then

CheckEmail = false
exit function
end if
loop

CheckEmail = true

End Function
%>

Nel body della stessa pagina di controllo ho inserito invece questo codice (ho omesso alcune righe riguardanti solo le impostazioni per l'invio dell'email):

<%

On error resume next

Dim campo
strHost = "localhost"

campo = ""

camponome = trim(Request.Form("nome"))
campoemail = trim(Request.Form("email"))
campomessaggio = trim(Request.Form("messaggio"))
campomessaggio = Replace(campomessaggio, vbcrlf, "<br />")

if camponome = "" then
campo = campo & ". . . indicare un nome o uno pseudonimo<br />" & ""
end if

if campoemail = "" then
campo = campo & ". . . indicare un indirizzo Email valido<br />" & ""
else
'controllo la correttezza base della formalit dell'indirizzo e-mail
if CheckEmail(campoemail) = false then
campo = campo & ". . . rivedere il formato dell'indirizzo Email, non sembra corretto<br />" & ""
end if
end if

if campomessaggio = "" then
campo = campo & ". . . scrivere un testo nel campo del messaggio<br />" & ""
else
if CheckMessaggio(campomessaggio) = false then
campo = campo & "<br />. . . si prega di ricontrollare il testo inserito nell'area del messaggio, potreste aver inserito parole o contenuti non accettati!" & ""
end if
end if

if Replace(campo,"§","") = "" then

' qui il codice per le impostazioni di invio del messaggio
' Set Mail = Server............. ecc. ecc.
' .........
' .........
' .........
' .........
' .........
' Se tutto funziona
response.write "<p>Email inviata</p>"
response.write "<p>Riepilogo di quanto inviato</p>" & "<p>Nome:<br />" & camponome & VbCrLf & "<br /><br />Messaggio:<br />" & campomessaggio & "</p>" & VbCrLf & VbCrLf

else

response.write "<h5>Sono stati rilevati degli errori</h5>"
response.write "<p>Si prega di completare queste operazioni:</p><p>" & Replace(Replace(campo, "", "<br />"),"","</p>")
response.write "<p>Email non inviata!</p>"

end if

' set Mail = nothing

%>

Quando avrò un po' di tempo amplierei la funzione per sistemare il problemino del formato maiuscolo o minuscolo, ho già un'idea al riguardo.
Volendo poi credo si possa migliorare ancora.


Sergio