当前位置: 首页 > 知识库问答 >
问题:

HTML净化器和spl_自动加载_寄存器

汲雅珺
2023-03-14

我的页面的文件夹

system/ <-- offline files (classes, cronjobs, libraries ...)
online/ <-- contain all php scripts ( available online )

system/

classes <-- all my own classes inside.
... directories ...
libraries/htmlpurifier <- contain HTMLPurifier

我想使用spl_自动加载_寄存器()

<?php

define("DOC_ROOT", dirname(__DIR__));

function hTMLPurifier($class) {
 require DOC_ROOT . '/system/libraries/htmlpurifier/library/' . strtolower(str_replace('\\', '/', $class)) . '.php';
 }

 function myAutoload($class) {
 require DOC_ROOT . '/' . strtolower(str_replace('\\', '/', $class)) . '.php';
 }

spl_autoload_register('hTMLPurifier');
spl_autoload_register('myAutoload');


$config = HTMLPurifier_Config::createDefault();
$purifier = new HTMLPurifier($config);
$clean_html = $purifier->purify($dirty_html);
?>

我得到跟随消息。

 .../htmlpurifier_config.php): failed to open stream: No such file or directory in ...

如果插入

  "require_once '/path/to/HTMLPurifier.auto.php';"

在顶部

<?php

define("DOC_ROOT", dirname(__DIR__));
require_once '/path/to/HTMLPurifier.auto.php';

function myAutoload($class) {
  require DOC_ROOT . '/' . strtolower(str_replace('\\', '/', $class)) . '.php';
 }


 spl_autoload_register('myAutoload');


 $config = HTMLPurifier_Config::createDefault();
 $purifier = new HTMLPurifier($config);
 $clean_html = $purifier->purify($dirty_html);
 ?>

一切都是工作。

我想加载所有类与spl_autoload_register()只有没有插入

"require_once '/path/to/HTMLPurifier.auto.php';" 

在上面。我怎么能做到呢???

共有1个答案

司徒光霁
2023-03-14

HTML净化器不适用于PHP名称空间,因此用/替换\\\不会获得您所寻求的结果。您的自动加载逻辑正在尝试从文件HTMLPurifier\u Config加载类HTMLPurifier\u Config。php-所以您想要的是这样的:

function autoloadHtmlPurifier($class) {
    require DOC_ROOT . '/system/libraries/htmlpurifier/library/'
        . str_replace('_', '/', $class) . '.php';
}
spl_autoload_register('autoloadHtmlPurifier');

(注意此函数如何不使用strtolower(),而是用/替换。)

但是,看看HTML净化器的自动加载实现:

public static function getPath($class)
{
    if (strncmp('HTMLPurifier', $class, 12) !== 0) {
        return false;
    }
    // Custom implementations
    if (strncmp('HTMLPurifier_Language_', $class, 22) === 0) {
        $code = str_replace('_', '-', substr($class, 22));
        $file = 'HTMLPurifier/Language/classes/' . $code . '.php';
    } else {
        $file = str_replace('_', '/', $class) . '.php';
    }
    if (!file_exists(HTMLPURIFIER_PREFIX . '/' . $file)) {
        return false;
    }
    return $file;
 }

...由于语言类edge case,简单的替换很有可能仍然无法正常工作。但你可以试试这个:

function autoloadHtmlPurifier($class) {
    require DOC_ROOT . '/system/libraries/htmlpurifier/library/'
        . str_replace('_', '/', $class) . '.php';
}
spl_autoload_register('autoloadHtmlPurifier');
spl_autoload_register(array('HTMLPurifier_Bootstrap', 'autoload'));

它使用您的自定义自动加载器加载HTMLPurifier\u引导程序类,因此您不需要将其包含在require中,但仍然可以使用规范的HTML净化器自动加载器。

也就是说,不管是哪种情况,缺点是如果HTML净化器真的切换到名称空间,你的自动加载程序就会崩溃。我真的建议您坚持使用require\u once(DOC\u ROOT./system/libraries/htmlpurifier/library/htmlpurifier.auto.php')方法,或者使用composer安装HTML净化器,这将为您自动加载该库(可能还有其他库):

对于指定自动加载信息的库,Composer将生成供应商/自动加载。php文件。您只需包含此文件并开始使用这些库提供的类,无需任何额外工作:

require __DIR__ . '/vendor/autoload.php';

 类似资料:
  • 优化级别1:类映射生成 怎么运行它呢? 有几个选项可以启用此功能: 在 composer.json 的配置中设置 "optimize-autoloader": true 使用 -o / --optimize-autoloader 调用安装或更新 使用 -o / --optimize 调用 dump-autoload  它有什么作用? 类映射生成实质上是将 PSR-4/PSR-0 规则转换为类映射规

  • 有没有办法让HTML净化器保留在呈现的HTML中通常会看到的隐式空间? 例如,在以下情况下,您通常希望和之间有一个空格: 例1 例2

  • 本文向大家介绍asp.net-core 寄存器和手动解析,包括了asp.net-core 寄存器和手动解析的使用技巧和注意事项,需要的朋友参考一下 示例 描述依赖关系的首选方法是使用构造函数注入,它遵循显式依赖性原则: ITestService.cs TestService.cs Startup.cs(ConfigureServices) HomeController.cs            

  • 对于简单的数据净化,使用 htmlentities() 函数, 复杂的数据净化则使用 HTML Purifier 库 经 HTML Purifier 4.4.0 测试 在任何 wbe 应用中展示用户输出时,首先对其进行“净化”去除任何潜在危险的 HTML 是非常必要的。 一个恶意的用户可以制作某些 HTML,若被你的 web 应用直接输出,对查看它的人来说会很危险。 虽然可以尝试使用正则表达式

  • 实地址模式下的寄存器集合包括8086定义的所有寄存器,加上80386新引入的寄存器:FS, GS, 调试寄存器,控制寄存器,和测试寄存器。可以显式的使用段寄存器FS和GS作为操作数,而且可以使用新引入的段-重写前缀来利用FS和GS来计算地址。指令可以利用操作数长度前缀来使用32位操作数。 保护模式下操作,检查80386选择符和描述符的指令导致未定义操作码陷阱(中断6);这些指令包括:VERR, V

  • 我刚刚开始使用composer进行依赖关系管理,我很难弄清楚我是如何不遵守psr-4进行自动加载的,所以我来这里寻求建议。我有一个生成随机值的类,它已经在packagist上了。项目结构如下(我已将composer.json文件标记为A和B): 项目总监 composer.jsonA composer.jsonB 最后是RlandValue.php文件,它声明了ejFrancis命名空间 当我运行