Je ne peux pas tester en ce moment, donc pas sûr que cela fonctionne ... Mais vous pouvez peut-être essayer ceci:
La documentation de bbcode_create
décrit les clés/valeurs que vous pouvez utiliser pour configurer votre balise.
L'une de ces clés est:
content_handling
en option - Attribue la rappel utilisé pour la modification du contenu . Notation orientée objet uniquement pris en charge depuis 0.10.1 rappel prototype est le nom de chaîne (chaîne contenu $, string $ argument)
Alors, si vous définissez cette propriété, de sorte qu'il est un lien vers une fonction modifier le contenu ... le modifier en le définissant sur une chaîne vide, par exemple?
Quelque chose comme ça, peut-être:
$tags = array(
'youtube' => array(
'type' => BBCODE_TYPE_NOARG,
'open_tag' =>
'<object width="425" height="350">
<param name="movie" value="http://www.youtube.com/v/{CONTENT}"></param>
<embed src="http://www.youtube.com/v/{CONTENT}" type="application/x-shockwave-flash" width="425" height="350"></embed>
</object>',
'close_tag' => '',
'content_handling' => 'remove_handler',
),
);
et déclarant la fonction remove_handler
de cette façon:
function remove_handler($content, $argument) {
return '';
}
Ou peut-être de cette façon:
function remove_handler(& $content, $argument) {
$content = '';
}
Avec un peu de chance, cela pourrait être suffisant pour supprimer le contenu?
EDIT après le commentaire au sujet de ma proposition précédente
Salut à nouveau,
Cette fois-ci, je l'ai essayé ce que je veux dire, et il semble fonctionner ;-)
D'abord, vous pouvez définir ''
pour les deux open_tag
et close_tag
; De cette façon, le rappel content_handling
sera responsable de tout le travail.
Quelque chose comme ça, alors:
$tags = array(
'youtube' => array(
'type' => BBCODE_TYPE_NOARG,
'open_tag' => '',
'close_tag' => '',
'content_handling' => 'generate_youtube_tag',
),
);
La fonction de rappel alors ressembler à ceci:
function generate_youtube_tag($content, $argument) {
// TODO some security checks on $content !
// Here, I've assumed that a youtube id only contains letters and numbers
// But I don't know it that's always the case
if (preg_match('/^[\d\w]+$/', $content)) {
return <<<NEW_CONTENT
<object width="425" height="350">
<param name="movie" value="http://www.youtube.com/v/{$content}"></param>
<embed src="http://www.youtube.com/v/{$content}" type="application/x-shockwave-flash" width="425" height="350"></embed>
</object>
NEW_CONTENT;
}
else {
return '';
}
}
Il génère en fait toute étiquette <object>
, y compris les occurences de l'id du youtube.
Et si vous l'appelez comme ceci:
$text = '[youtube]w0ffwDYo00Q[/youtube]';
$bbHandler = bbcode_create($tags);
$output = bbcode_parse($bbHandler, $text);
var_dump($output);
Vous obtenez cette sortie:
string '<object width="425" height="350">
<param name="movie" value="http://www.youtube.com/v/w0ffwDYo00Q"></param>
<embed src="http://www.youtube.com/v/w0ffwDYo00Q" type="application/x-shockwave-flash" width="425" height="350"></embed>
</object>' (length=246)
Ce qui ressemble un peu quelque chose qui devrait être ok ;-)
En fait, si vous venez de le sortir:
echo $output;
La vidéo est chargée; il est appelé 'Cat Man Do Cat Simon, btw ;-)
Hope this résout votre problème mieux, cette fois-ci :-)
Merci pour votre réponse. Le contenu est supprimé, mais malheureusement cela arrive avant qu'il ne soit rendu dans le HTML;) – marcusj
Comment :-(dommage :-( –
Juste édité ma réponse, avec une autre proposition, qui semble fonctionner, cette fois ;-) –