IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Comment mentionner <? et ?> sans qu'ils soient interprétés ? [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    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

  2. #2
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    désactive short_open_tags dans le php.ini (recommandé)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Par défaut
    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

  4. #4
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Par défaut
    Encode tes caractère speciaux avec htmlentities() et décode les apres si besoin avec html_entity_decode()

  5. #5
    Membre émérite
    Avatar de Linaa
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    987
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 987
    Par défaut
    Tu peux aussi utiliser la balise <code>
    Ou encore & l t ; ? et ? & g t ; (sans espaces)

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Par défaut
    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.

  7. #7
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    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)

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Par défaut
    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 : 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);
    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é.

  9. #9
    Membre émérite
    Avatar de Linaa
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    987
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 987
    Par défaut
    Et avec ?

    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);
    Tout ce qui est entre guillemets en php est interprété... Entre simples quotes non

  10. #10
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Citation Envoyé par Linaa
    Et avec ?

    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);
    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.

  11. #11
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    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);

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  13. #13
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    .................................

    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...

  14. #14
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    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;

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Par défaut
    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 : 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);
    Ouuffff
    Merci à tous !!!

  16. #16
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Pour infos, le ? c'est le même souci que le dollar, c'est un caractère spécial donc faut l'échapper.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $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+

  17. #17
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    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)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [OL-2010] Comment "espacer" les messages reçus pour qu'ils soient plus visibles. ?
    Par jean du 86 dans le forum Outlook
    Réponses: 2
    Dernier message: 20/03/2015, 09h33
  2. Réponses: 19
    Dernier message: 28/01/2005, 09h52
  3. [WIFI] Comment bien configurer un reseau sans fil?
    Par Dnx dans le forum Développement
    Réponses: 1
    Dernier message: 19/01/2005, 08h50
  4. Comment dessiner sur un Bitmap sans scintillement ?
    Par TOTO32 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 10/01/2005, 10h11
  5. Comment mettre à jour une ligne sans doublon via déclencheur
    Par fuelcontact dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/08/2004, 15h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo