Du har den rigtige idé om at holde teksten i databasen som rå. Ikke sikker på, hvad alle HTML-entitetsting er til; du burde ikke behøve at gøre det for en databaseindsættelse.
[Den eneste grund til, at jeg kan komme i tanke om, hvorfor du måske forsøger at enheds-afkode indgående input til databasen, ville være, hvis du opdager, at du får tegnreferencer som Š
i dit input til formularindsendelse. Hvis det sker, er det, fordi brugeren indtaster tegn, der ikke findes i den kodning, der bruges af siden med formularen. Denne form for kodning er fuldstændig falsk, fordi du så ikke kan skelne mellem brugeren, der skriver Š
og bogstaveligt talt skrive Š
! Du bør undgå dette ved at bruge UTF-8-kodningen til alle dine sider og indhold, da alle mulige tegn passer i denne kodning.]
Strenge i dit script skal altid være rå tekst uden at undslippe. Det betyder, at du ikke gør noget ved dem, før du udskriver dem i en kontekst, der ikke er almindelig tekst. Så for at sætte dem i en SQL-streng:
$category= trim($_POST['category']);
mysql_query("SELECT * FROM things WHERE category='".mysql_real_escape_string($category)."'");
(eller brug parametriserede forespørgsler for at undgå at skulle undslippe det manuelt.) Når du sætter indhold i HTML:
<input type="text" name="category" value="<?php echo htmlspecialchars($category); ?>" />
(du kan definere en hjælpefunktion med et kortere navn som function h($s) { echo htmlspecialchars($s, ENT_QUOTES); }
hvis du vil skære ned på mængden af at skrive, skal du gøre i skabeloner.)
Og... det er stort set det. Du behøver ikke at behandle strenge, der kommer ud af databasen, da de allerede er rå strenge. Du behøver ikke at behandle inputstrenge(*), bortset fra enhver programspecifik feltvalidering, du vil udføre.
*:godt, undtagen hvis magic_quotes_gpc
er slået til, i hvilket tilfælde du enten skal stripslashes()
alt, der kommer ind fra get/post/cookie, eller min foretrukne mulighed, mislykkes bare med det samme:
if (get_magic_quotes_gpc())
die(
'Magic quotes are turned on. They are utterly bogus and no-one should use them. '.
'Turn them off, you idiot, or I refuse to run. So there!'
);