Php HtmlPurifier-允许数据属性

Php HtmlPurifier-允许数据属性,php,filter,htmlpurifier,Php,Filter,Htmlpurifier,我正在尝试为我所有的span使用htmlPurifier允许一些数据属性,但没有办法 我有这个字符串: <p> <span data-time-start="1" data-time-end="5" id="5"> <word class="word">My</word> <word class="word">Name</word> </span> <sp

我正在尝试为我所有的
span
使用htmlPurifier允许一些
数据属性
,但没有办法

我有这个字符串:

<p>
    <span data-time-start="1" data-time-end="5" id="5">
       <word class="word">My</word>
       <word class="word">Name</word>
    </span>
    <span data-time-start="6" data-time-end="15" id="88">
       <word class="word">Is</word>
       <word class="word">Zooboo</word>
    </span>
<p>
我像这样净化我的
$value

$purifier = new \HTMLPurifier($this->HTMLpurifierConfigInverseTransform);
var_dump($purifier->purify($value));die;
得到这个:

<span>My Name</span><span>Is Zoobo</span>
我尝试使用此配置进行测试:

$this->HTMLpurifierConfigInverseTransform->set('HTML.Allowed', 'span[data-time-start],u,strong,em');
但是错误消息:

用户警告:元素“span”中的属性“数据时间开始”不正确 支持(有关实现此功能的信息,请参阅支持 论坛)

谢谢你的帮助

编辑1

我尝试在第一时间使用以下代码行允许ID:

$this->HTMLpurifierConfigInverseTransform->set('Attr.EnableID', true);
这对我不起作用

编辑2

对于
data-*
属性,我添加了这一行,但没有发生任何事情

$def = $this->HTMLpurifierConfigInverseTransform->getHTMLDefinition(true);
$def->addAttribute('sub', 'data-time-start', 'CDATA');
$def->addAttribute('sub', 'data-time-end', 'CDATA');

HTML净化器了解HTML的结构,并将此知识用作其白名单过程的基础。如果将标准属性添加到白名单中,则白名单不允许该属性包含任意内容-它理解该属性,并且仍然会拒绝没有意义的内容

例如,如果您的某个属性包含数值,HTML净化器仍然会拒绝尝试为该属性输入值“foo”的HTML

如果您添加自定义属性,仅仅将其添加到白名单并不能教会HTML净化器如何处理这些属性:它可以在这些属性中期望哪些数据?哪些数据是恶意的

这里有大量的文档说明如何告诉HTML净化器自定义属性的结构:

作为配置的一部分,
的“target”属性有一个代码示例


我希望这有帮助

谢谢你完整的回答!我第一次尝试启用ID,但是
$this->HTMLpurifierConfigInverseTransform->set('Attr.EnableID',true)不工作。。。然后对于允许特殊属性,我会看到,但这似乎对我来说很难。。。我是个新手…@Zagloo:你有没有确保给你的定义一个ID和修订号(我隐约记得没有这样做会导致问题),并在你处理定义缓存时禁用它?不幸的是,除了版本不匹配之外,我不知道为什么
Attr.EnableID
对您不起作用,但它几乎永远都是HTML净化器的一部分,所以我不这么认为(见:另见本帖:
$this->HTMLpurifierConfigInverseTransform->set('Attr.EnableID', true);
$def = $this->HTMLpurifierConfigInverseTransform->getHTMLDefinition(true);
$def->addAttribute('sub', 'data-time-start', 'CDATA');
$def->addAttribute('sub', 'data-time-end', 'CDATA');
$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('a', 'target', 'Enum#_blank,_self,_target,_top');
$def->addAttribute('span', 'data-time-start', 'Number');
$def->addAttribute('span', 'data-time-end', 'Number');