La funzione si chiama mysql_real_escape_string(), non mysql_real_escape().

Per il resto, io faccio abitualmente così:

La pagina che riceve i dati e deve elaborarli e inserirli nel database, li recupera dall'array superglobale ($_GET o $_POST) facendo il trim e lo stripslashes:

$var = trim(stripslashes($_POST['var']));

Poi forza i dati che devono essere numeri interi (tipici gli ID) facendo il casting:

(int) $id = trim(stripslashes($_POST['id']));

Infine esegue la query (update o insert) usando per tutti i valori che devono essere stringhe la funzione mysql_real_escape_string():

$sql = "UPDATE tabella SET nome = '".mysql_real_escape_string($nome)."' WHERE id = 1";

Il database, le tabelle e le pagine XHTML che visualizzano i dati sono tutti creati usando la codifica UTF-8. Questo permette di inserire i caratteri speciali senza doverli convertire in entità HTML. Nella fattispecie:

1. Le pagine XHTML sono salvate con la codifica UTF-8 (è fondamentale!) e hanno il meta tag che specifica il charset impostato su UTF-8. Molti editor di testo salvano i file in automatico usando la codifica ASCII, Windows-1252 o ISO-8859-1 (Latin1). Quindi è necessario controllare la codifica usata dal proprio editor.
2. Il database e le tabelle sono creati esplicitamente forzando il character set e la collation ad essere rispettivamente utf8 e utf8_general_ci. Ad es.:

$sql = "CREATE DATABASE IF NOT EXISTS nomedb CHARACTER SET utf8 COLLATE utf8_general_ci";

UTF-8 permette l'uso di milioni di caratteri senza ricorrere alle entità HTML.
Quando devo visualizzare dei record nelle pagine XHTML, utilizzo per tutti i valori che sono stringhe la funzione htmlspecialchars($stringa,ENT_NOQUOTES), che converte solo i caratteri \, &, < e >, lasciando inalterati gli altri (che UTF-8 riconosce tranquillamente).

Per il passaggio di dati tra il form di una pagina e un'altra pagina, il procedimento è analogo:
la pagina che riceve i dati effettua un trim e uno stripslashes per ripulire i valori da spazi prima e dopo e da backslash di escaping. Questo fa in modo che lo script funzioni indipendentemente da come sono impostate le "magic quotes" nel file php.ini per gli array POST, GET e COOKIES.

Questo è ovviamente quello che faccio io. Spero di esserti stato utile.