Heim > Artikel > Backend-Entwicklung > PHP implementiert Code zur Verarbeitung eingegebener Escape-Zeichen
In diesem Artikel wird hauptsächlich der Code für die Verarbeitung von Eingabe-Escape-Zeichen in PHP vorgestellt. Freunde, die ihn benötigen, können sich darauf beziehen
Nehmen wir zunächst eine Funktion, die erst kürzlich in WordPress 3.6 eingeführt wurde
/** * Add slashes to a string or array of strings. * * This should be used when preparing data for core API that expects slashed data. * This should not be used to escape data going directly into an SQL query. * * @since 3.6.0 * * @param string|array $value String or array of strings to slash. * @return string|array Slashed $value */ function wp_slash( $value ) { if ( is_array( $value ) ) { foreach ( $value as $k => $v ) { if ( is_array( $v ) ) { $value[$k] = wp_slash( $v ); } else { $value[$k] = addslashes( $v ); } } } else { $value = addslashes( $value ); } return $value; }
Erklären Sie zunächst eine in PHP integrierte Funktion: get_magic_quotes_gpc()
Die Funktion dieser Funktion besteht darin, den Wert der Option magic_quotes_gpc in PHP abzurufen. ini-Einstellung.
Wenn der Wert der Option magic_quotes_gpc On ist, fügt der PHP-Parser automatisch das Escape-Zeichen „“ zu den Daten aus Post, Get und Cookie hinzu, um sicherzustellen, dass diese Daten keine Probleme im Programm verursachen, insbesondere bei Datenbankanweisungen aufgrund eines fatalen Fehlers. Wenn
aktiviert ist, werden Zeichen wie einfache Anführungszeichen ('), doppelte Anführungszeichen ("), Backslashes () und NUL (NULL-Zeichen) mit Backslashes versehen, andernfalls müssen sie manuell verarbeitet werden. Addslashes()
gibt 1 zurück, wenn der magic_quotes_gpc-Wert „On“ ist, andernfalls gibt es 0 zurück
addslashes()-Funktion fügt einen Backslash vor dem angegebenen vordefinierten Zeichen hinzu, bei dem es sich um das oben aufgeführte Zeichen handelt
if(!function_exists(get_magic_quotes_gpc) || !get_magic_quotes_gpc() )) { foreach(array('_COOKIE', '_POST', '_GET') as $v) { foreach($$v as $kk => $vv) { $kk{0} != '_' && $$v[$kk] = addslashes($vv); } } }
Es gibt drei Einstellungen in PHP, die ' (einfache Anführungszeichen) automatisch konvertieren können ), " (doppelte Anführungszeichen). , (Backslash) und NULL-Zeichen werden konvertiert.
PHP nennt es magische Anführungszeichen
magic_quotes_gpc
echo $_GET['id']; # Sie erhalten abc'de"f
magic_quotes_gpc=On; eingeschaltet, rechts Das Schreiben in die Datenbank hat keine Auswirkung. Wenn beispielsweise das obige $_GET['id'] in die Datenbank geschrieben wird, lautet es immer noch abc'de"f,
wird abc'de"f sein
Wenn aktiviert, werden die meisten Funktionen verwendet, die Daten aus externen Quellen abrufen und zurückgeben, einschließlich Datenbanken und Textdateien , gibt Backslash-Escapezeichen zurück. Diese Option kann zur Laufzeit geändert werden und der Standardwert in PHP ist ausgeschaltet.
Wenn diese Option aktiviert ist, werden einfache Anführungszeichen mit einfachen Anführungszeichen anstelle von Backslashes maskiert. Diese Option überschreibt magic_quotes_gpc vollständig. Wenn beide Optionen gleichzeitig aktiviert sind, werden einfache Anführungszeichen in „“ maskiert. Doppelte Anführungszeichen, Backslashes und NULL-Zeichen werden nicht maskiert.
Mein Formularinhalt war ursprünglich: 4f52ed1e5c491ac83ef50b5c9714a38f
d9ce35c4fd9ddae66be8e71cd48345f9
Gegenmaßnahme 1: Ändern Sie die php.ini-Datei (ich werde nicht auf die Methode zum Ändern von php.ini eingehen, Sie können googeln it Next)
Gegenmaßnahme 2: Brechen Sie das Escape ab
Schritt 1: Suchen Sie die von Ihnen übermittelten Daten, z. B. $_POST['content'], und ändern Sie sie in $content=stripslashes ($_POST ['content']);
Schritt 2: Ersetzen Sie in Zukunft $POST['content'] durch $content
Schritt 3: An die Datenbank senden, der Datenbankspeicher ist noch vorhanden normal: 4f52ed1e5c491ac83ef50b5c9714a38f vorgelesen als
1cbf851d5729038d483c8b5f4fd864b0 (Sie sollten wissen, wie man das löst, oder? Wie wäre es, wenn ich noch mehr hinzufüge?)
Schritt 4: Verwenden Sie Stripslashes(), um den aus der Datenbank gelesenen Inhalt zu filtern.
Stripslashes() Diese Funktion entfernt den von der Addslashes()-Funktion hinzugefügten Backslash aus der Datenbank oder dem HTML-Formular
(
Wenn Sie nicht möchten, dass die folgende Situation auf der PHP-Seite auftritt:
Das einfache Anführungszeichen wird mit Escapezeichen versehen als 'Doppelte Anführungszeichen sind maskiert als „
Dann können die folgenden Einstellungen vorgenommen werden, um dies zu verhindern:
Eingestellt in php.ini: magic_quotes_gpc = Off)
Zusammenfassung wie folgt:
, können wir keine
addslashes()- und striplashes()-Operationen für die Zeichenfolgendateneingabe und -ausgabe aus der Datenbank ausführen, und die Daten werden normal angezeigt .
Wenn Sie zu diesem Zeitpunkt addslashes() für die Eingabedaten ausführen,
Sie müssen addslashes() verwenden, um die Eingabedaten zu verarbeiten, aber Sie müssen Stripslashes() nicht verwenden, um die Ausgabe zu formatieren. Verwandte Empfehlungen: PHP fügt einen Backslash vor dem Anführungszeichen hinzu (PHP entfernt den Backslash)
Da addslashes() die Backslashes nicht zusammen in die Datenbank schreibt, hilft es nur MySQL Schließen Sie die Ausführung der SQL-Anweisung ab.
Das obige ist der detaillierte Inhalt vonPHP implementiert Code zur Verarbeitung eingegebener Escape-Zeichen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!