PHP = envoi de guillemets et reception de \"

Résolu/Fermé
-RoRo- Messages postés 98 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 14 mai 2010 - 1 avril 2010 à 14:17
 le père - 1 avril 2010 à 17:02
Bonjour à toutes et à tous ! J'ai un gros souçis concernant l'envoi de guillements avec la méthode POST. J'ai un formulaire dans lequel on peut insérer un lien vers une image. La syntaxe du lien comporte donc des guillemets. Par contre, lors de la validation du formulaire, le fichier php recevant les données me rajoute des caractères lorsque des guillements ont été inscrit dans le formulaire.

Par exemple, si j'envois "coucou", je reçois \"coucou\"

Une petite aide serait la bienvenue.
Merci d'avance,

RORO
A voir également:

3 réponses

Bonjour

Si PHP ajoute des \ devant les guillemets, c'est que les "magic quotes" sont actifs. Dans ce cas, PHP ajoute automatiquement des \ devant les guillemets simples, les guillemets doubles, les \ et les caractères nuls dans les données reçues par GET, POST, et les COOKIES
Pour les supprimer, je te conseille de faire une fonction qui teste si les magic-quotes sont actifs, et appelle strip_slashes si nécessaire :
function RecupChaine($chaine) {
  if (get_magic_quotes_gpc()==1) return stripslashes($chaine); // il y avait magic
  return $chaine; // il n'y avait pas magic
}

Quand tu as besoin de $_POST['machin'] utilise RecupChaine($_POST['machin'])
3
-RoRo- Messages postés 98 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 14 mai 2010 1
1 avril 2010 à 15:37
Salut !
Merci, ça fonctionne !!!
0
ThyB45 Messages postés 9 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 11 juin 2010
Modifié par ThyB45 le 1/04/2010 à 15:14
Ton problème est normal, tu 'escape' les guillemets pour éviter les sql injection (sécu web) et autres erreurs
Tout d'abord a quoi sa sert de mettre les \ devant certains caractères spéciaux ? C'est pour éviter que php interprète ton caractère spéciale comme du code.
Imaginons tu as une requete sql dans du php du genre :
$requete = "SELECT * FROM users where nickname='". $_POST['nickname'] ." AND password='". $_POST['password'] ."'";  
mysql_query($requete);


si le mec rentre dans ton formulaire dans le champs nickname: admin
et dans le champ password : aze' OR 1=1
ben tu remplace dans ta requete:
SELECT * FROM users where nickname='admin' AND password='aze' OR 1=1
On s'en fiche que le mot de passe ne soit pas bon :] car OR 1=1 sera toujours vrai et donc zappera ton pass et du coup si c'est un formulaire d'identification l'utilisateur n'aura pas besoin de mot de passe pour se connecté a un compte.

Quand tu fais addslashes($_POST['nickname']) ca rajoute des \ devant tes guillemets et autres caractères spéciaux. Du coup les codes malveillants comme celui au dessus ne pourront plus s'exécuter (et c'est ce que tu as du faire pour avoir tes \, sinon c'est que tes magic_quote sont activé dans ton php.ini).
Une fois que tu veux afficher ton code ta juste a utiliser la commande stripslashes($ton_texte); sa enlèvera les \ devant les caractères spéciaux ;) j'ai pas mal résumé mais en gros c'est ça :)
0
Presque d'accord, mais pas complètement.
C'est mysql qui est trompé, pas PHP, Du moins dans l'exemple que tu donnes.
D'autre part, la bonne manière d'échapper les guillemets pour exécuter une requête, ce n'est pas addslashes, mais mysql_real_escape_string qui est vraiment faite pour ça alors que addslashes, par exemple, ne prévoit pas les cas des retour chariot.
0
jeangilles Messages postés 816 Date d'inscription samedi 21 juin 2008 Statut Membre Dernière intervention 17 juillet 2012 185
1 avril 2010 à 14:58
Ben c'est plutôt normal en fait
Qu'est ce qui ne va pas ?
Tu voudrais enlever les \ ?

Passe par la méthode str_replace pour les enlever
-1