Ajouter un attribut HTML filtre épurateur?
-
19-09-2019 - |
Question
Je suis en train de permettre l'attribut rel dans un des éléments dans le filtre Purificateur HTML. Je suis ce guide http://htmlpurifier.org/docs/enduser-customize.html et voici mon code:
$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.Doctype', 'XHTML 1.0 Strict');
$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', 'href*', 'URI');
$def->addAttribute('a', 'rel', 'CDATA');
$purifier = new HTMLPurifier($config);
Cependant, le purificateur HTML est encore filtrer sur tous les attributs rel ... Je suis un peu confus ce que le problème pourrait être.
Quand j'utilise:
$config->set('Attr', 'AllowedRel', array('something'));
Je reçois cette erreur:
Avis: Utilisation de l'API Obsolète: utiliser
$config->set('Attr.AllowedRel', ...)
à la place sur la ligne 191 dans le fichierC:\wamp\www\neonet\application\modules\admin\controllers\IndexController.php
dansC:\wamp\www\neonet\library\My\htmlpurifier-4.0.0-standalone\HTMLPurifier.standalone.php
en ligne 1819
EDIT:
Nouveau code:
$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.Doctype', 'XHTML 1.0 Strict');
$config->set('Attr.AllowedRel', array('something'));
$purifier = new HTMLPurifier($config);
Quand j'utilise:
<href="/" rel="something">anchor</a>
attribut rel obtient encore filtré.
La solution
Cette directive de configuration peut être intéressant pour vous. En ce qui concerne votre code, cela fonctionne pour moi; peut-être vous avez les guillemets magiques activé ou n'avez pas fait la mises en cache de façon appropriée? (Essayez cognant DefinitionRev dans ce cas.)
L'autre erreur classique lorsque vous essayez d'utiliser rel est qu'il ne fonctionne pas avec XHTML Strict; que doctype ne définit pas rel, donc Attr.AllowedRel ne fait rien (cela devrait être mentionné dans la documentation, mais est pas.) Donc, vous devez choisir un autre type de document si vous voulez garder votre coche W3C ou utiliser le code d'origine.