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 :


$regex = "/\[img\]([^\[]*)\[\/img\]/i";

if (preg_match_all($regex, $message, $matches)) {
$matchesdef = $matches[1];

$replace = array ('','');
$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


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 :


$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 :x
Comment faire pour que le code soit complet et que chaque image trouver dans la variable $message affiche la taille $size2 ?
Une idée ?
Edité le 08/12/2009 à 16:32

Plutôt que t’embéter ainsi, pourquoi ne pas utiliser preg_replace_callback ?

alors effectivement, comme tu dis, plutot que de m’embeter comme ca j’aurais mieux fais d’utiliser preg_replace_callback que je ne connaissais pas !!

Après documentation, consultation sur divers forums, etc… voici la solution qui fonctionne (merci a Zwiter du forum www.developpez.net).


<?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>";
}
?>

voila, effectivement ca simplifie grandement la chose ! Merci a vous :slight_smile: