Ето общото правило.
Искате вашите променливи да бъдат чисти представяния на данните. Тоест, ако се опитвате да съхраните фамилното име на някой на име "О'Брайън", тогава определено не искам тези:
O'Brien
O\'Brien
.. защото, добре, това не е името му:в него няма амперсанди или наклонени черти. Когато вземете тази променлива и я изведете в определен контекст (напр.:вмъкнете в SQL заявка или отпечатате в HTML страница), това е, когато го промените.
$name = "O'Brien";
$sql = "SELECT * FROM people "
. "WHERE lastname = '" . mysql_real_escape_string($name) . "'";
$html = "<div>Last Name: " . htmlentities($name, ENT_QUOTES) . "</div>";
Никога не искате да имате htmlentities
-кодирани низове, съхранявани във вашата база данни. Какво се случва, когато искате да генерирате CSV или PDF, или нещо, което не е HTML?
Поддържайте данните чисти и избягвайте само за конкретния контекст на момента.