数据库yii2

时间:2018-09-02 14:31:13

标签: database yii2 htmlpurifier

我在数据库中有要输出的文件的路径。  像:

<audio src="/yii2-biblioteca/frontend/web/uploads/audio/lya1.mp3" controls type="audio/mpeg"> 

我正在使用:

<?=HtmlPurifier::process($model->audio)?>

用于输出。

我对图像使用了相同的东西,没关系,它可以工作,但是对于音频和pdf,嵌入的东西却不多。 在开始使用pdf时,我用js功能更改了一些内容,但这并不是负面影响。我把所有内容都恢复为原来的状态,但是现在不起作用。

pdf示例:<embed src="/yii2-biblioteca/frontend/web/uploads/pdf/dying.pdf" type="application/pdf" width="100%" height="100%" />

1 个答案:

答案 0 :(得分:1)

Yii2的HTMLPurifier包装器需要a second argument

echo HtmlPurifier::process($html, [
    // options go here
]);

对于<embed>,您应该可以使用HTML.SafeEmbed设置:

echo HtmlPurifier::process($html, [
    'HTML.SafeEmbed' => true,
]);

不幸的是,对于<audio>,这里的根本问题是HTML Purifier不支持HTML5,这会使添加起来更加复杂。

user-supplied patches to allow HTML Purifier to understand HTML5,但是据我所知,没有一个已经过审核,因此很难说这将对您的网站安全产生什么影响。 (可以说,具有userland提供的HTML5定义的HTML Purifier仍然比没有HTML Purifier更好。)

我已经给出了一些粗略的说明,说明如何使HTML Purifier(库本身,而不是它的Yii2包装器)仅意识到another question上的<audio>标记。引用相关内容:

  

您必须查看"Customize!" end-user documentation,它会告诉您如何添加HTML Purifier无法识别的标签和属性。

     

引用链接文档中最生动的代码示例   (此代码向HTML Purifier教授了<form>标签):

     
    

输入一些代码的时间:

$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);
[...]
$form = $def->addElement(
    'form',   // name
    'Block',  // content set
    'Flow', // allowed children
    'Common', // attribute collection
    array( // attributes
        'action*' => 'URI',
        'method' => 'Enum#get|post',
        'name' => 'ID'
    )
);
$form->excludes = array('form' => true);
         

每个参数都对应于我们提出的问题之一。请注意,我们在action属性的末尾添加了一个星号     指示它是必需的。如果有人指定没有该表格     属性,标记将被删除。另外,末尾的额外行是     特殊的额外声明,可防止表单嵌套在其中     彼此。

  
     

按照这些说明进行纯化程序后,   了解<audio>,将标记<audio>添加到您的配置中   白名单将起作用。

因此,简而言之,如果您希望仅纯化<audio>个标签而不会完全丢失它们,则必须对标签的功能进行一些研究并将信息添加到HTML Purifier中

如果您不想从头开始编写代码,则可以基于在xemlock/htmlpurifier-html5's HTML5Definition.php file中找到的代码。