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 :

Remplacer une image avec <img scr


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut Remplacer une image avec <img scr
    j'ai un contenu $desc incluant ce tag je fais un code comme celà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $rech='/\[(.*?)\]/is';$rempl='<img src="$1"  title="$1" />';$desc=preg_replace($rech,$rempl,$desc);
    l'inconvénient c'est que çà me donne ce résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img scr="images/image/1.jpg" title="images/image/1.jpg" />
    alors que j'aimerais avoir comme résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img scr="images/image/1.jpg" title="1.jpg" />
    il manque un petit truc mais là je suis bloqué.merci pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    Il n'y a pas besoin de regex, tu peux faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    $txt = trim('[images/image/1.jpg]', '[]');
    $html = '<img src="' . $txt . '" title="' . basename($txt) . '" />';
    ?>

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    Bonjour,

    Il n'y a pas besoin de regex, tu peux faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    $txt = trim('[images/image/1.jpg]', '[]');
    $html = '<img src="' . $txt . '" title="' . basename($txt) . '" />';
    ?>
    oui j'ai déjà pensé a celà.mais c'est pas adpaté dans mon cas j'aimerais plutot une solution expreg

  4. #4
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    Essaie comme ceci...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $desc=preg_replace('%\[((?:.*?/)*(.+?)\.[a-z0-9]+)\]%i', '<img scr="$1" title="$2" />', $desc);
    En prenant soin au préalable que les données entre crochets representent effectivement une URL. Dans le cas contraire, si des guillemets sont présents par exemple, le code XHTML généré pour l'image serait "cassé".

    Edit :
    Voir aussi :
    parse_url (Analyse une URL et retourne ses composants)
    filter_var (Filtre une variable avec un filtre spécifique)

  5. #5
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour Eric2a,
    Avec ton pattern tu ne récupères pas le jpg du nom de fichier : title="1"Je l'ai un peu modifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $desc = preg_replace('%\[((?:.*?/)*((.+?)\.\w+))\]%i', '<img scr="$1" title="$2" />', $desc);

  6. #6
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Bien vu et Merci pour la correction rawsrc

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    houlà je pensais pas que ce serait si compliqué .
    petite question
    dans pourquoi ce ?
    dans pourquoi

  8. #8
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    La présence du point d'interrogation après le quantificateur (+) pemet à ce dernier d'être moins gourmand. Je l'ai plaçé par habitude mais il n'est pas utile dans ton cas après tout.

    Plus d'info sur les répetitions.

    Les caractères ?: après une parenthèse ouvrante permet de rendre ces parenthèses non capturantes.

    Pattern simplifié
    \[((?:.*/)*(.+\.\w+))\]
    \[	# Crochet gauche (caractère litteral)
    
    	(	# Parenthèse capturante #1
    		Contient se qui se trouve entre les crochets
    
    		(?:	# Parenthèse non capturante
    		Permet de "passer" le chemin du fichier constitué :
    
    			.*/		# d'éventuels caractères suivis d'un slash
    
    		)*	# La présence du chemin est facultative
    
    		(	# Parenthèse capturante #2 : Contient le nom du fichier
    
    			.+		# Au moins un caractère
    			\.		# Le point (caractère litteral)
    			\w+		# L'extension
    		)
    
    	)
    
    \]	# Crochet droit (caractère litteral)
    

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    merci eric2.Je crois avoir compris
    en m'inspirant de votre méthode j'ai essayé une autre méthode avec express reg tout sauf:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $rech='#\[([^\/]*\/)((.+?)\.\w+)\]#i';$rempl='<img src="$1$2" alt="$2" title="$2" />';
    $desc=preg_replace($rech,$rempl,$desc);
    mais ca ne marche pas .

  10. #10
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Pour faire comme tu as essayé, il faut utiliser ce regex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $desc = preg_replace('/(?:(\w.*)(.+\.\w+))/', '<img scr="$1$2" title="$2" />', $desc);
    Tu peux aussi essayer avec ce pattern :

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    Pour faire comme tu as essayé, il faut utiliser ce regex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $desc = preg_replace('/(?:(\w.*)(.+\.\w+))/', '<img scr="$1$2" title="$2" />', $desc);
    Tu peux aussi essayer avec ce pattern :
    désolé les 2 méthodes ne marchent pas .
    ca me donne toujours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img scr="images/image/1.jpg" title="images/image/1.jpg" />

  12. #12
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Ah pas les deux, la deuxième effectivement j'ai fais un raté la 1ère est correcte sauf qu'elle garde les [] en php (mais je dois l'avouer ne pas l'avoir testé avec le moteur regex de php) j'ai juste fais des essais avec ce super outil

  13. #13
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Citation Envoyé par bigs3232
    j'ai essayé une autre méthode...
    Pourtant dans le motif que je t'ai donné
    \[((?:.*/)*(.+\.\w+))\]
    nous capturons pour la chaine
    images/image/1.jpg
    	   L'URL complète (capture #1) : images/image/1.jpg
    	Le nom du fichier (capture #2) : 1.jpg
    C'est la partie du motif suivante
    ((?:.*/)*
    qui permet au moteur d'expressions rationnelles de se positionner sur le premier caractère du nom du fichier.

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    merci eric .ta technique marche nikel.simplement je voudrais essayer d'autres méthodes c'est tout.c'est comme celà qu'on apprend je pense en trouvant plusieurs solutions

  15. #15
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Citation Envoyé par bigs3232
    c'est comme celà qu'on apprend je pense en trouvant plusieurs solutions
    Oui, je m'en suis douté un peu en voyant que tu as testé aussi les classes négatives [^\/]*\/.

    Maintenant j'ai confirmation... +1

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par Eric2a Voir le message
    Oui, je m'en suis douté un peu en voyant que tu as testé aussi les classes négatives [^\/]*\/.

    Maintenant j'ai confirmation... +1
    le probleme c'est qu'avec ma classe négative ca ne marche pas quand c'est moi qui propose la solution.Je suis un petit débutant aussi

Discussions similaires

  1. Réponses: 6
    Dernier message: 02/02/2011, 10h13
  2. Réponses: 4
    Dernier message: 29/10/2010, 14h40
  3. [img] Remplacer une image inexistante
    Par themoye dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 10/10/2009, 11h49
  4. [Débutante] Création d'une image avec un composant
    Par gwendo dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 09/07/2004, 09h58
  5. PL/SQL - Comment afficher une image avec HTP ?
    Par patmaba dans le forum PL/SQL
    Réponses: 2
    Dernier message: 08/07/2004, 09h28

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