使用 Html Purifier 从提交的 html 页面内容中提取样式块

Extract style block from submited html page content with Html Purifier

提问人:Saeid Dadkhah 提问时间:5/6/2023 更新时间:5/6/2023 访问量:35

问:

如何使用html净化器提取块样式。 我尝试使用以下代码来提取样式表单html内容。 但我不能;<style></style>

$config = \HTMLPurifier_Config::createDefault();
$config->set('HTML.Doctype', 'HTML 4.01 Transitional');
$config->set('Cache.SerializerPath', storage_path('app/purifier'));
$config->set('Filter.ExtractStyleBlocks', true);
$purifier = new \HTMLPurifier($config);

$dirty = '<style>body {color:#F00;}</style> Some text';
$html = $purifier->purify($dirty);
$styles = $purifier->context->get('StyleBlocks');

var_dump($styles);
php html css 样式 htmlpurifier

评论


答:

2赞 shemjay 5/6/2023 #1

我不太确定我是否理解你的问题。也许你可以更深入一点。

据我所知,您提供的代码是正确的,它应该从 HTML 内容中提取块。但是,提取的样式的输出可能与预期不符。<style>

该变量将包含提取的样式块的关联数组,其中键是样式块在输入 HTML 字符串中的位置,值是样式块的内容。 这是我的意思的一个例子:$styles

$dirty = '<style>body {color:#F00;}</style> Some text';
$html = $purifier->purify($dirty);
$styles = $purifier->context->get('StyleBlocks');

foreach ($styles as $position => $style) {
    echo "Style block at position $position: $style\n";
}

这应该为您提供以下内容:

Style block at position 0: body {color:#F00;}

如果要在应用程序中使用提取的样式,可以在 HTML 代码中将它们输出为内联样式,也可以将它们保存到文件中并将该文件包含在 HTML 代码中。

评论

0赞 Saeid Dadkhah 5/6/2023
感谢。但是我的$styles数组是空的。我不知道问题出在哪里。