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 :

preg_replace différent pour chaque résultat capturé [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Technicien Réseau & Informatique
    Inscrit en
    Février 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Technicien Réseau & Informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 66
    Points : 105
    Points
    105
    Par défaut preg_replace différent pour chaque résultat capturé
    Bonjour à tous !

    Voila j'ai un petit soucis avec un bout de code !

    J'ai une variable $message ou dedans j'ai un post de forum. Dans cette variable il y'a du texte et parfois des balises du type bbcode ([img], etc..)

    Je souhaite faire un traitement sur les balises images dans cette variable $message.
    J'arrive donc a recuperer tout les liens image avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $regex = "/\[img\]([^\[]*)\[\/img\]/i";
     
    if (preg_match_all($regex, $message, $matches)) {
    $matchesdef = $matches[1];
     
    $replace = array ('[img]','[/img]');
    $matchesdef = preg_replace($replace,'', $matchesdef);
    $count = count($matchesdef);
    for ($i = 0; $i < sizeof($matchesdef); $i ++) {
     
    $size = getimagesize($matchesdef[$i]);
    $size2 = $size[0];}
    si a partir de la je fais un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo "matchesdef[$i] $size2";
    il me renvoi bien chaque lien d'image avec la largeur de l'image !

    Mais car il y'a un mais !
    Au lieu de faire un echo je souhaite modifier l'ensemble des images qu'il pourrait y'avoir dans la variable message !
    Il faut aussi que je transforme mon bbcode en code html, j'utilise donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $message = preg_replace("/\[img\]([^\[]*)\[\/img\]/i","<div style='overflow:hidden;width:500px;'><a href='\\1' target=\"_blank\"><img src='\\1' width=$size2 border=0 ></a>",$message);
    Cela fonctionne si j'ai une seul image dans la variable $message.

    mais si par exemple j'ai 3 images elle auront toute le meme width ! Je n'arrive a appliquer a chaque image son propre width ($size2)!

    Je n'arrive pas a avancer
    Comment faire pour que le code soit complet et que chaque image trouver dans la variable $message affiche la taille $size2 ?
    Une idée ?

  2. #2
    Membre éclairé
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Points : 835
    Points
    835
    Par défaut
    Bonjour,
    Tu peux essayer d'utiliser preg_replace_callback.
    Va va appeler une fonction avec en parametre ce qui matche ton expression reguiliere.
    Donc si tu recuepère l'adresse de l'image, tu peux en extraire sa taille dans la fonction, et composer la chaine de remplacement avec cette donnée.
    Z.

  3. #3
    Membre régulier
    Homme Profil pro
    Technicien Réseau & Informatique
    Inscrit en
    Février 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Technicien Réseau & Informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 66
    Points : 105
    Points
    105
    Par défaut
    merci pour votre réponse !

    J'arrive pas a faire comme je veux avec le preg_replace_callback.

    Auriez vous un exemple par rapport a ce que j'ai donné ? (sans maché le travail non plus !! )

    Merci

  4. #4
    Membre éclairé
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Points : 835
    Points
    835
    Par défaut
    Un ptit poil prédigéré:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    $message = "TON CODE PHPBB";
     
    $message = preg_replace_callback("/(\[img\])([^\[]*)(\[\/img\])/im", "preg_function",$message);
    echo $message;
     
     
    function preg_function($matches){
    	list($size) = getimagesize($matches[2]);
    	return "<div style='overflow:hidden;width:500px;'><a href='" . $matches[2] . "' target=\"_blank\"><img src='" . $matches[2] . "' width=$size border=0 ></a>";
    }
    ?>

  5. #5
    Membre régulier
    Homme Profil pro
    Technicien Réseau & Informatique
    Inscrit en
    Février 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Technicien Réseau & Informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 66
    Points : 105
    Points
    105
    Par défaut
    Citation Envoyé par Zwiter Voir le message
    Un ptit poil prédigéré:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    $message = "TON CODE PHPBB";
     
    $message = preg_replace_callback("/(\[img\])([^\[]*)(\[\/img\])/im", "preg_function",$message);
    echo $message;
     
     
    function preg_function($matches){
    	list($size) = getimagesize($matches[2]);
    	return "<div style='overflow:hidden;width:500px;'><a href='" . $matches[2] . "' target=\"_blank\"><img src='" . $matches[2] . "' width=$size border=0 ></a>";
    }
    ?>
    woot oO

    tu ma tué la !

    deux jours que je cherche et la ca fonctionne direct. Un grand merci.
    Je vais serieusement me pencher sur la fonction preg_replace_callback et l'adapter du coup pour pas mal de chose. Effectivement la c'est exactement ce que je souhaité. Je ne connaissais pas du tout cette fonction et sur les sites officiels, les explications avait du mal a rentré dans ma ptite tête !

    Merci beaucoup.

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

Discussions similaires

  1. Charset et Interclassement différent pour chaque ligne
    Par berceker united dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 28/08/2007, 23h44
  2. Réponses: 5
    Dernier message: 13/06/2007, 11h33
  3. [2.0 WebPart]EditorZone différente pour chaque Webpartzone
    Par globeriding dans le forum ASP.NET
    Réponses: 1
    Dernier message: 27/04/2007, 12h20
  4. Icones différentes pour chaque bureau ?
    Par sala|-| dans le forum KDE
    Réponses: 6
    Dernier message: 01/02/2007, 20h17
  5. Réponses: 2
    Dernier message: 20/04/2006, 14h33

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