3

我想将 HTMLpurifier 与 Zend 框架结合使用。我很想用 Zend_Loader 加载类及其文件。你将如何包括它?您会只使用 HTMLPurifier.auto.php 还是您知道更好的方法?

4

4 回答 4

5

我在 Zend Framework 项目中使用 HTML Purifier 作为过滤器。这是我的课程的修改版本:

require_once 'HTMLPurifier.includes.php';
require_once 'HTMLPurifier.autoload.php';

class My_Filter_HtmlPurifier implements Zend_Filter_Interface
{
    protected $_htmlPurifier = null;

    public function __construct($options = null)
    {
        // set up configuration
        $config = HTMLPurifier_Config::createDefault();
        $config->set('HTML.DefinitionID', 'My Filter');
        $config->set('HTML.DefinitionRev', 1); // increment when configuration changes
        // $config->set('Cache.DefinitionImpl', null); // comment out after finalizing the config

        // Doctype
        $config->set('HTML.Doctype', 'XHTML 1.0 Transitional');

        // configure caching
        $cachePath = APPLICATION_PATH . '/../cache/htmlpurifier';
        if (!is_dir($cachePath)) {
            mkdir($cachePath, 0755, true);
        }
        $cachePath = realpath($cachePath);
        $config->set('Cache.SerializerPath', $cachePath);

        if (!is_null($options)) {
            //$config = HTMLPurifier_Config::createDefault();
            foreach ($options as $option) {
                $config->set($option[0], $option[1], $option[2]);
            }
        }

        $this->_htmlPurifier = new HTMLPurifier($config);
    }

    public function filter($value)
    {
        return $this->_htmlPurifier->purify($value);
    }
}
于 2010-07-06T18:59:24.043 回答
0

除非我误解了这个问题(或 HTMLpurifier)。如果你有 Zend_Loader 运行并且它被设置为自动加载。

require_once('Zend/Loader.php');
Zend_Loader::registerAutoload();

或者类似的东西。将 HTMLpurifier 类放在您的库目录中。我只是不确定它的实际类名。

您可以将类文件放在库目录中并按其名称调用它,或者将其扔进杂项包中。

例子

// SITE/library/Zend/Auth.php
class Zend_Auth
{
}

// SITE/library/htmlpurifier.php
class htmlpurifier
{
}

// SITE/library/misc/htmlpurifier.php
class Misc_HTMLpurifier
{
}

说得通?

于 2009-03-15T03:46:36.527 回答
0

您可以使用 Zend_Loader 类注册一个自动加载器类。当您不带任何参数调用 registerAutoLoad() 方法时,您实际上是将 Zend_Loader 本身注册为自动加载器。所以:

Zend_Loader::registerAutoLoad();

// 等于: Zend_Loader::registerAutoLoad('Zend_Loader'),true);

Zend_Loader 尝试使用 Zend Framework 的命名约定加载类,如下所示:

  • 每个类都在单独的文件中定义
  • 每个类名都以大写字母开头
  • 类名中的下划线,表示目录级别。

所以如果'Zend_Loader'是一个类的名字,它在你的路径'Zend'目录下的'Loader.php'文件中定义。对你来说 PHP 可以从文件 Zend/Loader.php 文件加载这个类

如果您的类遵循此命名约定,则可以使用相同的自动加载器自动加载它们。否则,您需要定义自己的自动加载器。编写一个自动加载器类绞盘可以扩展 Zend_Loader,并定义加载功能,以便它将加载具有其他命名约定的类。然后用 Zend_Loader 注册你自己的自动加载器。像这样:

Zend_Loader::registerAutoLoad('myLoader',true);
于 2009-03-16T05:14:59.147 回答
0

我已将 HTMLPurifier 存档库的内容放在我的库路径中。所以我有这个目录结构:

library/
  HTMLPurifier\
  HTMLPurifier.auto.php
  ...
  HTMLPurifier.safe-includes.php

然后我把它放在我使用 HTMLPurifier 的文件的顶部:

require_once 'HTMLPurifier.safe-includes.php';

丑陋,但它的工作。

于 2010-10-18T13:12:38.600 回答