downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

bbcode_destroy> <bbcode_add_smiley
Last updated: Fri, 14 Aug 2009

view this page in

bbcode_create

(PECL bbcode >= 0.9.0)

bbcode_createCrée une ressource BBCode

Description

resource bbcode_create ([ array $bbcode_initial_tags ] )

Cette fonction retourne une nouvelle ressource BBCode, utilisée pour analyser les chaînes BBCode.

Liste de paramètres

bbcode_initial_tags

Un tableau associatif contenant les noms des balises en tant que clés, et les paramètres requis afin d'analyser correctement le code BBCode en tant que valeurs. Les paires clés/valeurs suivantes sont supportées :

  • flags optionnel - un jeu de drapeaux, basé sur les constantes BBCODE_FLAGS_*.
  • type requis - un entier, indiquant le type de drapeau. Utilisez les constantes BBCODE_TYPE_*.
  • open_tag requis - la chaîne HTML de remplacement pour la balise ouvrante.
  • close_tag requis - la chaîne HTML de remplacement pour la balise fermante.
  • default_arg optionnel - utilise cette valeur en tant qu'argument par défaut si aucun n'est fourni et que tag_type est du type OPTARG.
  • content_handling optionnel - Indique la fonction de rappel utilisée pour modifier le contenu. La notation orientée objet est supportée uniquement depuis la version 0.10.1. La signature de la fonction de rappel est de la forme : (string $content, string $argument)
  • param_handling optionnel - Spécifie la fonction de rappel utilisée pour modifier l'argument. La notation orientée objet est supportée uniquement depuis la version 0.10.1. La signature de la fonction de rappel est de la forme : (string $content, string $argument)
  • childs optionnel - Liste des enfants acceptés en tant que balise. Le format de la liste est une succession de chaînes, séparées par une virgule. Si la liste commence par un point d'exclamation, ce sera la liste des enfants rejetées comme balises.
  • parent optionnel - Liste des enfants acceptés pour la balise. Le format de la liste est une succession de chaînes, séparées par une virgule.

Valeurs de retour

Retourne un BBCode_Container

Exemples

Exemple #1 Exemple avec bbcode_create()

<?php
$arrayBBCode
=array(
    
''=>         array('type'=>BBCODE_TYPE_ROOT,  'childs'=>'!i'),
    
'i'=>        array('type'=>BBCODE_TYPE_NOARG'open_tag'=>'<i>',
                    
'close_tag'=>'</i>''childs'=>'b'),
    
'url'=>      array('type'=>BBCODE_TYPE_OPTARG,
                    
'open_tag'=>'<a href="{PARAM}">''close_tag'=>'</a>',
                    
'default_arg'=>'{CONTENT}',
                    
'childs'=>'b,i'),
    
'img'=>      array('type'=>BBCODE_TYPE_NOARG,
                    
'open_tag'=>'<img src="''close_tag'=>'" />',
                    
'childs'=>''),
    
'b'=>        array('type'=>BBCODE_TYPE_NOARG'open_tag'=>'<b>',
                    
'close_tag'=>'</b>'),
);
$text=<<<EOF
[b]Bold Text[/b]
[i]Italic Text[/i]
[url]http://www.php.net/[/url]
[url=http://pecl.php.net/][b]Content Text[/b][/url]
[img]http://static.php.net/www.php.net/images/php.gif[/img]
[url=http://www.php.net/]
[img]http://static.php.net/www.php.net/images/php.gif[/img]
[/url]
EOF;
$BBHandler=bbcode_create($arrayBBCode);
echo 
bbcode_parse($BBHandler,$text);
?>

L'exemple ci-dessus va afficher :

<b>Bold Text</b>
<i>Italic Text</i>
<a href="http://www.php.net/">http://www.php.net/</a>
<a href="http://pecl.php.net/"><b>Content Text</b></a>
<img src="http://static.php.net/www.php.net/images/php.gif" />
<a href="http://www.php.net/">
[img]http://static.php.net/www.php.net/images/php.gif[/img]
</a>



add a note add a note User Contributed Notes
bbcode_create
rothenbergxxx at gmail dot com
04-Sep-2009 05:58
For those without the BBCode extension, here's a relatively elegant function to do the trick.
Keep in mind that if you're using XHTML and one of your users tries to overlap lags <b>Like <i>so</b></i>, it will invalidate your markup. Still working on an expression for this.

<?php
   
function bb_parse($string) {
        while (
preg_match_all('`\[(.+?)=?(.*?)\](.+?)\[/\1\]`', $string, $matches)) foreach ($matches[0] as $key => $match) {
            list(
$tag, $param, $innertext) = array($matches[1][$key], $matches[2][$key], $matches[3][$key]);
            switch (
$tag) {
                case
'b': $replacement = "<strong>$innertext</strong>"; break;
                case
'i': $replacement = "<em>$innertext</em>"; break;
                case
'size': $replacement = "<span style=\"font-size: $param;\">$innertext</a>"; break;
                case
'color': $replacement = "<span style=\"color: $param;\">$innertext</a>"; break;
                case
'center': $replacement = "<div class=\"centered\">$innertext</div>"; break;
                case
'quote': $replacement = "<blockquote>$innertext</blockquote>" . $param? "<cite>$param</cite>" : ''; break;
                case
'url': $replacement = '<a href="' . ($param? $param : $innertext) . "\">$innertext</a>"; break;
                case
'img':
                    list(
$width, $height) = preg_split('`[Xx]`', $param);
                   
$replacement = "<img src=\"$innertext\" " . (is_numeric($width)? "width=\"$width\" " : '') . (is_numeric($height)? "height=\"$height\" " : '') . '/>';
                break;
                case
'video':
                   
$videourl = parse_url($innertext);
                   
parse_str($videourl['query'], $videoquery);
                    if (
strpos($videourl['host'], 'youtube.com') !== FALSE) $replacement = '<embed src="http://www.youtube.com/v/' . $videoquery['v'] . '" type="application/x-shockwave-flash" width="425" height="344"></embed>';
                    if (
strpos($videourl['host'], 'google.com') !== FALSE) $replacement = '<embed src="http://video.google.com/googleplayer.swf?docid=' . $videoquery['docid'] . '" width="400" height="326" type="application/x-shockwave-flash"></embed>';
                break;
            }
           
$string = str_replace($match, $replacement, $string);
        }
        return
$string;
    }
?>

[EDIT BY danbrown AT php DOT net: Contains a bugfix provided by (ramonvandam AT gmail DOT com) on 04-SEP-09 to address an improperly-defined parameter.]

bbcode_destroy> <bbcode_add_smiley
Last updated: Fri, 14 Aug 2009
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites