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

Geben Sie Text und Sonderzeichen und MySQL ein

Sie haben die richtige Idee, den Text in der Datenbank roh zu halten. Ich bin mir nicht sicher, wofür das ganze HTML-Entity-Zeug ist; Sie sollten dies für eine Datenbankeinfügung nicht tun müssen.

[Der einzige Grund, warum ich mir vorstellen kann, warum Sie versuchen könnten, eingehende Eingaben für die Datenbank zu decodieren, wäre, wenn Sie feststellen, dass Sie Zeichenreferenzen wie Š erhalten in Ihrer Formularübermittlungseingabe. Wenn das passiert, liegt es daran, dass der Benutzer Zeichen eingibt, die nicht in der Codierung vorhanden sind, die von der Seite mit dem Formular verwendet wird. Diese Form der Kodierung ist völlig falsch, da Sie dann nicht unterscheiden können, ob der Benutzer Š eingibt und buchstäblich Š eingeben ! Sie sollten dies vermeiden, indem Sie für alle Ihre Seiten und Inhalte die UTF-8-Kodierung verwenden, da jedes mögliche Zeichen in diese Kodierung passt.]

Zeichenfolgen in Ihrem Skript sollten immer Rohtext ohne Escapezeichen sein. Das bedeutet, dass Sie nichts mit ihnen tun, bis Sie sie in einen Kontext ausgeben, der kein Klartext ist. Um sie also in einen SQL-String einzufügen:

$category= trim($_POST['category']);
mysql_query("SELECT * FROM things WHERE category='".mysql_real_escape_string($category)."'");

(oder verwenden Sie parametrisierte Abfragen, um ein manuelles Escapezeichen zu vermeiden.) Beim Einfügen von Inhalten in HTML:

<input type="text" name="category" value="<?php echo htmlspecialchars($category); ?>" />

(Sie können eine Hilfsfunktion mit einem kürzeren Namen wie function h($s) { echo htmlspecialchars($s, ENT_QUOTES); } definieren wenn Sie den Schreibaufwand in Vorlagen reduzieren möchten.)

Und ... das ist so ziemlich alles. Sie müssen keine Zeichenfolgen verarbeiten, die aus der Datenbank stammen, da es sich bereits um rohe Zeichenfolgen handelt. Sie müssen keine Eingabezeichenfolgen (*) verarbeiten, abgesehen von anwendungsspezifischen Feldvalidierungen, die Sie durchführen möchten.

*:gut, außer wenn magic_quotes_gpc eingeschaltet ist, in diesem Fall müssen Sie entweder stripslashes() alles, was von get/post/cookie kommt, oder, meine bevorzugte Option, einfach sofort scheitern:

if (get_magic_quotes_gpc())
    die(
        'Magic quotes are turned on. They are utterly bogus and no-one should use them. '.
        'Turn them off, you idiot, or I refuse to run. So there!'
    );