Problème remplacement de caractère.

f4cjv
Invité n'ayant pas de compte PHPfrance

12 févr. 2007, 12:58

Bonjour j'ai une chaine et je voudrais remplacer dans celle ci le caractère \ par le caractère /.

J'ai donc le code suivant:

Code : Tout sélectionner

if(isset($_POST['photo_p'])) { $_POST['photo_p']=str_replace("\", "/" , $_POST['photo_p']); }
Ceci ne fonctionne pas à cause du caractère \
Si je fais un essai en remplaçant \ dans le (str_replace) par la lettre "a" par exemple ça fonctionne !!

Cela doit venir du fait que / est un caractère special comment puis je "ruser" pour y arriver ?

Merci salutations

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

12 févr. 2007, 13:11

Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "Débuter en PHP".

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

12 févr. 2007, 13:15

"\" est effectivement un caractère réservé à l'échappement, protéger certains caractères ou symboles (google pour en savoir plus :wink: )

Il faut le doubler pour l'utiliser comme tout autre caractère
str_replace("\\", "/" , $_POST['photo_p']);

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 99 Messages

12 févr. 2007, 13:57

[edit: Désolé, je croyais avoir posté un nouveau sujet :cry: ]


Salut!

J'utilise une regexp mysql pour rechercher des mots dans des champs, et j'aurais besoin d'échapper tout les caractères que mysql pourrait utiliser comme attribut d'expression régulière (point, accolades, etc...).

J'ai donc fait ce code:
		foreach($params_recherche['keywords'] as $key => $val) {
			$params_recherche['keywords'][$key] = str_replace(".","\.",$val);
			$params_recherche['keywords'][$key] = str_replace("[","\[",$val);
			$params_recherche['keywords'][$key] = str_replace("]","\]",$val);
			$params_recherche['keywords'][$key] = str_replace("(","\(",$val);
			$params_recherche['keywords'][$key] = str_replace(")","\)",$val);
			$params_recherche['keywords'][$key] = str_replace("{","\{",$val);
			$params_recherche['keywords'][$key] = str_replace("}","\}",$val);
			$params_recherche['keywords'][$key] = str_replace("^","\^",$val);
			$params_recherche['keywords'][$key] = str_replace("$","\$",$val);
		}
Mais malheureusement, il ne marche pas (même quand j'échappe les slashs par d'autres slashs) :cry:

Où est-ce que je me suis trompé?

Merci d'avance!
Modifié en dernier par Arcanis le 12 févr. 2007, 14:37, modifié 1 fois.

f4cjv
Invité n'ayant pas de compte PHPfrance

12 févr. 2007, 14:11

Merci il me met 2 caractères // à la place d'un / mais ça à l'air de marcher .

Salutations

Eléphant du PHP | 259 Messages

12 févr. 2007, 14:42

hello,

str_replace peut prendre des tableaux pour les remplacements, penses-y, ca t'éviterait d'appeler 70 fois la fonction.

bon courage !

Eléphant du PHP | 99 Messages

12 févr. 2007, 14:55

Eh bien je viens d'apprendre un truc :shock:
Je savais pas du tout que c'était possible, ça.
Merci!

Finalement, j'ai débugué mon script (il fallait mettre $params_recherche['keywords'] et non pas $val dans l'argument de recherche), mais j'ai toujours un problème: bien que le point soit échappé, MySQL le prend toujours en compte comme étant un caractère de regex...
Ma requête:

SELECT `url`,`titre` FROM `sites` WHERE (`titre` REGEXP 'test\.')

Et elle me renvoie:

C'est un test!

Alors qu'il n'y a aucun points. Bizarre.