Je travaille sur un petit système d'agrégation de flux et j'ai un soucis
sur la partie finale:
mon texte contient des références à des images (###photo1##,
###photo2##) et j'ai des variables qui contiennent les liens vers ces
images:
$flux->Thumbnail[1] = "/images/tn_photo1.jpg";
$flux->Image[1] = "/images/photo1.jpg";
$flux->Thumbnail[2] = "/images/tn_photo2.jpg";
$flux->Image[2] = "/images/photo2.jpg";
je cherche donc à utiliser un preg_replace du genre:
$text = preg_replace("@###photo(\d{1,})##@Usi", "<img
src=\"".$flux->Image[$1]."\">, $text);
Et bien sur, ça ne marche pas...
une idée?
Merci d'avance
--
Astuces pour webmasters: http://www.crazycat.info
Tchat francophone: http://www.crazy-irc.net
je cherche donc à utiliser un preg_replace du genre: $text = preg_replace("@###photo(d{1,})##@Usi", "<img src="".$flux->Image[$1]."">, $text);
Et bien sur, ça ne marche pas... une idée?
Comme d'hab : <http://fr2.php.net/preg_replace_callback>.
Olivier Miakinen
Le 07/06/2006 17:37, je répondais à CrazyCat :
Comme d'hab : <http://fr2.php.net/preg_replace_callback>.
... sauf que cela impose de passer $flux sous forme de variable globale, ce qui n'est pas très heureux. En lisant les commentaires dans la doc de preg_replace_callback, je vois que l'on peut aussi utiliser preg_replace avec l'option e :
<cit. http://fr3.php.net/manual/fr/reference.pcre.pattern.modifiers.php> e Avec cette option, preg_replace() effectue la substitution normale des références arrières dans la chaîne de remplacement, puis l'évalue comme un code PHP, et utilise le résultat pour remplacer la chaîne de recherche. Les simples et doubles quotes sont échappées avec des anti-slashes () dans les références arrières substituées. Seule preg_replace() utilise cette option. Elle est ignorée par les autres. Note : Cette option n'est pas valable en PHP 3. </cit.>
Donc probablement un truc du genre : function html_img($flux, $index) { return "<img src='" . $flux->Image[$index] . "'>"; } $text = preg_replace("@###photo(d+)##@e", "html_img('$flux', '$1')", $text);
À priori ça devrait pouvoir se faire sans appel à une fonction, mais il faudra alors jongler avec trois niveaux de guillemets, ce qui est trop pour la petite tête.
Le 07/06/2006 17:37, je répondais à CrazyCat :
Comme d'hab : <http://fr2.php.net/preg_replace_callback>.
... sauf que cela impose de passer $flux sous forme de variable globale,
ce qui n'est pas très heureux. En lisant les commentaires dans la doc de
preg_replace_callback, je vois que l'on peut aussi utiliser preg_replace
avec l'option e :
<cit. http://fr3.php.net/manual/fr/reference.pcre.pattern.modifiers.php>
e
Avec cette option, preg_replace() effectue la substitution normale
des références arrières dans la chaîne de remplacement, puis l'évalue
comme un code PHP, et utilise le résultat pour remplacer la chaîne de
recherche. Les simples et doubles quotes sont échappées avec des
anti-slashes () dans les références arrières substituées.
Seule preg_replace() utilise cette option. Elle est ignorée par les
autres.
Note : Cette option n'est pas valable en PHP 3.
</cit.>
Donc probablement un truc du genre :
function html_img($flux, $index) {
return "<img src='" . $flux->Image[$index] . "'>";
}
$text = preg_replace("@###photo(d+)##@e",
"html_img('$flux', '$1')", $text);
À priori ça devrait pouvoir se faire sans appel à une fonction, mais il
faudra alors jongler avec trois niveaux de guillemets, ce qui est trop
pour la petite tête.
Comme d'hab : <http://fr2.php.net/preg_replace_callback>.
... sauf que cela impose de passer $flux sous forme de variable globale, ce qui n'est pas très heureux. En lisant les commentaires dans la doc de preg_replace_callback, je vois que l'on peut aussi utiliser preg_replace avec l'option e :
<cit. http://fr3.php.net/manual/fr/reference.pcre.pattern.modifiers.php> e Avec cette option, preg_replace() effectue la substitution normale des références arrières dans la chaîne de remplacement, puis l'évalue comme un code PHP, et utilise le résultat pour remplacer la chaîne de recherche. Les simples et doubles quotes sont échappées avec des anti-slashes () dans les références arrières substituées. Seule preg_replace() utilise cette option. Elle est ignorée par les autres. Note : Cette option n'est pas valable en PHP 3. </cit.>
Donc probablement un truc du genre : function html_img($flux, $index) { return "<img src='" . $flux->Image[$index] . "'>"; } $text = preg_replace("@###photo(d+)##@e", "html_img('$flux', '$1')", $text);
À priori ça devrait pouvoir se faire sans appel à une fonction, mais il faudra alors jongler avec trois niveaux de guillemets, ce qui est trop pour la petite tête.