Résolu [PHP] font-size max BBCODE

Solutions (3)
Tags :
  • chaine
  • Php
  • Script
  • Programmation
|
Bonjour,

J'ai réaliser un petit script qui transforme des balises bbcode en html, mon soucis ce trouve avec la balise <font-size...>
Voici mon script:

  1. <?php
  2.  
  3. function bbcode($chaine) {
  4.  
  5. $chaine = stripcslashes($chaine);
  6.  
  7. //Mise en forme texte
  8. $chaine = preg_replace('/\[b\](.+?)\[\/b\]/', '<b>$1</b>', $chaine);
  9. $chaine = preg_replace('/\[i\](.+?)\[\/i\]/', '<i>$1</i>', $chaine);
  10. $chaine = preg_replace('/\[u\](.+?)\[\/u\]/', '<u>$1</u>', $chaine);
  11. $chaine = preg_replace('/\[size=(.+?)\](.+?)\[\/size\]/', '<span style="font-size:$1px">$2</span>', $chaine);
  12. $chaine = preg_replace('/\[color=(.+?)\](.+?)\[\/color\]/', '<font color=$1>$2</font>', $chaine);
  13.  
  14. //Images et url
  15. $chaine = preg_replace('/\[img\](.+?)\[\/img\]/', '<img src="$1" />', $chaine);
  16. $chaine = preg_replace('/\[url\](.+?)\[\/url\]/', '<a href="$1" target="_blank">$1</a>', $chaine);
  17. $chaine = preg_replace('/\[mail\](.+?)\[\/mail\]/', '<a href="mailto:$1">$1</a>', $chaine);
  18.  
  19. //Autre
  20. $chaine = preg_replace('/\[left\](.+?)\[\/left\]/', '<div align="left">$1</div>', $chaine);
  21. $chaine = preg_replace('/\[center\](.+?)\[\/center\]/', '<div align="center">$1</div>', $chaine);
  22. $chaine = preg_replace('/\[right\](.+?)\[\/right\]/', '<div align="right">$1</div>', $chaine);
  23.  
  24. $chaine = nl2br($chaine);
  25.  
  26. return($chaine);
  27. }
  28.  
  29. ?>


Tout fonctionne sauf si je fais
  1. [size=1000]test[/size]
ca décalle toute ma div, normal, d'où ma question comment faire pour limiter une taille maximum (genre 40px)?
Merci d'avance!
Contenus similaires
Meilleure solution
partage
|
Tu ne pourras pas simplement avec une expression régulière.
Tu peux limiter à 99 facilement:
  1. $chaine = preg_replace('/\[size=([0-9]{1,2})\](.+?)\[\/size\]/', '<span style="font-size:$1px">$2</span>', $chaine);

Ou pour aller de 0 à 39:
  1. $chaine = preg_replace('/\[size=([0-3]?[0-9])\](.+?)\[\/size\]/', '<span style="font-size:$1px">$2</span>', $chaine);

Mais le mieux serait à mon avis d'utiliser une petite fonction externe appelée avec preg_replace_callback:
  1. $chaine = preg_replace_callback(
  2. '/\[size=(.+?)\](.+?)\[\/size\]/',
  3. create_function('$matches', '
  4. if (intval($matches[1])==0) $size = 10;
  5. elseif (intval($matches[1])>=40) $size = 40;
  6. else $size = intval($matches[1]);
  7. return \'<span style="font-size:\'.$size.\'px">\'.$matches[2].\'</span>\';'
  8. ),
  9. $chaine
  10. );


La dernière solution n'est pas testée, il y a surement des soucis avec la définition de la fonction :) 
  • Commenter cette solution |
Score
0
òh
òi
|
Meilleure réponse sélectionnée par allstar27.
  • Commenter cette réponse |
Score
0
òh
òi
|
Je vais me contenter de limiter à 99 ;) 

Merci Crazy!
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS