OK, allora io farei così.
I testi li filtrerei nel seguente modo:
Codice PHP:
// $str è una ipotetica variabile che contiene testi
// passati da una form
$str = $_POST['str'];
// elimino eventuali spazi ad inizio e fine stringa
$str = trim($str);
// eliminio eventuali slash messi da php (dipende
// dalle impostazioni e dalla versione)
$str = stripslashes($str);
// recupero una lista di aratteri da sostituire
$caratteri = get_html_translation_table(HTML_ENTITIES, ENT_QUOTES);
// sostituisco questi caratteri all'interno della mia stringa
$str = strtr($str, $caratteri);
// faccio l'escape di tutti i caratteri "pericolosi"
// prima della INSERT nel DB
$str = mysql_real_escape_string($str);
Ti ripeto, io la funzione nl2br() la userei solo in fase di output dei testi e solo per una migliore comprensibilità del testo in fase di layout.
Per i controlli sui numeri puoi usare la funzione is_numeric.
Codice PHP:
$num = $_POST['num'];
if (!is_numeric($num)) {
// $num non è un numero
} else {
// $num è un numero
}
Con questi metodi ti garantisci un buon controllo sugli input, per quanto dovresti sempre implementare delle regexp se volessi fare dei controlli ancora migliori.
La questione degli apici è semplice: in un campo di input non filtrato, un apice potrebbe essere un buon metodo per veicolare un attacco di tipo SQL INJECTION (ad esempio).
Per essere sicuri che questo non vada in porto, basterebbe andare a fare l'escape degli apici, al fine di trasformarli in una stringa semplice e quindi renderli innocui.
Un ultima cosa: io ti ho scritto questi controlli in procedurale perché mi andava solo di mostrarti dei metodi di lavoro.
Mettere tutti questi controlli in funzioni sarà il tuo prossimo obiettivo, al fine di avere poco codice e completamente riciclabile.