Bonjour à tous,
J'ai besoin pour un script php qui fait du remplacement de donnée dans un fichier de mentionner <? et ?>
Hors, à l'exécution ces balises sont interprétées.
Quelque a t-il eu idée ?
Merci par avance
Bonjour à tous,
J'ai besoin pour un script php qui fait du remplacement de donnée dans un fichier de mentionner <? et ?>
Hors, à l'exécution ces balises sont interprétées.
Quelque a t-il eu idée ?
Merci par avance
désactive short_open_tags dans le php.ini (recommandé)
Merci pour cette réponse mais si je fais ça, les autres balises du script, dont je souhaite qu'elles soient interprétées, risquent de ne plus l'être.
Pour être plus précis, je souhaite transmettre, par un script A, une chaine du genre <? traduit($word);?> à un str_replace pour qu'il remplace cette chaine par sa valeur dans un fichier. Lorsque je lance mon script A, <? traduit($word);?> est interprété avant même d'être transmis à str_replace.
C'est donc mon problème
![]()
Encode tes caractère speciaux avec htmlentities() et décode les apres si besoin avec html_entity_decode()
Tu peux aussi utiliser la balise <code>
Ou encore & l t ; ? et ? & g t ; (sans espaces)
J'ai essayé avec & l t ; ? (sans les espace) mais cela à pour effet que ne soit pas trouvé <? dans le fichier, car dans ce cas str_replace recherche respectueusement cette chaine de caractère.
J'ai aussi essayé "<"."?" et '<'.'?' mais là aussi, le code est interprété.![]()
Quant à la balise <code> elle ne règle rien non plus.
a mon avis le probleme est mal formulé.
repose clairement le probleme avec des exemples (genre ce que tu as AVANT et ce que tu souhaiterais avoir APRES) et eventuellement des *morceaux* pertinents de code entourés amoureusement de balises CODE (symbole # dans l'éditeur)
Ok, je reprends en plus clair
Dans un fichier (monfichier.txt) j'ai le texte suivant :
<?1258?>
<?1875?>
Dans un script php, je charge monfichier.txt puis souhaite procéder au remplacement de <?1258?> par MOT1 et <?1875?> par MOT2
Pour ce faire je fais :
Je n'y parviens pas, <?1258?> semble interprété comme étant du code, aucune erreur a l'interprétation du code php n'est remontée. Le contenu de mon fichier reste donc inchangé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $BufferIN = file_get_contents("monfichier.txt"); $bufferOUT = str_replace("<?1258?>", "MOT1", $BufferIN); $bufferOUT = str_replace("<?1875?>", "MOT2", $BufferIN);
Et avec ?
Tout ce qui est entre guillemets en php est interprété... Entre simples quotes non
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $BufferIN = file_get_contents("monfichier.txt"); $bufferOUT = str_replace('<?1258?>', "MOT1", $BufferIN); $bufferOUT = str_replace('<?1875?>', "MOT2", $BufferIN);
Non, c'est pas tout à fait vrai... les variables sont évaluées, mais un ?> ne devrait pas être interprété comme une balise de fin, même entre double quotes.Envoyé par Linaa
Calahaan, qu'est-ce qui te fait dire que ces balises sont "interprétées" ? Peux-tu préciser exactement le dysfonctionnement ?
Si il y avait interprétation d'une balise de fin, il y aurait probablement une erreur générée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $BufferIN = file_get_contents("monfichier.txt"); $bufferOUT = str_replace("<?1258?>", "MOT1", $BufferIN); $bufferOUT = str_replace("<?1875?>", "MOT2", $bufferOUT);![]()
Merci pour votre aide.![]()
J'ai fais une monumentale erreur, et en simplifiant mon code au maxi j'en suis arrivé au constat suivant :
ce code retourne blabla $l blibli et $l n'a pas pu être remplacé par titi
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $BufferIN = 'blabla $l blibli'; $bufferOUT = ereg_replace('$l', 'titi', $BufferIN); echo $bufferOUT;
la présence de <? n'y est donc pour rien et il semble qu'en réalité ce soit la présence d'un $ qui soit problématique
J'ai essayé avec " mais c'est pareil![]()
.................................
Bon que dirais tu d'avoir un peu plus de methode... parce que là ca part n'importe ou.
SOIT tu veux remplacer <? qqchose ?>
SOIT tu veux remplacer ... $qqchose...
SOIT les deux
merci de bien cerner le probleme et de pas se perdre.
L'idée de SIMPLIFIER le probleme pour l'isoler est toujours une bonne idée.
alors deja, on vire le ereg_replace et on remet le str_replace...
Si tu veux utiliser le caractère $ dans une regex il faut que tu l'échappes car c'est un caractère spécial.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $BufferIN = 'blabla $l blibli'; $bufferOUT = ereg_replace('\$l', 'titi', $BufferIN); echo $bufferOUT;
Merci Djakisback pour ta remarque. J'ai échappé le dollard et depuis la chaine est bien remplacée.
Pour traiter des chaiens comportant des <? et ?> je m'en suis sorti ainsi :
Ouuffff
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $BufferIN='blabla <? echo $l;?> blibli et <? echo $l;?> blublu'; $bufferOUT = ereg_replace('<[?] echo \$l;[?]>', 'titi', $BufferIN);
Merci à tous !!!
![]()
Pour infos, le ? c'est le même souci que le dollar, c'est un caractère spécial donc faut l'échapper.
Ce que tu fais fonctionne mais normalement les [] servent à définir des classes de caractères, par ex. : [az].
Code : Sélectionner tout - Visualiser dans une fenêtre à part $bufferOUT = ereg_replace('<\? echo \$l;\?>', 'titi', $BufferIN);
A+![]()
le mieux reste d'utiliser http://fr2.php.net/Fr/preg_quote qui fait tout ca automatiquement.
comme ca au passage tu passe par preg_replace qui est mieux que ereg_replace ;o)
Partager