OVH Cloud OVH Cloud

fonction str_replace

3 réponses
Avatar
Freegate
Bonjour,

en local (php 4.3.9 ; mysql 4.0.21 ; apache 2) je teste le code suivant :

$myvar="c'est moi"
str_replace("'","\'",$myvar)

la fonction me renvoie le texte : c\'est moi

Tant mieux c'est que je veux. Par contre le même code php exécuté chez mon
hébergeur (php 4.3.9 ; mysql 4.0.21 ; apache 2) me donne le résultat
suivant :

c\\'est moi

Et ça je ne veux pas car ça génère ensuite une erreur dans ma requète SQL.

Avez vous une explication logique à ce phénomène ?

Merci pour vos lumières

3 réponses

Avatar
Kawai
salut,

Certains serveurs ajoutent tout seul les devant les caracteres
spéciaux. La solution c'est d'utiliser la fonction qui va bien pour
ajouter les seulement là ou il y en a besoin...

la fonction qui va bien c'est addslashes (et stripslashes aussi pour
retirer les )

http://fr.php.net/manual/fr/function.addslashes.php
http://fr.php.net/manual/fr/function.stripslashes.php

Kawai ^_^
Avatar
Freegate
"Freegate" a écrit dans le message de news:
41a664d1$0$16344$
Bonjour,

en local (php 4.3.9 ; mysql 4.0.21 ; apache 2) je teste le code suivant :

$myvar="c'est moi"
str_replace("'","'",$myvar)

la fonction me renvoie le texte : c'est moi

Tant mieux c'est que je veux. Par contre le même code php exécuté chez mon
hébergeur (php 4.3.9 ; mysql 4.0.21 ; apache 2) me donne le résultat
suivant :

c'est moi

Et ça je ne veux pas car ça génère ensuite une erreur dans ma requète SQL.

Avez vous une explication logique à ce phénomène ?

Merci pour vos lumières




Bon je me répond à moi même :

Paramétrage php.ini était sur "off" pour moi et sur "on" sans doute chez mon
hébergeur

Principe pour ceux ne connaissent cette subtilité:

magic quote gpc peut valoir off ou on. La valeur on est recommandée : elle
permet de préfixer
automatiquement par '' tous les caractèeres saisis dans les formulaires ou
provenant de cookies qui risqueraient de poser problème avec MySQL. Par
exemple la simple quote (') est transform´ee en (')

magic quotes runtime devrait valoir Off. Ainsi les données provenant de
MySQL ne seront
pas modifiées, même si elles contiennent des (').

Ce comportement est celui qui pose le moins de problèmes puisqu'il évite d'avoir
à utiliser systématiquement les fonctions addSlashes et stripSlashes.

Avatar
Bruno Baguette
Freegate wrote:
"Freegate" a écrit dans le message de news:
41a664d1$0$16344$

magic quote gpc peut valoir off ou on. La valeur on est recommandée : elle
permet de préfixer
automatiquement par '' tous les caractèeres saisis dans les formulaires ou
provenant de cookies qui risqueraient de poser problème avec MySQL. Par
exemple la simple quote (') est transform´ee en (')


Bonjour,

Il me semble que c'est le contraire (valeur OFF recommandée pour
magic_quotes_gpc). Cela évite de devoir chipoter avec stripslashes si
les données GPC doivent être affichées.

Par ailleurs, pour escaper les caractères spéciaux des chaines de
caractères que l'on injecte dans les requêtes SQL, ce sont les fonctions
propres au SGBD utilisé qu'il faut utiliser, exemple :

PostgreSQL : pg_escape_string() ou pg_escape_bytea()

mysql : mysql_real_escape_string()

Bien à vous,

--
Bruno BAGUETTE -

S'i'n'a è'ne saquî qui n'doit nin mârtchi, è'n mârtch'rè nîn.