PHP / Regex / Getimagesize

Pyxouze Messages postés 195 Statut Membre -  
heyquem Messages postés 808 Statut Membre -
Bonjour,

je sollicite votre aide aujourd'hui car j'ai quelques difficultés avec un bout de code pour mon site. J'ai créé une sorte de BBcode qui me permet d'afficher le code HTML souhaité même si je le protège avec htmlspecialchars. Plus concrètement, j'écrit des billets pour mon blog et je les enregistre dans une base de donnée SQL. Avant de les afficher, je place ce code :

$article = preg_replace('#\[img\](.+)\/img\#U', '<div align="center"><a href="../6_images/$1"><img src="../6_images/$1" width="250"></a></div>', $article);


Ce code là fonctionne parfaitement. Seulement j'aimerais choisir la taille de l'image et mettre 520p de largeur si la taille réelle de l'image dépasse les 520p. Dans le cas contraire, si l'image est inférieur à 520p de largeur je conserve ses proportions d'origine.

Je planche vraiment sur le code et se serait vraiment sympa de me mettre sur une piste. Voilà là où j'en suis :

$article = preg_replace('#\[img\](.+)\/img\#U', '<div align="center"><a href="../6_images/$1"><img src="../6_images/$1" width="' . 
				$width = getimagesize("../6_images/$1"); 
				if ($width > 520) {
				echo '520'; 
} . '"></a></div>', $article);


Merci de m'aider dans la mesure du possible en me conseillant sur ce code =D
A voir également:

3 réponses

acloa Messages postés 85 Statut Membre 15
 
Pour t'aider donne moi deja l'adresse de ton site
0
Pyxouze Messages postés 195 Statut Membre 21
 
je n'arrive pas à envoyer l'adresse de mon site, j'ai l'impression que ccm n'autorise pas mon poste une fois que je l'ai envoyer. Mon site s'appelle webtutoatuce et tu peux trouver l'adresse complète dans mon profil
0
Pyxouze Messages postés 195 Statut Membre 21
 
Après y avoir réfléchis pendant quelques temps, je me demande si ce n'est pas plus simple d'écrire une REGEX comme ceci :

$article = preg_replace('#\[img=()\](.+)\/img\#isU', '<div align="center"><a href="../6_images/$1"><img src="../6_images/$1" width="$2"></a></div>', $article);


Enfait dans mon formulaire je préciserais quelle taille l'image fera de cette manière :

[img=520]img01.png/img

Quelqu'un connaît la syntaxe exact pour cette REGEX ?

Merci beaucoup
0
heyquem Messages postés 808 Statut Membre 131
 
salut


Je pense qu'il te faut utliser preg_replace_callback()
Ca cevrait donner quelque chose comme ca:


$article = preg_replace_callback(     
                            '#\[img=()\](.+)\/img\#isU',     

                            create_function(     
                                '$x',     
                                '$width = getimagesize("../6_images/"  
                                                       .$x[0]) ; '    
                                'if ($width > 520) {     
                                    return  '<div align="center">'     
                                            '<a href="../6_images/'    
                                            .$x[0].'">'     
                                            '<img src="../6_images/'    
                                            .$x[0].'" width="520">'     
                                            '</a></div>';     
                                } else {     
                                    return  '<div align="center">'     
                                            '<a href="../6_images/'    
                                            .$x[0].'">'     
                                            '<img src="../6_images/'    
                                            .$x[0].'" width="'    
                                            .$x[1].'">'     
                                            '</a></div>';   
                                }'    
                            ),  
                     
                        $article);



Je connais peu PHP. Je me suis donc peut être trompé dans l'utilisation de $x et dans la façon d'écrire les chaînes en PHP.
Note bien aussi que les instructions dans create_function() doivent être entourées de simples quotes ' : j'ai essayé de les mettre mais je ne sais pas comment considérer les instructions avec if et else, où commence et où s'arrête une instruction. Il y a certainement une erreur de syntaxe à corriger là-dedans.
Mais tu comprendras le principe général

Cependant il y a quelque chose qui me paraît bizarre: tu utilises $1 et $2 dans ton code, ce qui signifie qu'il doit y avoir deux groupes définis dans le pattern de la regex. Or je vois bien (.+?) à un endroit mais les parenthèses dans \[img=()\] ne capturent rien. N'y a t il pas une erreur à cet endroit ?
0