Maison >développement back-end >tutoriel php >Pourquoi les données POST s'échappent-elles automatiquement en PHP même lorsque les guillemets magiques sont 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).
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.
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.
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!