Skip to content

Resolve "Nettoyer le HTML des anciens labdocs de type "text""

Francois Gannaz requested to merge 46-cleanup-text-data into master

Comme prévu, j'utilise HTML purifier qui est la seule biblio fiable et maintenue pour nettoyer du HTML en PHP.

La plus grande partie du travail était de pouvoir conserver le MathML. Il n'y a pas de système simple pour le purifier avec HTMLpurifier, et ce serait un très gros travail de l'ajouter. Après avoir testé quelques variantes, j'ai opté pour une solution pas très subtile : chaque bloc de mathml est extrait avant purification, puis réinjecté ensuite. L'avantage est qu'on a l'assurance de ne pas casser ces blocs de formules. L'inconvénient est que la sécurité n'y est pas assurée. Ce n'est certes pas l'objectif premier, mais pour une plus grande sécurité il faudra améliorer l'extraction (par DOM au lieu de regexp) et nettoyer chaque bloc (par DOMDocument + DTD ?). A priori, on n'y gagnera rien en fiabilité, cela protégera simplement d'utilisateurs malveillants.

Par ailleurs, j'ai configuré HTMLpurifier pour qu'il accepte certains éléments HTML5, notamment vidéos et audios. Un effet de bord de la déclaration d'un doctype HTML5 est que certaines balises ne sont plus fermées. Par exemple <br /> devient <br>.

Éventuellement, on pourrait faire de ce script une migration, mais ça n'aurait de sens que si on applique ce mécanisme de nettoyage HTML à chaque enregistrement. Le script est idempotent, on peut le lancer régulièrement tant que le nettoyage à l'enregistrement n'est pas encore en place.

Closes #46 (closed)

Edited by Francois Gannaz

Merge request reports