Maison  >  Article  >  développement back-end  >  Pourquoi les données POST s'échappent-elles automatiquement en PHP même lorsque les guillemets magiques sont désactivés ?

Pourquoi les données POST s'échappent-elles automatiquement en PHP même lorsque les guillemets magiques sont désactivés ?

DDD
DDDoriginal
2024-10-28 07:59:02846parcourir

Why is POST Data Auto-Escaping in PHP Even When Magic Quotes are Disabled?

Dévoilement des mystérieuses données de publication à échappement automatique en PHP avec des guillemets magiques désactivés

Lorsque vous travaillez avec des données POST en PHP, en particulier dans dans un environnement WordPress, il est possible de rencontrer des comportements d'échappement automatique inattendus même si les guillemets magiques sont désactivés. Ce problème déroutant survient lorsque les données POST subissent un échappement automatique, même si les guillemets magiques seraient désactivés (get_magic_quotes_gpc() renvoie 0).

L'influence de WordPress

En fouillant En approfondissant le problème, il devient évident que WordPress joue un rôle crucial dans le déclenchement de ce mécanisme d’échappement automatique. Lorsque WordPress est démarré dans le cadre du processus d'initialisation de votre application, son code interfère avec le comportement naturel des guillemets magiques de PHP.

WordPress inclut une fonctionnalité qui intercepte les données de requête, y compris les données POST, et effectue certaines opérations, dont l'une échappe aux guillemets simples ('). Ce comportement s'étend même lorsque les guillemets magiques sont désactivés dans php.ini.

La source du bug

Un examen plus approfondi de la base de code WordPress révèle un bug signalé sous le système WordPress Core Trac (ticket 18322). Ce problème est lié à une gestion incorrecte des données de requête, qui déclenche un échappement indésirable.

La solution

Heureusement, une solution est disponible pour résoudre ce problème d'échappement automatique. dilemme. Le Codex WordPress recommande d'utiliser la fonction stripslashes_deep() pour « annuler l'échappement » des données POST avant d'effectuer des opérations dessus. En utilisant cette fonction, vous pouvez efficacement remplacer l'échappement automatique de WordPress et récupérer les données dans leur format d'origine.

Pour implémenter cette solution, ajoutez le code suivant à votre script PHP :

<code class="php">$_GET       = array_map('stripslashes_deep', $_GET);
$_POST      = array_map('stripslashes_deep', $_POST);
$_COOKIE    = array_map('stripslashes_deep', $_COOKIE);
$_SERVER    = array_map('stripslashes_deep', $_SERVER);
$_REQUEST   = array_map('stripslashes_deep', $_REQUEST);</code>

Ce code supprime les barres obliques de toutes les superglobales, garantissant que les données POST ne sont pas automatiquement échappées lors de leur accès en PHP.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn