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