即使使用$ config-> set('Attr.EnableID',true),HTML Purifier也会删除ID;

时间:2014-01-16 14:40:27

标签: php html filtering user-input htmlpurifier

我遇到了HTML Purifier的问题,尽管使用配置选项来避免此类行为,但它会删除标题元素上的ID。

现在我正在使用:

// set up HTML Purifier for user inputs
require_once 'htmlpurifier/library/HTMLPurifier.auto.php';

$config = HTMLPurifier_Config::createDefault();
$config->set('Core.Encoding', 'UTF-8');
$config->set('HTML.Doctype', 'HTML 4.01 Transitional');
$config->set('Attr.EnableID', true);
$config->set('HTML.Trusted', true);

$purifier = new HTMLPurifier($config);
然后我给它喂了一个字符串,如:

<h6 id="1843804297">This is a title</h6><h5 id="1979691494">This one too.</h5><h3 id="932393874">I think you see where this is going.</h3>

我还尝试为ID标题创建列入白名单的条目无效,甚至直接操作存储在$ config对象中的默认值。

$config->def->defaults['Attr.EnableID'] = true;

ID很重要,因为它们是由PHP脚本分配的,存储在MySQL中,后来由JS导航系统选取。它们需要从用户那里获取,因为它们通常会保持静态以用于后续内容更新。

1 个答案:

答案 0 :(得分:6)

我认为这是因为HTML4中的数字ID无效。

  

ID和NAME令牌必须以字母([A-Za-z])开头,后面可以跟任意数量的字母,数字([0-9]),连字符(“ - ”),下划线(“ _“),冒号(”:“)和句号(”。“)。

尝试使用不同的ID或更改Doctype。