Richtige PHP-Methode zum speichern von Sonderzeichen in der MySQL-DB
Verwendung von PHP, was ist der beste Weg, um spezielle Zeichen (wie die folgenden) in einem MSQUL Datenbank, um zu vermeiden, Injektionen.
« " ' é à ù
Dies ist, wie ich es jetzt tun:
$book_text=$_POST['book_text'];
$book_text=htmlentities($book_text, "ENT_QUOTES");
$query=//DB query to insert the text
Dann:
$query=//DB query to select the text
$fetch=//The fetch of $book_text
$book_text=html_entity_decode($book_text);
Diese Weise, alle die meine der text ist formatiert in HTML-Entitäten. Aber ich denke, das nimmt eine Menge Speicherplatz für Datenbanken. Also, gibt es eine bessere Möglichkeit?
utf8 ist dein Freund
Die
Die
"ENT_QUOTES"
werden muss ENT_QUOTES
(ohne Anführungszeichen), weil es ein PHP vordefinierte Konstanten. Und ich dachte, Sie können es roh in die DB und wenn Sie wollen, um echo Sie verwenden htmlentities
InformationsquelleAutor Antonio Ciccia | 2012-04-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
utf8
Codierung zum speichern dieser Werte.Vermeiden Injektionen verwenden
mysql_real_escape_string()
(oder prepared statements).Schützen aus XSS verwenden
htmlspecialchars
.utf-8 als Tabelle-Spalten' encoding
Sie können nicht mysql_real_escape_string() ist nicht vergleichbar mit vorbereiteten Anweisungen sind. Diese Funktion ist nicht zu vermeiden-Injektionen, und nicht helfen können, gegen Sie allein.
InformationsquelleAutor Botanick
Es klingt wie Ihre Frage kann verallgemeinert werden, um die Handhabung und Lagerung von UTF8, PHP und MySQL.
Sicher vor SQL-Injektionen, sollten Sie die Verwendung von vorbereiteten Anweisungen. Die mysqli und PDO Treiber unterstützen.
Prepared statements werden automatisch zitiert der Fahrer, so brauchen Sie nicht zu kümmern.
Ihre Datenbank-Tabellen erstellt werden sollte mit dem Zeichensatz
utf8
und dieutf8_general_ci
Sortierung. Diese meine.cnf-Einstellungen sicherstellen, dass Ihr MySQL server läuft UTF8 alle durch:Bewusst sein, dass PHP in der Regel nicht bewusst, UTF-8, so sollten Sie darauf achten, entweder eine
iconv
odermbstring
Bibliotheken für die string-Behandlung. Sehen PHPWACT für eine gute übersicht.Stellen Sie sicher, dass der PHP-internen Zeichensatz eingestellt ist unicode
Sollten Sie auch sicherstellen, dass der browser erkennt die Codierung durch senden entweder den richtigen header oder das hinzufügen einer
<meta>
- tag für Zeichensatz.Das sollte es tun.
InformationsquelleAutor jokkedk
ja utf8-Codierung...
außerdem können Sie Vorbereitete Anweisungen, wenn Sie eine Menge sorgen über Injektionen...
http://www.linearchat.co.uk/2011/08/why-prepared-statements-in-mysql-are-a-good-thing/
auch
http://dev.mysql.com/doc/refman/5.0/en/sql-syntax-prepared-statements.html
InformationsquelleAutor Sandeep Rajoria
Ihre Frage ist eine feine Sammlung von Verwechslungen. Sie schaffte es, zu verwirren alles.
Lasst uns versuchen, es zu klären.
Diese sind unvergleichlich Angelegenheiten. Die Speicherung von Sonderzeichen ist eine Sache, und die Vermeidung von Injektionen ist eine andere. völlig anderes.
dies ist am lustigen Teil. obwohl es zu schützen, Ihre Anfragen, es ist eigentlich gar nichts. Denn statt der Konstanten ENT_QUOTES, welcher Wert ist 3, Sie sind mit string, ENT_QUOTES, welcher numerische Wert ist 0, also sind Sie keine fahne.
Aber selbst wenn Sie dieses flag setzen, richtig, es wird nicht automatisch Schutz. Da eine Injektion kann code enthalten, keine besonderen chars.
Vermeiden Sie Injektionen, die Sie Folgen müssen ganze Regeln, nicht eine einfache Funktion "make_my_data_safe()". Es gibt keinen Zauberstab.
Sehen meine Antwort für die details.
Als für die specialchars, ist es einfach. Das einzige problem, dass es KEINE Feste Besondere chars gesetzt. Es gibt verschiedenen Besondere chars für die verschiedenen Umgebungen.
haben Sie Sie benutzen eine andere Formatierung-Regeln für jeden Fall. Verschiedene, nicht ein einziges für alle.
verwenden é à ù chars mit HTML-Sie haben zu setzen Sie die richtigen HTTP-header.
verwenden é à ù mit der Datenbank, müssen Sie, um Ihre Tabelle-Codierung auf utf8 und die Verbindung Codierung in utf 8.
InformationsquelleAutor Your Common Sense