Sørg for at indstille double_encode
til false
, ellers vil allerede kodede strenge blive kodet igen ved at dreje &
ind i &
. Når du derefter går for at vise det efter at have brugt html_entity_decode
, vil det se ud, som om det stadig var kodet.
Uønsket resultat:http://ideone.com/uQxuAM
Brug af htmlentities($string, ENT_QUOTES, 'UTF-8', false);
vil sikre, at dette ikke sker.
Brug derefter html_entity_decode($string, ENT_QUOTES, 'UTF-8');
for at vise værdien.
MySQL er dog fuldt ud i stand til at gemme de afkodede værdier i databasen.
Du ønsker aldrig at have htmlentities-kodede strenge gemt i din database. Hvad sker der, når du vil generere en CSV eller PDF, sende en e-mail eller noget, der ikke er HTML?
Bortset fra det faktum, at du skal udføre dobbelt programmering af kodning af data, øge mængden af data i databasen, og så stadig skal afkode outputtet, er der tonsvis af artikler online, der svarer på, hvorfor du ikke burde.
Så du behøver kun at kode værdierne for at vise det resulterende dataoutput i html.
I stedet bør du undslippe input ved hjælp af mysqli_real_escape_string
$string = '<a href="/path/to/file?a=b&foo=bar#baz">My Link</a>';
$sql = "INSERT INTO links (link)"
. "VALUES(" . mysqli_real_escape_string($string) . "')";
eller endnu bedre brug forberedte udsagn
$stmt = $mysqli->prepare("INSERT INTO links (link) VALUES(?)");
$stmt->bind_param("s", $string);
$stmt->execute();
Derefter for at formatere output som en succesmeddelelse for at vise, hvad der faktisk blev tilføjet til databasen.
$html = "<div>Added Link: " . htmlentities($string, ENT_QUOTES, 'UTF-8', false) . "</div>";
Nu er der ingen grund til at bruge html_entity_decode
for at få html'en gengivet i browseren.