Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PHP MySQL wie man Strings richtig speichert/escapet

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.

Demo:http://ideone.com/8Jo7YA

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.