Я не могу проверить прямо сейчас, поэтому не уверен, что это работает ... Но, может быть, вы можете попробовать это:
Документация bbcode_create
описывает ключи / значения, которые можно использовать для настройки вашего тега.
Один из этих ключей:
content_handling
опционально - дает
обратный вызов, используемый для модификации
содержание . Объектно-ориентированная нотация
поддерживается только с 0.10.1 обратного вызова
прототип является именем строки (строка
$ content, строка $ аргумент)
Итак, что, если вы определите это свойство, чтобы оно было ссылкой на функцию, изменяющую содержимое ... Например, изменив его, установив для него пустую строку?
Примерно так, может быть:
$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',
),
);
И объявление функции remove_handler
таким образом:
function remove_handler($content, $argument) {
return '';
}
Или, может быть, так:
function remove_handler(& $content, $argument) {
$content = '';
}
Если повезет, этого может быть достаточно для удаления контента?
РЕДАКТИРОВАТЬ после комментария о моем предыдущем предложении
Привет еще раз,
На этот раз я попробовал то, что предлагаю, и похоже, что оно работает ; -)
Во-первых, вы можете установить ''
для open_tag
и close_tag
; таким образом, обратный вызов content_handling
будет отвечать за всю работу.
Как то так, так:
$tags = array(
'youtube' => array(
'type' => BBCODE_TYPE_NOARG,
'open_tag' => '',
'close_tag' => '',
'content_handling' => 'generate_youtube_tag',
),
);
Функция обратного вызова будет выглядеть следующим образом:
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 '';
}
}
На самом деле генерируется весь тег <object>
, включая оба вхождения идентификатора YouTube.
И если вы называете это так:
$text = '[youtube]w0ffwDYo00Q[/youtube]';
$bbHandler = bbcode_create($tags);
$output = bbcode_parse($bbHandler, $text);
var_dump($output);
Вы получите этот вывод:
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)
Что-то вроде того, что должно быть в порядке ; -)
На самом деле, если вы просто выведите его:
echo $output;
Видео загружено; это называется Кошка Саймона 'Cat Man do' , кстати ; -)
Надеюсь, это решит вашу проблему лучше, на этот раз : -)