begin process at 2012 05 27 20:18:32
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Chaîne de caratère

 > FONCTION BBCODE, COMPATIBLE W3C

FONCTION BBCODE, COMPATIBLE W3C


 Information sur la source

Note :
6,5 / 10 - par 2 personnes
6,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Chaîne de caratère Classé sous :bbcode, fonction, xhtml, php, parse Niveau :Débutant Date de création :08/08/2008 Date de mise à jour :17/04/2011 19:58:33 Vu :6 657

Auteur : fred6184

Ecrire un message privé
Site perso
Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note

 Description

Après de très nombreuses recherches sur le et je n'ai jamais réussi a trouver une fonction qui interprète le bbcode de façon correcte. j'en ai donc récupérée plusieurs, puis je  les ai mixés et enfin j'ai retouché la fonction ainsi obtenue pour arriver à cette fonction.En plus d'interpréter le bbcode, elle génère du code xhtml conforme au w3c.
on doit encore pouvoir l'améliorer, c'est pourquoi je vous invite a me faire parvenir vos idées d'amélioration et tout autre commentaires.

réécriture de la fonction le 12/4/2011

Source

  • <?php
  • //fonction d'interprétation bbcode, dernière modif 12/04/2011
  • // Frederic AULA - http://www.f-webconcept.net.
  • function BBtags($t) {
  • $entree = array(
  • '#\[b\](.*)\[/b\]#Usi',
  • '#\[i\](.*)\[/i\]#Usi',
  • '#\[u\](.*)\[/u\]#Usi',
  • '#\[s\](.*)\[/s\]#Usi',
  • '#\[quote\](.*)\[/quote\]#Usi',
  • '#\[code\](.*)\[/code\]#Usi',
  • '#\[img\](.*)\[/img\]#Usi',
  • '#\[url\](.*)\[/url\]#Usi',
  • '#\[email\](.*)\[/email\]#Usi',
  • '#\[url=(.*)\](.*)\[/url\]#Usi',
  • '#\[email=(.*)\](.*)\[/email\]#Usi',
  • '#\[left\](.*)\[/left\]#Usi',
  • '#\[center\](.*)\[/center\]#Usi',
  • '#\[justify\](.*)\[/justify\]#Usi',
  • '#\[right\](.*)\[/right\]#Usi',
  • '!\[list\](.+)\[/list\]!Umi',
  • '!\[\*\](.+)(?=(\[\*\]|</ul>))!Umi',
  • '#\[color=(.*)\](.*)\[/color\]#Usi',
  • '#\[size=(.*)\](.*)\[/size\]#Usi',
  • '#\[br\]#Usi',
  • '#\[hr\]#Usi'
  • );
  • $sortie = array(
  • '<strong>$1</strong>',
  • '<span style="font-style: italic;">$1</span>',
  • '<span style="text-decoration:underline;">$1</span>',
  • '<span style="text-decoration:line-through;">$1</span>',
  • '<cite>$1</cite>',
  • '<pre>$1</pre>',
  • '<img src="$1" alt="Image" />',
  • '<a href="$1">$1</a>',
  • '<a href="mailto:$1" >$1</a>',
  • '<a href="$1">$2</a>',
  • '<a href="mailto:$1" >$2</a>',
  • '<div style="text-align:left;">$1</div>',
  • '<div style="text-align:center;">$1</div>',
  • '<div style="text-align:justify;">$1</div>',
  • '<div style="text-align:right;">$1</div>',
  • '<ul> $1 </ul>',
  • '<li>$1</li>',
  • '<span style="color: $1;">$2</span>',
  • '<span style="font-size: $1;">$2</span>',
  • '<br />',
  • '<hr />'
  • );
  • $count = count($entree)-1;
  • for($i=0;$i<=$count;$i++)
  • {
  • $t = preg_replace($entree[$i],$sortie[$i],$t);
  • }
  • //retour
  • return $t;
  • }
  • ?>
<?php
//fonction d'interprétation bbcode, dernière modif 12/04/2011
// Frederic AULA - http://www.f-webconcept.net.

