Voici la règle générale.
Vous voulez que vos variables soient des représentations propres des données. Autrement dit, si vous essayez de stocker le nom de famille d'une personne nommée "O'Brien", alors vous ne le faites certainement pas voulez ceux-ci :
O'Brien
O\'Brien
.. parce que, eh bien, ce n'est pas son nom :il n'y a ni esperluette ni barre oblique. Lorsque vous prenez cette variable et que vous la produisez dans un contexte particulier (par exemple :insérer dans une requête SQL ou imprimer sur une page HTML), cela c'est quand vous le modifiez.
$name = "O'Brien";
$sql = "SELECT * FROM people "
. "WHERE lastname = '" . mysql_real_escape_string($name) . "'";
$html = "<div>Last Name: " . htmlentities($name, ENT_QUOTES) . "</div>";
Vous ne voulez jamais avoir des htmlentities
-chaînes codées stockées dans votre base de données. Que se passe-t-il lorsque vous souhaitez générer un CSV ou un PDF, ou tout ce qui ne l'est pas HTML ?
Gardez les données propres et ne vous échappez que pour le contexte spécifique du moment.