HTMLPurifier从YouTube视频中删除允许全屏显示

问题描述 投票:0回答:1

出于某种原因,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元素。

我的正则表达式错了吗?有我不应该添加的东西,还是我想念的东西?

php htmlpurifier
1个回答
0
投票

“ 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.AllowedElementsHTML.AllowedAttributes配置,则它们是完整的白名单-如果仅使用这些指令将白名单[ C0],其他所有HTML标记都将被剥离)。

© www.soinside.com 2019 - 2024. All rights reserved.