function BBtags($t) {

$entree = array(
        '#\[b\](.*)\[/b\]#Usi',
        '#\[i\](.*)\[/i\]#Usi',
        '#\[u\](.*)\[/u\]#Usi',
        '#\[s\](.*)\[/s\]#Usi',
		'#\[quote\](.*)\[/quote\]#Usi',
		'#\[code\](.*)\[/code\]#Usi',
        '#\[img\](.*)\[/img\]#Usi',
        '#\[url\](.*)\[/url\]#Usi',
		'#\[email\](.*)\[/email\]#Usi',
        '#\[url=(.*)\](.*)\[/url\]#Usi',
		'#\[email=(.*)\](.*)\[/email\]#Usi',
        '#\[left\](.*)\[/left\]#Usi',
        '#\[center\](.*)\[/center\]#Usi',
		'#\[justify\](.*)\[/justify\]#Usi',
        '#\[right\](.*)\[/right\]#Usi',
		'!\[list\](.+)\[/list\]!Umi',
		'!\[\*\](.+)(?=(\[\*\]|</ul>))!Umi',		
		'#\[color=(.*)\](.*)\[/color\]#Usi',
		'#\[size=(.*)\](.*)\[/size\]#Usi',
		'#\[br\]#Usi',
		'#\[hr\]#Usi'
		
    );
$sortie = array(				
        '<strong>$1</strong>',
        '<span style="font-style: italic;">$1</span>',
        '<span style="text-decoration:underline;">$1</span>',
        '<span style="text-decoration:line-through;">$1</span>',
		'<cite>$1</cite>',
		'<pre>$1</pre>',
        '<img src="$1" alt="Image" />',
        '<a href="$1">$1</a>',
		'<a href="mailto:$1" >$1</a>',
        '<a href="$1">$2</a>',
		'<a href="mailto:$1" >$2</a>',
        '<div style="text-align:left;">$1</div>',
        '<div style="text-align:center;">$1</div>',
		'<div style="text-align:justify;">$1</div>',
        '<div style="text-align:right;">$1</div>',
		'<ul> $1 </ul>',
		'<li>$1</li>',		
		'<span style="color: $1;">$2</span>',
		'<span style="font-size: $1;">$2</span>',
		'<br />',
		'<hr />'
    );
    $count = count($entree)-1;
    for($i=0;$i<=$count;$i++)
    {
        $t = preg_replace($entree[$i],$sortie[$i],$t);
    }

  //retour
	return $t;
}
?>



 Historique

08 août 2008 12:44:21 :
modification description
08 août 2008 12:46:58 :
modif intro
16 août 2008 14:36:10 :
-remplacement des double quotes par des simple quotes -modification interprétation de [quote] et [code] -suppresion des target="_blank"
17 août 2008 15:41:10 :
corrections de bugs
17 août 2008 18:09:21 :
modification de l'interpretation de la balise b
12 avril 2011 22:03:16 :
Réécriture de la fonction plus proprement.
17 avril 2011 19:58:33 :
maj description

 Sources de la même categorie

ADRESSE ABSOLUE DE LA PAGE EN COURS, AVEC VARIABLES $_GET par Dariumis
Source avec Zip CLASSE D'OBJET DE RECHERCHE DE MOTS DANS DES TABLEAUX ET/OU ... par 8Tnerolf8
RÉCUPÉRER LES MINIATURES D'UNE VIDÉO YOUTUBE par tefa24600
Source avec Zip Source avec une capture CONVERTISSEUR DE NOMBRES EN TEXTE par macruz
Source avec Zip Source avec une capture CODAGE TEXTE >HTML, ISO, SPECIALCHARS, URL ET DECODAGE par Salva9473

 Sources en rapport avec celle ci

Source avec Zip YEXPLORER - EXPLORATEUR PHP par silverelfic
Source avec Zip Source avec une capture PAGINATION AUTOMATIQUE PAR APPEL DE FONCTIONS PHP par gigaprint
Source avec Zip XAMP : EXEMPLE DE SCRIPT D'IDENTIFICATION SIMPLE par roddd
Source avec une capture FONCTION EN ESCALIER CONSTRUITE EN PHP par GossBuster
DU BBCODE AU (X)HTML par OniTalus

Commentaires et avis

Commentaire de klicksoe le 08/08/2008 13:06:42 7/10

Salut,

ton code est simpliste et je dirait même trop simpliste et il y a quelques petites choses à revoir.
Par exemple, oublier les doubles quotes pour en mettre des simples.

Une autre petite chose qui la concerne l'utilisation en elle-même :
Tu fais à chaque fois un remplacement, mais si la personne oublie le backslashe, cela ne marche plus, il faudrait que tu essaies d'utiliser les regex afin de detecter l'abscence ou non du backslashe cela arrangerai bien des problèmes futurs  ^^.


Perso, j'ai abandonné le BBCode au profit de Tiny MCE, mais on sait jamais, ça peux servire à quelqu'un.

Commentaire de coucou747 le 08/08/2008 14:17:03 administrateur CS

si tu lis la doc de str_replace, tu verras qu'on peut lui passer des array en parametre, de facon a ne faire qu'un seul str_replace.

Commentaire de Palleas_44 le 08/08/2008 14:44:23

J'aurais largement preféré une regexp, personnelement :)

Commentaire de webdeb le 08/08/2008 14:48:23 6/10

Beaucoup trop complexe comme code. Comme le dit Coucou747, on peut passer des arrays à la fonction str_replace(). Donc on peut déjà faire en une passe ce que tu fais en plusieurs... De même pour les preg_replace() on peut largement les optimiser en utilisant par exemple des parenthèses non capturantes.

Enfin, ton code n'a rien de conforme au W3C. Il l'est d'un point de vue purement syntaxique mais surement pas d'un point de vue sémantique. Depuis quand utilise-t-on des tableau HTML pour représenter des blocs de citation alors qu'il existe les tags q, blockquote et cite pour cela ? La mise en exergue et gras s'effectue respectivement avec les tags <em> et <strong>.

