Oto ogólna zasada.
Chcesz, aby zmienne były czystymi reprezentacjami danych. Oznacza to, że jeśli próbujesz zapisać nazwisko osoby o imieniu „O'Brien”, zdecydowanie nie chcesz te:
O'Brien
O\'Brien
.. bo cóż, to nie jest jego imię:nie ma w nim ani znaku ampersand, ani ukośnika. Kiedy weźmiesz tę zmienną i wypiszesz ją w określonym kontekście (np.:wstawiasz do zapytania SQL lub drukujesz na stronie HTML), to jest wtedy, gdy go zmodyfikujesz.
$name = "O'Brien";
$sql = "SELECT * FROM people "
. "WHERE lastname = '" . mysql_real_escape_string($name) . "'";
$html = "<div>Last Name: " . htmlentities($name, ENT_QUOTES) . "</div>";
Nigdy nie chcesz mieć htmlentities
-zakodowane ciągi przechowywane w Twojej bazie danych. Co się dzieje, gdy chcesz wygenerować plik CSV, PDF lub cokolwiek, czego nie? HTML?
Utrzymuj dane w czystości i unikaj tylko konkretnego kontekstu w danej chwili.