1

我正在尝试向 PEAR 包 BBCodeParser http://pear.php.net/package/HTML_BBCodeParser/docs/latest/li_HTML_BBCodeParser.html添加额外的标签,为此,我相信我需要将 Object.php 放在 \ php5.3.0\PEAR\pear\HTML\BBCodeParser\Filter 并调用 addFilter。

对象.php

<?php
/*
 New filter
 @todo Lots
*/
require_once 'HTML/BBCodeParser/Filter.php';

class HTML_BB_CodeParser_Filter_Object extends HTML_BBCodeParser_Filter {

var $_definedTags = array( 'object' => array ( 'htmlopen' => 'object',
          'htmlclose' => 'object',
          'allowed' => 'all',
          'attributes' => array()
              )
    )

}
?>

extbbcode.php

<?php
/*
 The test display page
*/
error_reporting(E_STRICT); 
require_once('HTML/BBCodeParser.php');

$parser = new HTML_BBCodeParser();

$parser->addFilter('object');

$parser->setText('[b]bold[/b] [object]test[/object]');
$parser->parse();
$parsed = $parser->getParsed();

echo htmlentities($parsed, ENT_QUOTES). ' | ';
echo $parsed;
?>

当我查看 extbbcode.php 时,我会收到此错误

严格标准:非静态方法 PEAR::getStaticProperty() 不应被静态调用,假设 $this 来自 D:\wamp\bin\php\php5.3.0\PEAR\pear\HTML\BBCodeParser.php 中的不兼容上下文在线169

如果我注释掉 $parser->addFilter('object'); 行然后它按预期工作,即产生有效输出。我还可以指定一个现有的过滤器,即

$parser->addFilter('basic');
$parser->addFilter('images');

基本.php ,图片.php

如果我使用无效过滤器调用 addFilter(即文件不存在),我会收到“加载过滤器 $filter 失败”消息。

有人能发现我做错了什么吗?在我看来,Object.php 包含在内,但会产生那些奇怪的 STRICT 消息。所以我的问题肯定出在那个文件上。

如果有人对这门课或那个错误信息有经验并且可以指出我正确的方向,我会很高兴:)

BBCodeParser.php

function addFilter($filter)
{
    $filter = ucfirst($filter);
    if (!array_key_exists($filter, $this->_filters)) {
        $class = 'HTML_BBCodeParser_Filter_'.$filter;
        @include_once 'HTML/BBCodeParser/Filter/'.$filter.'.php';
        if (!class_exists($class)) {
            PEAR::raiseError("Failed to load filter $filter", null, PEAR_ERROR_DIE);
        }
        $this->_filters[$filter] = new $class;
        $this->_definedTags = array_merge(
            $this->_definedTags,
            $this->_filters[$filter]->_definedTags
        );
    }
}

编辑:设法让 PEAR 在我当地的 WAMP 上工作,所以我可以通过排除我遇到的另一个问题来简化问题。

4

1 回答 1

1

You can add your filter directly to the BBCode class.

class HTML_BBCodeParser_Custom_Filter extends HTML_BBCodeParser  
{  
    var $_definedTags =   
        array('block' => array( 'htmlopen'  => 'blockquote',  
                    'htmlclose' => 'blockquote',  
                    'allowed'   => 'all',  
                    'attributes'=> array()  
                  ),  
              'line' =>  array( 'htmlopen'  => 'hr',  
                    'htmlclose' => '',  
                    'allowed'   => 'all',  
                    'attributes'=> array()  
                  ),
            );  

}

$BBCodeParser = new HTML_BBCodeParser();

$FilterName = 'Custom_Filter';
$BBCodeParser->_filters[$FilterName] = new HTML_BBCodeParser_Custom_Filter();
    $BBCodeParser->_definedTags = array_merge(
            $BBCodeParser->_definedTags,
            $BBCodeParser->_filters[$FilterName]->_definedTags);

echo $BBCodeParser->qparse("[block]This is a blockquote. [line][/block]");

Disclosure: The custom tags class were taken from here while the code to put the tags directly into the class were taken from the actual PEAR source code (HTML_BBCodeParser::addfilter).

于 2010-06-01T05:11:40.223 回答