Assicurati di impostare il double_encode
a false
, altrimenti le stringhe già codificate verranno nuovamente codificate, trasformando &
in &
. Quindi quando vai a visualizzarlo dopo aver usato html_entity_decode
, apparirà come se fosse ancora codificato.
Risultato indesiderato:http://ideone.com/uQxuAM
Utilizzo di htmlentities($string, ENT_QUOTES, 'UTF-8', false);
farà in modo che ciò non accada.
Quindi usa html_entity_decode($string, ENT_QUOTES, 'UTF-8');
per visualizzare il valore.
Tuttavia, MySQL è pienamente in grado di memorizzare i valori decodificati nel database.
Non vorrai mai avere stringhe con codifica htmlentities archiviate nel tuo database. Cosa succede quando vuoi generare un CSV o PDF, inviare un'email o qualsiasi cosa che non sia HTML?
A parte il fatto che devi eseguire il doppio della programmazione della codifica dei dati, aumentando la quantità di dati nel database, quindi devi ancora decodificare l'output, ci sono tonnellate di articoli online che rispondono al motivo per cui non dovresti.
Quindi dovresti solo codificare i valori per visualizzare l'output dei dati risultante in html.
Invece dovresti eseguire l'escape dell'input usando 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) . "')";
o meglio ancora utilizzare dichiarazioni preparate
$stmt = $mysqli->prepare("INSERT INTO links (link) VALUES(?)");
$stmt->bind_param("s", $string);
$stmt->execute();
Quindi formattare l'output come messaggio di successo per visualizzare ciò che è stato effettivamente aggiunto al database.
$html = "<div>Added Link: " . htmlentities($string, ENT_QUOTES, 'UTF-8', false) . "</div>";
Ora non è più necessario utilizzare html_entity_decode
per visualizzare l'html nel browser.