ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## **Custom** 该指令可用于添加自定义过滤器;它几乎等同于现在不建议使用的`HTMLPurifier->addFilter()`方法。指定一系列具体实现。 ## **ExtractStyleBlocks.Escaping** 是否将危险字符和&分别转义为\\ 3C,\\ 3E和\\ 26。如果将StyleBlocks的内容放置在外部样式表中,则可以将其安全地设置为false,这样就不会将其解释为HTML。 ## **ExtractStyleBlocks.Scope** 如果您希望用户能够定义外部样式表,但仅允许他们为特定节点指定CSS声明并防止他们与其他元素打交道,请使用此伪指令。它接受任何有效的CSS选择器,并将其添加到从文档中提取的任何CSS声明之前。例如,如果将此指令设置为,`#user-content`并且用户使用选择器`a:hover`,则最终选择器将为`#user-content a:hover`。 可以使用逗号的缩写;考虑上面的示例,使用`#user-content, #user-content2`,最终选择器将为`#user-content a:hover, #user-content2 a:hover`。 **警告:**用户可能会使用顽皮的+选择器来绕过此措施。这是CSS Tidy 1.3中的错误,而不是HTML Purifier中的错误,我正在努力修复它。在此之前,HTML Purifier会执行基本检查以防止这种情况。 ## **ExtractStyleBlocks.TidyImpl** 如果保留为NULL,HTML Purifier将尝试实例化一个`csstidy`类以用于内部清理。通常这将足够好。 但是,对于受信任的用户输入,可以将其设置`false`为禁用清理。此外,您可以提供自己的Tidy接口的具体实现,以供使用,尽管我不知道您为什么要这么做。 ## **ExtractStyleBlocks** 该指令打开样式块提取过滤器,该过滤器`style`从输入HTML中删除块,使用CSSTidy清理它们,并将其放置在`StyleBlocks`context变量中,以供您进一步使用,通常放置在外部样式表中,或放置`style`在在`head`您的文档。 用法示例: ~~~ <?php header('Content-type: text/html; charset=utf-8'); echo '<?xml version="1.0" encoding="UTF-8"?>'; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <title>Filter.ExtractStyleBlocks</title> <?php require_once '/path/to/library/HTMLPurifier.auto.php'; require_once '/path/to/csstidy.class.php'; $dirty = '<style>body {color:#F00;}</style> Some text'; $config = HTMLPurifier_Config::createDefault(); $config->set('Filter', 'ExtractStyleBlocks', true); $purifier = new HTMLPurifier($config); $html = $purifier->purify($dirty); // This implementation writes the stylesheets to the styles/ directory. // You can also echo the styles inside the document, but it's a bit // more difficult to make sure they get interpreted properly by // browsers; try the usual CSS armoring techniques. $styles = $purifier->context->get('StyleBlocks'); $dir = 'styles/'; if (!is_dir($dir)) mkdir($dir); $hash = sha1($_GET['html']); foreach ($styles as $i => $style) { file_put_contents($name = $dir . $hash . "_$i"); echo '<link rel="stylesheet" type="text/css" href="'.$name.'" />'; } ?> </head> <body> <div> <?php echo $html; ?> </div> </body> </html> ~~~ **警告:**用户可能会使用此CSS发起图像崩溃攻击。对策很困难;仅仅限制CSS长度的范围是不够的(使用具有许多嵌套级别的相对长度允许在没有在样式表中实际指定它们的情况下获得较大的值),并且选择器的灵活性使得难以有选择地禁用长度图像标签(但是HTML Purifier不会在嵌入式样式中禁用CSS宽度和高度)。可能有两种有效的对策:将显式的宽度和高度设置为自动在文档中的所有图像中(不太可能),或者禁用宽度和高度(某种程度上合理)。是否应使用这些措施留给读者。 ## **YouTube** **警告:**不建议使用[%HTML.SafeObject](http://htmlpurifier.org/live/configdoc/plain.html#HTML.SafeObject)和[%Output.FlashCompat](http://htmlpurifier.org/live/configdoc/plain.html#Output.FlashCompat)(将二者都启用以允许YouTube视频和其他Flash内容)。 此指令可将YouTube视频嵌入HTML Purifier中。[有关嵌入](http://htmlpurifier.org/docs/enduser-youtube.html)过滤器的更多信息,请查看[此文档](http://htmlpurifier.org/docs/enduser-youtube.html)。