Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Formattare i dati dei form

Come comportarsi nel caso di testo proveniente da moduli
Come comportarsi nel caso di testo proveniente da moduli
Link copiato negli appunti

Introduzione

Sviluppando applicazioni web dovremo interagire spesso con form web e con i relativi tipi di campi (text, textarea, select, Upload con Php ecc.) ognuno dei quali necessita di un trattamento particolare.

Iniziamo l'articolo analizzando il trattamento necessario ai campi di tipo testo: text, textarea e password.

Solitamente questi campi vengono usati per testi che verranno mostrati in output su di una pagina html, quindi dovremo eseguire dei passaggi per evitare di mostrare contenuto dannoso o non formattato correttamente. Per contenuto dannoso si intende del codice javascript che eseguito lato client provoca effetti diretti (sfruttando bug conosciuti dei browser) oppure indiretti (ad esempio aprire una pagina web inserendo nell'indirizzo il contenuto di un cookie).

Una pagina web per essere visualizzata correttamente necessita di una formattazione adeguata dove ad esempio i caratteri di nuova linea (n) sono sostituiti dai tag <br>.

I passaggi principali

I passaggi standard da eseguire quindi sono i seguenti:

  • Sostituzione di caratteri non supportati con la forma &nome_carattere; (ad esempio à per à)
  • Introduzione di tag <br> in presenza di caratteri di nuova linea (per le textarea)
  • Eliminazione di codice javascript
  • Eliminazione di tag html

La sostituzione dei caratteri esterni al set predefinito dell'html con le forme "ad hoc" viene eseguita in php con due funzioni: htmlspecialchars() e htmlentities().

Entrambe prendono come parametro la stringa da convertire ma sostituiscono range di caratteri diversi. La prima sostituisce solo i caratteri "speciali" cioè <, >, &, " mentre la seconda sostituisce anche caratteri come le lettere accentate.

È consigliabile utilizzare la seconda funzione soprattutto quando si ha molto a che fare con un'utenza straniera che potrebbe non avere tra i caratteri "normali" le nostre lettere accentate.

Un esempio pratico

Un esempio:

<?php

$testo_non_html = "che bella giornata è questa qua, domani sarà anche meglio :->";

$html_con_htmlspecialchars = htmlspecialchars($stringa_non_html);

/* la stringa sarà: che bella giornata è questa, domani sarà anche meglio :->*/

$html_con_htmlentities = htmlentities($stringa_non_html);

/* la stringa sarà: che bella giornata è questa qua, domani sarà anche meglio :-> */
?>

Se provate a rinominare un file plain text (ad esempio i file .txt) in .html e aprirli con un editor, probabilmente noterete che il testo perde la sua formattazione e viene visualizzato tutto su una sola linea. Questo è dovuta all'interpretazione che il carattere di nuova linea (n) ha nei due formati: nel formato html ha la sola funzione di formattare il codice.

Per formattare anche il testo a video, dobbiamo inserire dei tag <br>, a questo fine possiamo usare la funzione nl2br() che aggiunge un tag di break ad ogni carattere di nuova linea. Da notare inoltre che questa funzione aggiunge un tag xhtml; detto in parole povere aggiunge <br /> invece del semplice <br>.

Un altro esempio:

<?php

$stringa_su_piu_righe_plain = "Questa è la prima riga
questa è la seconda
e questa è la terza";

$stringa_su_piu_righe_html = nl2br($stringa_su_piu_righe_plain);

/* La stringa sarà:
Questa è la prima riga<br />
questa è la seconda<br />
e questa è la terza<br />*/
?>

Il codice Javascript

Il codice javascript è potenzialmente pericoloso perchè viene eseguito lato client e può quindi provocare un danno ogni volta che viene eseguito da un computer collegato alla pagina con il codice in questione. Per eliminare il pericolo, ci possiamo affidare alla funzione strip_tags() che provvede ad eliminare tutti i tag presenti in un testo lasciando quelli elencati nel suo secondo parametro:

<?php
$stringa = "Quella <b>casa</b> è molto <i>bella</i><br />";

$stringa_senza_tag = strip_tags($stringa); // Quella casa è molto bella
$stringa_con_qualche_tag = strip_tags($stringa, ?<b>?); // Quella casa è molto bella

?>

Come già accennato precedentemente è sempre consigliabile eliminare il contenuto di codice html per la possibile presenza di codice javascript nei normali tag (ad esempio in <a> con onclick).

Ti consigliamo anche