Ecco la regola generale.
Vuoi che le tue variabili siano rappresentazioni pulite dei dati. Cioè, se stai cercando di memorizzare il cognome di qualcuno chiamato "O'Brien", allora sicuramente non voglio questi:
O'Brien
O\'Brien
.. perché, beh, non è il suo nome:non ci sono e commerciali o tagli. Quando prendi quella variabile e la emetti in un contesto particolare (ad esempio:inserisci in una query SQL o stampa su una pagina HTML), quella è quando lo modifichi.
$name = "O'Brien";
$sql = "SELECT * FROM people "
. "WHERE lastname = '" . mysql_real_escape_string($name) . "'";
$html = "<div>Last Name: " . htmlentities($name, ENT_QUOTES) . "</div>";
Non vuoi mai avere htmlentities
-stringhe codificate memorizzate nel database. Cosa succede quando vuoi generare un CSV o PDF o qualsiasi cosa che non sia HTML?
Mantieni i dati puliti ed esci solo per il contesto specifico del momento.