PHP : Gestion des guillemets et des double guillemets

28 mai 2012 rdorigny 0 commentaires

La gestion des guillemets et double guillemets a toujours été difficile, en effet sur ce sujet les choses ne cessent de varier. Et encore plus depuis la version 5.4.X de PHP, la fonctionnalité MAGIC QUOTES (parenthèses magiques) est désormais obsolète et donc n'est plus implémenté! Néanmoins, ce mécanisme existe encore sur la plupart des serveurs, il est vivement conseillé de ne plus l'utiliser. Voici quelques explications et solutions, pour savoir comment gérer ce changement récent.


C'est quoi le MAGIC QUOTES?

C'est une fonctionnalité, offerte nativement par PHP, qui réalise un échappement pour les caractères guillemets (') et double guillemets ("). L'objectif est de pallier aux erreurs potentiels de scripts sur des strings saisis par l'utilisateur dans un formulaire avec la présence d'un ' ou d'un ". Un autre objectif avoué était de se protéger du risque de l'injection de code par un usager malveillant.

Comment savoir si la fonction MAGIC QUOTES est activé?
Il suffit de mettre d'utiliser la fonction PHP get_magic_quotes_gpc(). Elle retourne 1 si l'option est activée et 0 sinon.
echo get_magic_quotes_gpc(); //Retourne 1 si activé

Autres solutions, faire un phpinfo() ou éditer le php.ini si vous y avez accés.

MAGIC QUOTES présente quelques inconvénients qui font que à l'usage les sites webs ne l'utilise plus. Tout d'abord, le fait de l'appliquer systématiquement n'est pas nécessaire, généralement les strings transmis sont retouchés par le code, c'est un processus lourd pour les serveurs web qui ont bien d'autres choses à faire. Ensuite, si on applique plusieurs fois le MAGIC QUOTES sur un string, le caractère d'échappement slash apparaît plusieurs fois...

Pour éviter cela, il fallait supprimer les shashs avant l'envoi. Un exemple de script PHP :
if (get_magic_quotes_gpc()) { $lastname = stripslashes($_POST['lastname']); // supprime les slahs } else { $lastname = $_POST['lastname']; }

Bref, le MAGIC QUOTES a généré plus de problèmes, qu'il n'en a résolu. Il est donc définitivement abandonné, le développeur devra gérer lui même l'échappement des ' et des ".

Gestion des guillemets et double guillemets

En premier lieu, il faut désactiver le magic quotes si jamais il est encore activé. La meilleure solution est de créer à la racine de votre script PHP un fichier php.ini (ou mieux de modifier le php.ini du serveur). En suite, il suffit de mettre dans le fichier la ligne :
magic_quotes_gpc=0

Ensuite le code à insérer est :
$txt=stripslashes($txt); $txt=str_replace("'","'",$txt); $txt=str_replace('"','"',$txt);

Le principe consiste à retirer les slashs du texte initiale puis à les remettre sur le texte modifié par l'usager. Cela est utile pour le cas d'un texte qui doit être retouché en utilisant un formulaire par exemple.



Pseudonyme (obligatoire) :
Adresse mail (obligatoire) :
Site web :




© 2024 www.doritique.fr par Robert DORIGNY