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