Se till att du ställer in double_encode
till false
, annars kommer redan kodade strängar att kodas igen, genom att vrida &
till &
. Sedan när du går för att visa den efter att ha använt html_entity_decode
, kommer det att se ut som om det fortfarande var kodat.
Oönskat resultat:http://ideone.com/uQxuAM
Använder htmlentities($string, ENT_QUOTES, 'UTF-8', false);
kommer att se till att detta inte kommer att hända.
Använd sedan html_entity_decode($string, ENT_QUOTES, 'UTF-8');
för att visa värdet.
MySQL är dock fullt kapabel att lagra de avkodade värdena i databasen.
Du vill aldrig ha htmlentities-kodade strängar lagrade i din databas. Vad händer när du vill skapa en CSV eller PDF, skicka ett e-postmeddelande eller något annat som inte är HTML?
Bortsett från det faktum att du måste utföra dubbel programmering för att koda data, öka mängden data i databasen, och sedan fortfarande behöva avkoda utdata, finns det massor av artiklar online som svarar på varför du inte borde.
Så du ska bara behöva koda värdena för att visa den resulterande datautgången i html.
Istället bör du undkomma inmatningen med 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 ännu hellre använd förberedda uttalanden
$stmt = $mysqli->prepare("INSERT INTO links (link) VALUES(?)");
$stmt->bind_param("s", $string);
$stmt->execute();
Sedan för att formatera utdata som ett framgångsmeddelande för att visa vad som faktiskt lades till i databasen.
$html = "<div>Added Link: " . htmlentities($string, ENT_QUOTES, 'UTF-8', false) . "</div>";
Nu finns det ingen anledning att använda html_entity_decode
för att få HTML-koden renderad i webbläsaren.