[resolu] Probleme de PREG_REPLACE

Probleme de PREG_REPLACE [resolu] - PHP - Programmation

Marsh Posté le 03-03-2004 à 12:44:28    

salut a tous
je voudrais recuperer un champ de table et le modifier avec un preg_replace.
donc je recupere le champ avec $rox['champ'], jusdque la pas de soucis.
 
c'est le preg_replace qui marche pas.
 
$row['champ'] = preg_replace("index.php?variable=(.*?)","variable-$1.htm",$row['champ']);
 
où est l'erreur ??


Message édité par sebnutt le 03-03-2004 à 14:05:36
Reply

Marsh Posté le 03-03-2004 à 12:44:28   

Reply

Marsh Posté le 03-03-2004 à 12:52:38    

En gros tu veux faire de l'url rewriting ?
Peux-tu mettre un exemple d'url à modifier et modifée ?

Reply

Marsh Posté le 03-03-2004 à 12:55:40    

c'est pas tout a fait de l'URL rewriting.
je veux modifier la forme d'une URL, contenue dans l'enregistrement d'une table.
 
mon enregistrement contient par exemple  
 
index.php?var=4 et la transformer dans le document renvoyé par le serveur web en var-4.html

Reply

Marsh Posté le 03-03-2004 à 12:56:17    

Essaie ça:
 
$row['champ'] = preg_replace("index\.php\?variable=(.*?)","variable-\$1.htm",$row['champ']);


Message édité par kfman le 03-03-2004 à 12:57:31
Reply

Marsh Posté le 03-03-2004 à 12:56:50    

Je pense qu'il faudrait que tu lises plus en profondeur la documentation PHP : http://fr2.php.net/manual/fr/ref.pcre.php
En fait en gros, il manque les / en début et fin d'expression régulière, le . et ? dans index.php?variable ne sont pas échappés. Le $ de $1 dans la chaîne de remplacement doit être aussi échappé.

Reply

Marsh Posté le 03-03-2004 à 12:59:25    

Suite à Tentacle:
 
$row['champ'] = preg_replace("/index\.php\?variable=(.*?)/","variable-\$1.htm",$row['champ']);
 

Reply

Marsh Posté le 03-03-2004 à 13:06:28    

aucune des 2 solutions ne fonctionne, je me retrouve avec un truc du genre
 
var- .html4     le 4 n'est pas au bon endroit

Reply

Marsh Posté le 03-03-2004 à 13:06:58    

En fait pas besoin d'échapper le $ [:aloy]  
 

Reply

Marsh Posté le 03-03-2004 à 13:11:41    

toujours pas.
dsl
 
je dois etre une buse, mais ca marche pas !!
rahhhhh

Reply

Marsh Posté le 03-03-2004 à 13:12:39    

Hum ... lol enlève moi ce ? dans .*? car il va prendre le moins possible donc il ne prendra pas le nombre et donc il ne serra pas remplacé. Alors soit tu mets (.*) soit tu mets un $ avant le / à la fin.


Message édité par Tentacle le 03-03-2004 à 13:13:19
Reply

Marsh Posté le 03-03-2004 à 13:12:39   

Reply

Marsh Posté le 03-03-2004 à 13:16:45    

en mettant (.*) j'ai recupere ca  
 
var-4
mais il manque le .html :)
desl je fais tous mes efforts...

Reply

Marsh Posté le 03-03-2004 à 13:19:12    

ca marche chez moi ... tu peux mettre la ligne de code ?

Reply

Marsh Posté le 03-03-2004 à 13:19:57    

$row['body'] = preg_replace("/critic\.php\?filmid=(.*)/","critique-$1.html",$row['body']);

Reply

Marsh Posté le 03-03-2004 à 13:37:23    

Bah ça marche aussi :
 
echo  preg_replace("/critic\.php\?filmid=(.*)/","critique-$1.html","critic.php?filmid=4" );
 
renvoie critique-4.html
 

Reply

Marsh Posté le 03-03-2004 à 13:55:38    

en effet, ca marche, mais le prob c'est que je ne sais pas ou se trouve le texte en question dans mon enregistrement. il peut etre situe n'iporte ou.
 
je ne peux donc pas utiliser le echo mais plutot
$row['body'] = ....

Reply

Marsh Posté le 03-03-2004 à 13:57:06    

Met un exemple d'enregistrement stp.

Reply

Marsh Posté le 03-03-2004 à 13:59:10    

ben un enregistrement peut contenir
 

Code :
  1. je vous propose de lire la critique suivante  critic.php?filmid=12


 
et je veux que le serveur PHP retourne  
 
je vous propose de lire la critique critique-12.html
 
 
voila, j'espere que je suis clair.
 

Reply

Marsh Posté le 03-03-2004 à 14:01:51    

Essaye:
 
$row['body'] = preg_replace("/critic\.php\?filmid=([0-9]+)/","critique-$1.html",$row['body']);  

Reply

Marsh Posté le 03-03-2004 à 14:04:35    

sebnutt a écrit :

en effet, ca marche, mais le prob c'est que je ne sais pas ou se trouve le texte en question dans mon enregistrement. il peut etre situe n'iporte ou.
 
je ne peux donc pas utiliser le echo mais plutot
$row['body'] = ....


 
le echo était là pour le test ... mais si echo affiche le bon résultat, je vois pas pourquoi ça changerait avec $row['body'] =

Reply

Marsh Posté le 03-03-2004 à 14:05:10    

YEESSSSSSS ca marche !!!!!
 
un supergrand merci a toi !
et bravo !

Reply

Marsh Posté le 03-03-2004 à 14:06:17    

T'as fait un echo $row['body'];
 
Ou alors t'as des vieux caractères slashés automatiquement par mysql ou php. Si c'est le cas stripslashes($row['body']).


Message édité par kfman le 03-03-2004 à 14:09:14
Reply

Marsh Posté le 03-03-2004 à 14:06:58    

sebnutt a écrit :

YEESSSSSSS ca marche !!!!!
 
un supergrand merci a toi !
et bravo !


 
100? :o

Reply

Marsh Posté le 03-03-2004 à 14:14:19    

j'avais pas pensé à faire ça, alors que c'est exactement la foirmule que j'utilise dans mon htacces d'URL rewriting, chuis trop nul..

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed