Page 1 sur 1

recup de donnees encodees

Posté : 07 juin 2007, 10:51
par ours-blanc-
Salut j'ai un soucis apres utilisation de la fonction mysql_real_escape_string.
Mes données sont bien encodées. mais apres quand je vais les chercher et les affiche il y a des \\\ avant les apostrophes et des \n pour les retours a la ligne. savez vous comment je peux "desencoder" les donnees afin de les afficher proprement?

merci!

Posté : 07 juin 2007, 11:19
par Ryle
Tu dois avoir un addslashes() en trop, ou les magic_quotes d'activé lorsque tu récupères tes donnés, les apostrophes sont donc déjà protégées. Ta chaine doit donc avoir cette forme "L \' apostrophe" lorsque tu la passes au real_escape, qui va du coup te protéger l'antislash en le doublant, et l'apostrophe : "L \\ \' apostrophe"

Tu dois donc à mon avis avoir un truc à corriger lors de l'enregistrement pour ne stocker en base que le texte d'origine sans les antislashes.... sinon en attendant ou à défaut de mieux, tu peux utiliser la fonction stripslashes() qui te supprime les antislashes :)

Posté : 07 juin 2007, 15:16
par ours-blanc-
merci ryle
J'ai trouve une solution mais en virant mysql-real-escape-string.
Je fais un addslashes puis un strip slashes et ca marche. mais du coup je comprends plus trop comment ca fontionne.
on dirait que magicquotes est activee en fait. mais j'ai pasreussi a la desactiver.

PAr contre, une question. A l'issu du mysql_real_escape_string, les chaines ont des \ c'est ca?

dans ce cas, a chaque fois qu'on utilise mysql_escape... il faut faire un stripslashes pour vouloir enregistrer les données brut dans la base?

enfin voila, si vous pouviez m'eclairer sur l'emploi de la fonction mysql_real_escape_string ce serait cool.

merci!

Posté : 07 juin 2007, 15:45
par Ryle
Alors en fait, le magic_quotes va protéger les apostrophes et guillemets dans les variables que tu récupères par get et post en les backslashant. L'intérêt étant de pouvoir utiliser immédiatement ces variables à l'intérieur de chaines, typiquement des requêtes sql où les chaines de caractères doivent être délimitées par des apostrophes. Cela évite donc que les apostrophes saisies par l'utilisateur n'interfèrent avec celles qui doivent délimiter la chaine :

Si dans ton formulaire tu saisies le texte : " L'apostrophe " pour l'input field
Avec magic quotes tu vas obtenir $_POST['field'] = " L\'apostrophe "
Sans magic quotes tu auras $_POST['field'] = " L'apostrophe "

Ainsi la requête SQL suivante donnerait :
"SELECT ... WHERE champ = '".$_POST['field']."'"
// avec magic quotes
"SELECT ... WHERE champ = ' L\'apostrophe ' " // l'apostrophe est protégée
// sans magic quotes
"SELECT ... WHERE champ = ' L'apostrophe ' " // génère une erreur de syntaxe sql
L'antislash a donc uniquement pour but de protéger le caractère lors de l'exécution de la requête, dans ta base tu ne le verras pas et tu auras bien stockée la valeur saisie par l'utilisateur :)

addslashes() fonctionne exactement de la même manière, tu peux donc l'utiliser si la directive magic quotes gpc est désactivée, ou plus simplement pour protéger n'importe quelle chaine (pour l'utiliser dans du javascript par exemple).

mysql_real_escape_string() protèges quelques caractères en plus et est donc réellement destiné à la protéction des chaines utilisées dans des requêtes.
Note: Si magic_quotes_gpc est activée, appliquez d'abord la fonction stripslashes() à vos données. Utiliser cette fonction sur des données qui ont déjà été protégées, les protègera une deuxième fois.
C'est-y plus clair ? :)