Okej, några kommentarer:
1. Funktionen htmlentities har inget som helst att göra med SQL injections.
2. Visst, man ska alltid skydda sig mot SQL injections.
Har du magicquotes satt till ON, så sköts det automatiskt. Det magicquotes gör är att det lägger till escapetecken på lämpliga ställen i alla texter som tas emot via GET och POST och så vidare. I detta fall kan du skriva en SQL-fråga liknande det här:
$query = "SELECT * FROM MyTable WHERE MyField = '" . $_GET["test"] . "'";
utan att du behöver oroa dig för SQL injections. Har du magicquotes satt till OFF så blir det istället:
$query = "SELECT * FROM MyTable WHERE MyField = '" . mysql_escape_string( $_GET["test"] ) . "'";
för att du ska skydda dig mot SQL injections.
Magicquotes kan också vara ett bekymmer om man ska skriva något som tas emot exempelvis via POST till en textfil eller liknande. Magicquotes lägger som sagt till escapetecken (=backslash) på ställen som anses lämpligt (innan apostrofer, citattecken m.m.). Det fungerar bra så länge du skriver till databas, men om du ska skriva till textfil så kommer även escapetecknen med i filen, om jag inte missminner mig. Och detta vill man ju sällan. För att dessa tecken inte ska komma med i din fil kan du använda funktionen stripslashes på texten innan den skrivs till filen, typ:
$minVariabelMedTextSomSkaSkrivasTillFilen = stripslashes( $_POST["test"] );
Om, och endast om, magicquotes är satt till ON. Annars blir det bara:
$minVariabelMedTextSomSkaSkrivasTillFilen = $_POST["test"];
3. När du ska skriva text till webbläsaren, och du inte vill att eventuell htmlkod ska tolkas som just htmlkod så använder du funktionen htmlentities på texten innan.
Gör man det så kommer även htmlkoden att visas som vanlig text.
Exempel:
print( "<br>" );
kommer att skriva ut en radbrytning, eller hur? Medan
print( htmlentities( "<br>" ) );
kommer att skriva ut texten "<br>" (minus citattecknen då, såklart).