scharly3
Messages postés88Date d'inscriptionmardi 1 juillet 2003StatutMembreDernière intervention 9 juillet 2009
-
21 juin 2008 à 16:45
Farfadh
Messages postés68Date d'inscriptiondimanche 1 avril 2007StatutMembreDernière intervention 7 juillet 2008
-
2 juil. 2008 à 08:01
Bonjour,
Me voici dans la phase de finalisation d'un forum et pour l'insertion des images j'utilise :
<hr size="2" width="100%" />
function filtreimage($message)
{
list($debut, $fin) = explode("", $fin);
if($image!="") {
$infos_image = getImageSize($image); // Fonction getImageSize permet de connaitre les dimensions de l'imgage
if($infos_image[0]<= 400 && $infos_image[1]<= 400)// si l'image fait moins de 400 * 400
{
$image="";
}
else // si elle fait plus de 400*400
{
if($infos_image[0]<=$infos_image[1]) // Redimension de selon la largeur ou la longueur
{
$width=$infos_image[0]/$infos_image[1]*400;
$height=400;
}
else
{
$width=400;
$height=$infos_image[1]/$infos_image[0]*400;
}
$image="";
}
$message=$debut.$image.$fin;//reformation du message avec les balises
}
return $message;
}
<hr size="2" width="100%" />
Or, avec cette méthode, je ne peut traiter qu'une image par message les autres images éventuellement présentes sont supprimées, que puis-je utiliser d'autre que "list($debut, $fin) = explode("", $fin); " pour extraire et traiter mon image?
Merci.
Evangun
Messages postés1980Date d'inscriptiondimanche 20 février 2005StatutMembreDernière intervention24 septembre 20124 21 juin 2008 à 17:35
Bonjour,
je ne comprend pas bien le problème... explode te renvoie un tableau. Avec ton list tu ne prends que les deux premiers éléments alors qu'il faudrait traiter le tableau entier avec une simple boucle foreach...
'
);
return preg_replace($motifs, $remplace, $chaine);
}
<hr size ="2" width="100%" />Bon je sais que c'est pas des plus propres versiones, et que dans certaines conditions d'arborescence elle déglingue... mais elle marche ;)
Bonne journée!
<hr size="2" width="100%" />Developpement Web Yannic GraphiX | Mon CMS yArt et sa démo <hr size="2" width="10" />
Vous n’avez pas trouvé la réponse que vous recherchez ?
scharly3
Messages postés88Date d'inscriptionmardi 1 juillet 2003StatutMembreDernière intervention 9 juillet 2009 21 juin 2008 à 17:28
Tous mes autres bbcode utilise les regex, mais la je doit récupéré l'url pour la traiter dans une fonction pour l'image ce n'est donc à ma connaissance pas faisable par ce moyen la.
scharly3
Messages postés88Date d'inscriptionmardi 1 juillet 2003StatutMembreDernière intervention 9 juillet 2009 21 juin 2008 à 18:29
Bonjour,
J'ai essayé de comprendre la fonction preg_replace_callback sans grand succès,
en effet lorsque j'effectue ceci: $message=preg_replace_callback("#\[img\](.+?)\[\/img\]#isU","filtreimage",$message);
Ma fonction filtreimage recoit un tableau de plus il semble que les soit transmit aussi à la fonction.
Une petite indication sur son fonctionnement me serrait d'une grande aide.
Pour l'instant mon code ressemble à ceci:
<hr size="2" width="100%" />$message=preg_replace_callback("#\[img\](.+?)\[\/img\]#isU","filtreimage",$message);
function filtreimage($images)
{
foreach($images as $image)
{
if($image!="") {
$infos_image = getImageSize($image); // Fonction getImageSize permet de connaitre les dimensions de l'imgage
if($infos_image[0]<= 400 && $infos_image[1]<= 400)// si l'image fait moins de 400 * 400
{
$image="";
}
else // si elle fait plus de 400*400
{
if($infos_image[0]<=$infos_image[1]) // Redimension de selon la largeur ou la longueur
{
$width=$infos_image[0]/$infos_image[1]*400;
$height=400;
}
else
{
$width=400;
$height=$infos_image[1]/$infos_image[0]*400;
}
$image="";
pysco68
Messages postés681Date d'inscriptionsamedi 26 février 2005StatutMembreDernière intervention21 août 20148 21 juin 2008 à 18:39
...le premier exemple est un peux opaque effectivement.... mais il ne te reste qu'a faire un foreach sur le tout... et normalement tu peux traiter tes infos correctement ;)
<hr size="2" width="100%" />Developpement Web Yannic GraphiX | Mon CMS yArt et sa démo <hr size="2" width="10" />
Farfadh
Messages postés68Date d'inscriptiondimanche 1 avril 2007StatutMembreDernière intervention 7 juillet 20084 2 juil. 2008 à 08:01
Je tiens à dire que le BBCode standard présente une faille d'importance : il n'y a pas de manière de préciser qu'un caractère spécial ne doit pas être interprété. Ce n'est pas très grave, mais avec les codes standards on ne peut pas utiliser les crochets librement dans un texte. Si on tente sur un forum d'expliquer à quelqu'un qu'il faut utiliser la balise texte pour mettre le texte en caractères gras, les balises BBCode vont être interprétées et on aura pas le résultat escompté. Vous me direz qu'on peut contourner ça en écrivant [ b]texte[ /b], les espaces vont empêcher le BBCode d'opérer la transformation. Mais ce n'est pas tout, si vous utilisez une balise [balise=attribut], vous ne pourrez pas mettre de crochet fermant dans votre attribut.
Deux solutions pour parer à ce problème s'offre à ceux que ça intéresse :
- le code HTML propose des codes pour afficher les caractères qui composent ses balises sous la forme &code; et il suffit de faire des codes équivalents. Seulement ça impose de traiter tous les éléments découpés par les expressions régulières avec une fonction qui va reconvertir ces codes en caractères.
- les chaînes de caractères proposent le plus souvent des caractères d'échappement pour insérer des caractères spéciaux et on peut imaginer que tout crochet précédé d'un antislash ne sera pas interprété comme un caractère composant une balise.
Jusqu'ici j'ai adopté la seconde solution, mais je me rend compte que mon choix n'est pas logique, puisque le fonctionnement du BBCode se rappoche de celui du HTML, pas des chaînes de caractères. De toute manière, je devais réécrire mon script de conversion. Quand ce sera fait je publierai une source. La question que je me pose c'est si les utilisateurs sauront s'en servir, mais ça ne devrait pas poser de problème.
De toute manière, dans un avenir relativement proche, le champ de texte avec mise en forme comme celui de ce forum sera beaucoup plus répandu et la question ne se posera plus.