[ASP] Controllare il testo inserito in Textarea

seranto

Nuovo Utente
7 Nov 2006
15
4
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
 
...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:
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
 
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
 
Nel caso possa interessare ad altri posto il codice definitivo.
Non sono un professionista quindi potrebbero affiorare malfunzionamenti dovuti ad errori in cui non ho ancora avuto l'occasione di imbattermi.
La parte di codice che posto qui è ridotta rispetto l’originale dove sono presenti più campi ed altri controlli, ho fatto il possibile per limitarmi alla parte riguardante quanto viene inserito nella textarea.

<body>

<%
On error resume next

Dim Mail
Dim campo
strHost = "localhost"

campo = ""

campomessaggio = trim(Request.Form("messaggio"))
campomessaggio = Replace(campomessaggio, vbcrlf, "<br />")
' la riga successiva permette la conversione in lettere maiuscole di tutto il testo inserito, consentendo un miglior utilizzo della Funzione che effettua il controllo sulle parole (si risparmiano doppioni inutili!) ed al tempo stesso mi consente di non toccare il campo originale (campomessaggio) utile per essere richiamato in un'eventuale pagina di anteprima o per l’inserimento nel corpo della email (almeno questo sarebbe il mio intento!)
campofiltro = UCase(campomessaggio)

if campomessaggio = "" then
campo = campo & ". . . manca il testo del messaggio<br />" & ""
else
'controllo la presenza di testo o parole non accettabili
if CheckMessaggio(campofiltro) = false then
campo = campo & ". . . sono state inserite parole non ammesse dal sistema<br />" & ""
end if
end if

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

' di seguito inserisco le impostazioni per il Server Mail
' Set Mail = Server.CreateObject("Persits.MailSender")
' .......... .......... ..........
' .......... .......... ..........
' Mail.Send

response.write "Testo del messaggio inviato correttamente: <br />" & campomessaggio & VbCrLf

else

response.write "Sono stati rilevati degli errori<br />"
response.write "Completare o verificare queste operazioni: <br />" & Replace(Replace(campo, "", ""),"","")
response.write "Email non inviata!"

end if

' set Mail = nothing

%>

</body>
</html>
<%
Function CheckMessaggio(str)

Dim testomessaggio
' qui sotto credo si possano inserire molte parole anche se non so quante di preciso, di quelle che interessano a me finora ne ho inserite una sessantina e al momento tutto funziona egregiamente
testomessaggio = instr(str, "WWW") or instr(str, "HTTP") or instr(str, "BLU") or instr(str, "ROSSO")

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

CheckMessaggio = true

End Function
%>
-----------------------------------------
OK, grazie e scusate per gli eventuali errori di cui potrei non essermi ancora reso conto!
 
  • Like
Reactions: Paolo69

Discussioni simili