PHP / Regex / Getimagesize
Pyxouze
Messages postés
195
Statut
Membre
-
heyquem Messages postés 808 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 :
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 :
Merci de m'aider dans la mesure du possible en me conseillant sur ce code =D
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:
- PHP / Regex / Getimagesize
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Regex ne commence pas par - Forum Programmation
- Retour à la ligne php ✓ - Forum PHP
- Retour a la ligne avec Echo comment faire ? - Forum Webmastering
3 réponses
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
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 :
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
$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
salut
Je pense qu'il te faut utliser preg_replace_callback()
Ca cevrait donner quelque chose comme ca:
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 ?
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 ?