出于某种原因,HTMLPurifier似乎正在从iframe中删除allowfullscreen元素,但我不确定为什么,我已经进行了一些研究,似乎无法找到一个使用了几年的答案。以下是我如何启动净化器的方法。
require 'htmlpurify/library/HTMLPurifier.auto.php';
$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.TargetBlank', 'true');
$config->set('HTML.SafeIframe', true);
$config->set('URI.SafeIframeRegexp', '%^(https?:)?//(www\.youtube(?:-nocookie)?\.com/embed/|player\.vimeo\.com/video/)%');
$config->set('HTML.DefinitionID', 'usertag');
$config->set('HTML.DefinitionRev', 1);
if ($def = $config->maybeGetRawHTMLDefinition()) {
$def->addElement('user', 'Block', 'Flow', 'Common', array('name' => 'ID'));
}
$purifier = new HTMLPurifier($config);
我正在净化此<iframe title="YouTube Player" src="https://www.youtube.com/embed/J---aiyznGQ" width="560" height="315" frameborder="0" allowfullscreen></iframe>
,但它只是删除了allowfullscreen元素。
我的正则表达式错了吗?有我不应该添加的东西,还是我想念的东西?
“ allowfullscreen”不是an attribute HTML Purifier inherently recognises for IFrames,这意味着如果要支持它,则需要customise您的HTML Purifier模块。可以执行类似的操作(此代码未经测试,但应将您设置在正确的路径上):
$config = HTMLPurifier_Config::createDefault();
// ...
$config->set('HTML.DefinitionID', 'enduser-customize.html tutorial');
$config->set('HTML.DefinitionRev', 1);
$config->set('Cache.DefinitionImpl', null); // remove this later!
$def = $config->getHTMLDefinition(true);
$def->addAttribute('iframe', 'allowfullscreen', 'Bool');
看看是否对您有帮助?如果您发现自己被卡住,请在[stackoverflow]的this answer from 2016中发布一些其他注意事项(但是请注意,如果使用HTML.AllowedElements
和HTML.AllowedAttributes
配置,则它们是完整的白名单-如果仅使用这些指令将白名单[ C0],其他所有HTML标记都将被剥离)。