Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/09/2006, 22h12   #1
Invité régulier
 
Inscription : mai 2006
Messages : 15
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2006
Messages : 15
Points : 6
Points : 6
Par défaut Comment mentionner <? et ?> sans qu'ils soient interprétés ?

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
calahaan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2006, 22h16   #2
Expert Confirmé
 
Avatar de Eusebius
 
Inscription : avril 2003
Messages : 3 286
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 3 286
Points : 3 155
Points : 3 155
désactive short_open_tags dans le php.ini (recommandé)
Eusebius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2006, 08h33   #3
Invité régulier
 
Inscription : mai 2006
Messages : 15
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2006
Messages : 15
Points : 6
Points : 6
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
calahaan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2006, 10h02   #4
Rédacteur
 
Avatar de Yoshio
 
Homme
Inscription : septembre 2005
Messages : 1 741
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 24
Localisation : Belgique

Informations forums :
Inscription : septembre 2005
Messages : 1 741
Points : 1 497
Points : 1 497
Encode tes caractère speciaux avec htmlentities() et décode les apres si besoin avec html_entity_decode()
Yoshio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2006, 11h26   #5
Membre émérite
 
Avatar de Linaa
 
Inscription : avril 2005
Messages : 988
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : avril 2005
Messages : 988
Points : 922
Points : 922
Tu peux aussi utiliser la balise <code>
Ou encore & l t ; ? et ? & g t ; (sans espaces)
__________________
Linaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2006, 21h58   #6
Invité régulier
 
Inscription : mai 2006
Messages : 15
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2006
Messages : 15
Points : 6
Points : 6
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.
calahaan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2006, 09h51   #7
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
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)
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2006, 20h29   #8
Invité régulier
 
Inscription : mai 2006
Messages : 15
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2006
Messages : 15
Points : 6
Points : 6
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 :

Code :
1
2
3
$BufferIN = file_get_contents("monfichier.txt");
$bufferOUT = str_replace("<?1258?>", "MOT1", $BufferIN);
$bufferOUT = str_replace("<?1875?>", "MOT2", $BufferIN);
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é.
calahaan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2006, 20h54   #9
Membre émérite
 
Avatar de Linaa
 
Inscription : avril 2005
Messages : 988
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : avril 2005
Messages : 988
Points : 922
Points : 922
Et avec ?

Code :
1
2
3
$BufferIN = file_get_contents("monfichier.txt");
$bufferOUT = str_replace('<?1258?>', "MOT1", $BufferIN);
$bufferOUT = str_replace('<?1875?>', "MOT2", $BufferIN);
Tout ce qui est entre guillemets en php est interprété... Entre simples quotes non
__________________
Linaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2006, 00h25   #10
Expert Confirmé
 
Avatar de Eusebius
 
Inscription : avril 2003
Messages : 3 286
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 3 286
Points : 3 155
Points : 3 155
Citation:
Envoyé par Linaa
Et avec ?

Code :
1
2
3
$BufferIN = file_get_contents("monfichier.txt");
$bufferOUT = str_replace('<?1258?>', "MOT1", $BufferIN);
$bufferOUT = str_replace('<?1875?>', "MOT2", $BufferIN);
Tout ce qui est entre guillemets en php est interprété... Entre simples quotes non
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.
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.
Eusebius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2006, 06h11   #11
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
Code :
1
2
3
$BufferIN = file_get_contents("monfichier.txt");
$bufferOUT = str_replace("<?1258?>", "MOT1", $BufferIN);
$bufferOUT = str_replace("<?1875?>", "MOT2", $bufferOUT);
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2006, 16h47   #12
Invité régulier
 
Inscription : mai 2006
Messages : 15
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2006
Messages : 15
Points : 6
Points : 6
Merci pour votre aide.
J'ai fais une monumentale erreur, et en simplifiant mon code au maxi j'en suis arrivé au constat suivant :

Code :
1
2
3
 $BufferIN = 'blabla $l blibli';
$bufferOUT = ereg_replace('$l', 'titi', $BufferIN);
echo $bufferOUT;
ce code retourne blabla $l blibli et $l n'a pas pu être remplacé par titi
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
calahaan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2006, 18h33   #13
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
.................................

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...
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2006, 18h43   #14
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 791
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 791
Points : 1 681
Points : 1 681
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 :
1
2
3
4
 
$BufferIN = 'blabla $l blibli';
$bufferOUT = ereg_replace('\$l', 'titi', $BufferIN);
echo $bufferOUT;
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2006, 21h25   #15
Invité régulier
 
Inscription : mai 2006
Messages : 15
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2006
Messages : 15
Points : 6
Points : 6
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 :
Code :
1
2
$BufferIN='blabla <? echo $l;?> blibli et <? echo $l;?> blublu';
$bufferOUT = ereg_replace('<[?] echo \$l;[?]>', 'titi', $BufferIN);
Ouuffff
Merci à tous !!!
calahaan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2006, 10h25   #16
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 791
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 791
Points : 1 681
Points : 1 681
Pour infos, le ? c'est le même souci que le dollar, c'est un caractère spécial donc faut l'échapper.

Code :
$bufferOUT = ereg_replace('<\? echo \$l;\?>', 'titi', $BufferIN);
Ce que tu fais fonctionne mais normalement les [] servent à définir des classes de caractères, par ex. : [az].

A+
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2006, 10h50   #17
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
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)
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h53.


 
 
 
 
Partenaires

Hébergement Web