source: spip-zone/_core_/branches/spip-2.1/plugins/safehtml/inc/safehtml.php @ 59043

Last change on this file since 59043 was 59043, checked in by fil@…, 8 years ago

autoriser les iframe de l'oembed youtube (pour pouvoir les utiliser dans les forums avec le plugin oembed)

File size: 2.2 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2009                                                *
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
14if (!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
19function 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)/.*,', 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?>
Note: See TracBrowser for help on using the repository browser.