我遇到了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导航系统选取。它们需要从用户那里获取,因为它们通常会保持静态以用于后续内容更新。
答案 0 :(得分:6)
我认为这是因为HTML4中的数字ID无效。
ID和NAME令牌必须以字母([A-Za-z])开头,后面可以跟任意数量的字母,数字([0-9]),连字符(“ - ”),下划线(“ _“),冒号(”:“)和句号(”。“)。
尝试使用不同的ID或更改Doctype。