Stellen Sie sicher, dass Sie double_encode
festlegen auf false
, andernfalls werden bereits codierte Zeichenketten erneut codiert, indem &
umgewandelt wird in &
. Wenn Sie es dann anzeigen, nachdem Sie html_entity_decode
verwendet haben , wird es so aussehen, als wäre es noch verschlüsselt.
Unerwünschtes Ergebnis:http://ideone.com/uQxuAM
Verwendung von htmlentities($string, ENT_QUOTES, 'UTF-8', false);
wird dafür sorgen, dass dies nicht passiert.
Verwenden Sie dann html_entity_decode($string, ENT_QUOTES, 'UTF-8');
um den Wert anzuzeigen.
MySQL ist jedoch vollständig in der Lage, die decodierten Werte in der Datenbank zu speichern.
Sie möchten niemals htmlentities-codierte Strings in Ihrer Datenbank gespeichert haben. Was passiert, wenn Sie eine CSV- oder PDF-Datei generieren, eine E-Mail senden oder etwas anderes als HTML möchten?
Abgesehen von der Tatsache, dass Sie die Programmierung der Datencodierung verdoppeln müssen, die Datenmenge in der Datenbank erhöhen und dann immer noch die Ausgabe decodieren müssen, gibt es unzählige Artikel online, die beantworten, warum Sie dies nicht tun sollten.
Sie sollten also immer nur die Werte für die Anzeige der resultierenden Datenausgabe in HTML codieren müssen.
Stattdessen sollten Sie die Eingabe mit mysqli_real_escape_string
maskieren
$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) . "')";
oder noch besser vorbereitete Anweisungen verwenden
$stmt = $mysqli->prepare("INSERT INTO links (link) VALUES(?)");
$stmt->bind_param("s", $string);
$stmt->execute();
Formatieren Sie dann die Ausgabe als Erfolgsmeldung, um anzuzeigen, was tatsächlich zur Datenbank hinzugefügt wurde.
$html = "<div>Added Link: " . htmlentities($string, ENT_QUOTES, 'UTF-8', false) . "</div>";
Jetzt muss html_entity_decode
nicht mehr verwendet werden damit das HTML im Browser gerendert wird.