safehtml.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <?php
  2. /***************************************************************************\
  3. * SPIP, Systeme de publication pour l'internet *
  4. * *
  5. * Copyright (c) 2001-2014 *
  6. * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
  7. * *
  8. * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
  9. * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
  10. \***************************************************************************/
  11. if (!defined("_ECRIRE_INC_VERSION")) return;
  12. // Controle la presence de la lib safehtml et cree la fonction
  13. // de transformation du texte qui l'exploite
  14. // http://code.spip.net/@inc_safehtml_dist
  15. function inc_safehtml_dist($t) {
  16. static $process, $test;
  17. if (!$test) {
  18. $process = false;
  19. if ($f = find_in_path('lib/safehtml/classes')) {
  20. define('XML_HTMLSAX3', $f.'/');
  21. require_once XML_HTMLSAX3.'safehtml.php';
  22. $process = new safehtml();
  23. $process->deleteTags[] = 'param'; // sinon bug Firefox
  24. }
  25. if ($process)
  26. $test = 1; # ok
  27. else
  28. $test = -1; # se rabattre sur une fonction de securite basique
  29. }
  30. if ($test > 0) {
  31. # reset ($process->clear() ne vide que _xhtml...),
  32. # on doit pouvoir programmer ca plus propremement
  33. $process->_counter = array();
  34. $process->_stack = array();
  35. $process->_dcCounter = array();
  36. $process->_dcStack = array();
  37. $process->_listScope = 0;
  38. $process->_liStack = array();
  39. # $process->parse(''); # cas particulier ?
  40. $process->clear();
  41. $t = $process->parse($t);
  42. }
  43. else
  44. $t = entites_html($t); // tres laid, en cas d'erreur
  45. // supprimer un <li></li> provenant d'un <li> ouvrant seul+safehtml
  46. // cf https://core.spip.net/issues/2201
  47. $t = str_replace("<li></li>","",$t);
  48. return $t;
  49. }
  50. ?>