Preciso anche io, che mi ero informato perché pensavo che Symon83 avesse trovato dei problemi nell'usarle, o peggio ancora che non gli funzionassero a dovere!

@*pragma
Le funzioni sono relativamente semplici.
La prima serve per validare il testo, e opportunamente modificate per contare di quanti caratteri è composto.
Sfrutta semplicemente una espressione regolare per controllare che ci siano solo alcuni caratteri e non altri (come le parentesi angolari, per esempio).
Al posto di mettersi a fare il decode degli elementi HTML, li blocco e restituisco un messaggio di errore!
La funzione è come segue:
Codice PHP:
function validaTesto($str){
  return (bool) 
preg_match("^[[:alnum:]\.\,\;\:\!\?\-\_\(\)\[\]\'\"\»\«]+$^"$str);

La seconda funzione invece, che uso dopo la validazione del testo, sostituisce tutti i caratteri speciali (lettere accentate, caratteri particolari come l'ampersand eccetera) in caratteri XHTML friendly.
In questo modo, si evitano problemi di compatibilità tra il charset di MySQL e quello della pagina HTML, in più si va a fare l'escape su tutti i caratteri tipo il % e gli apici, per evitare ulteriori problemi.
Codice PHP:
function filtraTesto($str){
    
$str stripslashes($str);
    
$caratteri get_html_translation_table(HTML_ENTITIESENT_QUOTES);
    
$str strtr($str$caratteri);    
    
$str mysql_real_escape_string($str);
    
    return 
$str;

Se vuoi imporre un limite minimo e massimo ai caratteri presenti nel testo da filtrare (tipo per un controllo di validità sulle password), puoi modificare la funzione come segue:

Codice PHP:
function validaTesto($str$min$max){
  return (bool) 
preg_match("^[[:alnum:]\.\,\;\:\!\?\-\_\(\)\[\]\'\"\»\«]{$min$max}+$^"$str);
}
function 
filtraTesto($str){
    
$str stripslashes($str);
    
$caratteri get_html_translation_table(HTML_ENTITIESENT_QUOTES);
    
$str strtr($str$caratteri);    
    
$str mysql_real_escape_string($str);
    
    return 
$str;
}

if (!
validaTesto($testo_da_controllare1020)) {
echo 
"Spiacente, hai inserito dei caratteri non voluti, oppure la stringa non è di minimo 10 caratteri e massimo 20";
exit;

// poi filtro per il DB
$testo_da_controllare filtraTesto($testo_da_controllare); 
Ed il gioco è fatto.

Ultimo consiglio: se siete un minimo esperti di attacchi hacking, vi consiglio di fare tutta una serie di test per capire se in qualche modo, queste funzioni presentano falle.