Cet article présente principalement le code de traitement des caractères d'échappement d'entrée en PHP. Les amis qui en ont besoin peuvent s'y référer
Prenons d'abord une fonction qui vient d'être introduite dans WordPress 3.6
/** * 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; }
Expliquez d'abord une fonction intégrée de PHP : get_magic_quotes_gpc()
La fonction de cette fonction est d'obtenir la valeur de l'option magic_quotes_gpc dans le Paramètres php.ini.
Si la valeur de l'option magic_quotes_gpc est On, l'analyseur PHP ajoutera automatiquement le caractère d'échappement "" aux données de post, get et cookie pour garantir que ces données ne causeront pas de problèmes dans le programme, en particulier les instructions de base de données. à cause de caractères spéciaux.
Lorsqu'ils sont activés, les caractères tels que les guillemets simples ('), les guillemets doubles ("), les barres obliques inverses () et NUL (caractères NULL) seront dotés d'une barre oblique inverse, sinon ils doivent être traités manuellement. ()
renvoie 1 lorsque la valeur magic_quotes_gpc est activée, sinon renvoie 0
la fonction addslashes() ajoute une barre oblique inverse avant le caractère prédéfini spécifié, qui est le caractère répertorié ci-dessus 🎜>
Mais. la fonction intégrée get_magic_quotes_gpc() a été annulée dans PHP5.4 et versions ultérieures Afin d'éviter de futures erreurs, toutes les entrées sont filtrées comme ceci :
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); } } }
Lors du traitement des données MySQL et GET et POST, il est souvent nécessaire d'échapper aux guillemets des données
PHP appelle cela des guillemets magiques. Ces trois paramètres
affectent les données des requêtes HTTP (GET, POST et COOKIES). Ne peut pas être modifié au moment de l'exécution. La valeur par défaut en PHP est activée.
Lorsque cette option est activée, les données transmises via GET, POST et COOKIE seront automatiquement échappées.
Par exemple, test.php?id=abc'de"f
echo $_GET['id']; # Vous obtiendrez abc'de"fmagic_quotes_gpc=On; activé, à droite L'écriture dans la base de données n'a aucun effet. Par exemple, si le $_GET['id'] ci-dessus est écrit dans la base de données, il sera toujours abc'de"f,
. Au contraire, si magic_quotes_gpc=Off; alors les caractères Avec des guillemets (que ce soit des guillemets simples ou des guillemets doubles), écrire directement sur mysql deviendra directement vide
magic_quotes_runtime
Si activée, la plupart des fonctions qui obtiennent et renvoient des données à partir de sources externes, y compris les bases de données et les fichiers texte , renverra les données en s'échappant. Cette option peut être modifiée au moment de l'exécution et la valeur par défaut en PHP est désactivée.
magic_quotes_sybase
Si activé, les guillemets simples seront échappés en utilisant des guillemets simples au lieu de barres obliques inverses. Cette option remplace complètement magic_quotes_gpc. Si les deux options sont activées en même temps, les guillemets simples seront échappés dans ". Les guillemets doubles, les barres obliques inverses et les caractères NULL ne seront pas échappés.
Étape 4 : Utilisez stripslashes() pour filtrer le contenu lu dans la base de données. stripslashes() Cette fonction supprime la barre oblique inverse ajoutée par la fonction addlashes() Utilisée pour nettoyer les données récupérées. depuis la base de données ou le formulaire HTML (Si vous ne souhaitez pas que la situation suivante se produise dans la page PHP :
Le guillemet simple est échappé comme '
Les guillemets doubles sont échappé comme "Ensuite, vous pouvez effectuer les paramètres suivants pour empêcher :
Défini dans php.ini : magic_quotes_gpc = Off)
Résumé comme suit :
1. Dans le cas de magic_quotes_gpc=on
,nous ne pouvons pas effectuer les opérations addslashes() et stripslashes() sur les données de chaîne d'entrée et de sortie de la base de données, et les données seront affichées normalement .
Si vous effectuez addlashes() sur les données d'entrée à ce moment-là,
alors vous devez utiliser stripslashes() pour supprimer les barres obliques inverses en excès lors de la sortie.
2. Pour le cas de magic_quotes_gpc=off
Vous devez utiliser addlashes() pour traiter les données d'entrée, mais vous n'avez pas besoin d'utiliser stripslashes() pour formater la sortie
Parce que addlashes() n'écrit pas les barres obliques inverses dans la base de données, cela aide simplement mysql à terminer l'exécution de l'instruction SQL.
Recommandations associées :
PHP ajoute une barre oblique inverse avant la citation (PHP supprime la barre oblique inverse)
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!