Je te laisse revoir et corriger ta source ;)

Commentaire de PastisD1 le 11/08/2008 02:38:11

De plus target="_blank" n'est pas accepter en xhtml 1.0 strict ^^

Commentaire de fred6184 le 16/08/2008 14:42:00

bonjour a tous j'ai fait quelques modifs, :

-remplacement des double quotes par des simple quotes
-modification interprétation de [quote] et [code]
-suppression des target="_blank"

pour ce qui est de la méthode utilisé avec les fonction je modifierai ça quand j'aurai un peu plus de temps.

je pense qu'il y a déjà un mieux, bien que ca soit loin d'être parfait.

@webdeb : <em> et <strong> sont des balise qui serve a marquer l'importance du texte qu'ele contiennent. leur rendu graphique est variable d'un navigateur a l'autre. c'est pour ca que je traduit la balise [b] de la façon ou je le fait.

@klicksoe : j'ai deja testé Tiny MCE et puis je suis revenu au bbcode.


@PastisD1 : effectivement c'est corrigé.

Commentaire de Palleas_44 le 16/08/2008 15:10:38

> <em> et <strong> sont des balise qui serve a marquer l'importance du texte qu'ele contiennent. leur rendu graphique est variable d'un navigateur a l'autre. c'est pour ca que je traduit la balise [b] de la façon ou je le fait.

Oui, mais non, il n'y a aucune sémantique dans l'utilisation de b, ou est la séparation forme/fond ?

Commentaire de webdeb le 16/08/2008 18:31:15

+1 avec Palleas ;)

Commentaire de fred6184 le 17/08/2008 15:44:36

bah selon moi le plus dur lorsqu'on fait un site c'est d'avoir toujours le même rendu... si j'ai décidé d'afficher un code en gras , je veux qu'il apparaisse en gras tout le temps.

mais je comprend votre point de vue

pour ceux qui veulent mettre strong a la place de mes span pas de soucis..

Commentaire de Palleas_44 le 17/08/2008 16:02:03

> bah selon moi le plus dur lorsqu'on fait un site c'est d'avoir toujours le même rendu

C'est alors que dieu inventa la CSS !

Commentaire de fred6184 le 17/08/2008 17:14:48

et que son père bill gates créa une grosse merde appelé Internet explorer ;-)

Commentaire de Palleas_44 le 17/08/2008 17:56:10

Tu n'as pas l'air de savoir de quoi tu parles !

Fais moi plaisir, tu vas tester un b, un strong et un span avec un font-weight:bold; tu verras que le rendu est le même : un texte en gras !

Commentaire de fred6184 le 17/08/2008 18:07:22

oui je sais que le rendu est le même (en tout cas sous firefox et sous ie), pis tu m'a converti je vais mettre des strong a la place..

au niveau de mon savoir j'estime avoir pas mal de notions que j'ai acquises ici et la sur le web. il est certain que tu en a plus que moi a en juger ton profil car  tu fait de l'informatique ton métier et moi un simple loisir ( mon domaine c'est les medocs).. je m'incline donc.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

PHP et BBCODE [ par TheGorgo ] Bonjour à tous, Je cherche a créer un script pour mon forum, http://conteslegendes.free.frum (un pe de pub au passage). Le but de ce script est de po fonctions "globales" en php? [ par zut69 ] <td id="HB_Focus_Element" unselectab="" background="" h une fonction php to html [ par adrick ] bonjour j'aimerais savoir s'il existe une fonction php (ou tout autre moyen) de récupéré le code source de la page généré par phpdonc en gros exporter Problème codage php [ par schpice ] Voila j'ai effectué un code en php mais celui-ci ne marche pas et je ne vois pas pouquoi, donc je viens demander de l'aide si des fois qq1 voit mes er configurer php.ini fonction mail() en localhost [ par jphilippev ] bonjourje travaille pour l'instant en local pour tester mes pagesqui créer un espace sécurisé pour mon siteet j'ai une page inscription.php ou l'on re comment faire une fonction C dans du PHP [ par surotout ] &lt;?php/* --- --------- Bonjour ------------------- --- *//* --- -- Je souhaite executer ------------- --- *//* --- -- une commande C --------------- appeler une fonction php dans un lien html [ par gaillardo ] Bonjour,Voici mon souci :    J'ai crée une page fonction.php qui regrouper toutes mes fonctions et j'aimerai pouvoir appeler l'une d'elles depuis ma p Utiliser une fonction php dans un evenement. [ par kornetmuse ] Bonjour tout le monde,Je souhaiterais faire appel à une fonction php lors d'un evenement,&lt;TD&gt;&lt;input type="text" id="login" name="login" onBlu fonction mail [ par buster20 ] j'ai un gros probleme j'ai deja chang SMTP dans php.ini mais j'ai toujours ce message Warning: mail(): Failed to connect to mailserver at "localhost" problème d'appel a la fonction require [ par cripgil ] Bonjour chers développeurs :   J'ai rencontré un problème quand à l'appel de la fonction « require ('nomfichier.inc')», je dispose de la ve


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,312 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales