[SPIP] ~maj v2.1.25-->2.1.26
[velocampus/web/www.git] / www / extensions / safehtml / inc / safehtml.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2014 *
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")) return;
15
16 // Controle la presence de la lib safehtml et cree la fonction
17 // de transformation du texte qui l'exploite
18 // http://doc.spip.org/@inc_safehtml_dist
19 function inc_safehtml_dist($t) {
20 static $process, $test;
21
22 if (!$test) {
23 $process = false;
24 if ($f = find_in_path('lib/safehtml/classes')) {
25 define('XML_HTMLSAX3', $f.'/');
26 require_once XML_HTMLSAX3.'safehtml.php';
27 $process = new safehtml();
28 $process->deleteTags[] = 'param'; // sinon bug Firefox
29 }
30 if ($process)
31 $test = 1; # ok
32 else
33 $test = -1; # se rabattre sur une fonction de securite basique
34 }
35
36 if ($test > 0) {
37 # autoriser des trucs
38 # ex: l'embed de youtube
39 if (
40 false !== strpos($t, 'iframe')) {
41 foreach (extraire_balises($t, 'iframe') as $iframe) {
42 if (preg_match(',^http://(www\.)?(youtube\.com|(player\.)?vimeo\.com)/.*,', extraire_attribut($iframe, 'src'))) {
43 $re = '___IFRAME___'.md5($iframe);
44 $ok[$re] = $iframe;
45 $t = str_replace($iframe, $re, $t);
46 }
47 }
48 }
49
50 # reset ($process->clear() ne vide que _xhtml...),
51 # on doit pouvoir programmer ca plus propremement
52 $process->_counter = array();
53 $process->_stack = array();
54 $process->_dcCounter = array();
55 $process->_dcStack = array();
56 $process->_listScope = 0;
57 $process->_liStack = array();
58 # $process->parse(''); # cas particulier ?
59 $process->clear();
60 $t = $process->parse($t);
61
62 # reinserer les trucs autorises
63 if ($ok)
64 foreach ($ok as $re => $v)
65 $t = str_replace($re, $v, $t);
66 }
67 else
68 $t = entites_html($t); // tres laid, en cas d'erreur
69
70 return $t;
71 }
72
73 ?>