Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何为PECL bbcode扩展创建[youtube]-标记?_Php_Youtube_Bbcode_Pecl - Fatal编程技术网

Php 如何为PECL bbcode扩展创建[youtube]-标记?

Php 如何为PECL bbcode扩展创建[youtube]-标记?,php,youtube,bbcode,pecl,Php,Youtube,Bbcode,Pecl,我使用解析BBCode标记 有谁能告诉我一种方法来替换BBCode标签之间的文本,而不是用HTML标签包围它?我想建立一个[youtube]标签: [youtube]w0ffwDYo00Q[/youtube] 我对此标记的配置如下所示: $tags = array( 'youtube' => array( 'type' => BBCODE_TYPE_NOARG, 'open_tag' => '<o

我使用解析BBCode标记

有谁能告诉我一种方法来替换BBCode标签之间的文本,而不是用HTML标签包围它?我想建立一个
[youtube]
标签:

[youtube]w0ffwDYo00Q[/youtube]
我对此标记的配置如下所示:

$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' => '',
    ),
);
有人知道怎么解决这个问题吗


提前谢谢

我现在无法测试,所以不确定它是否有效。。。但也许你可以试试这个:

的文档介绍了可用于配置标记的键/值。
其中一个关键点是:

内容处理
可选-提供 用于修改 内容。面向对象表示法 仅在0.10.1回调后支持 原型是字符串名(string) $content,string$参数)

那么,如果您定义该属性,使其成为指向修改内容的函数的链接,该怎么办。。。例如,通过将其设置为空字符串来修改它

也许是这样的:

$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',
    ),
);
或者可能是这样:

function remove_handler(& $content, $argument) {
  $content = '';
}
如果运气好的话,这可能足以删除内容


在对我之前的建议发表评论后进行编辑


你好

这一次,我尝试了我的建议,它似乎起了作用

首先,您可以为
打开标签
关闭标签
设置
;这样,
content\u处理
回调将负责所有工作。
像这样的,所以:

$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 '';
    }
}
$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)
视频被加载;它叫西蒙的猫“猫人做”,顺便说一句



希望这能更好地解决您的问题,这次:-)

谢谢您的回答。内容被删除,但不幸的是,这种情况发生在内容呈现到HTML之前;)刚刚编辑了我的答案,加上另一个似乎有效的命题,这次;-)嗨,谢谢你进一步调查:)我想我会那样做的。
$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;