[SPIP] ~2.1.12 -->2.1.25
[velocampus/web/www.git] / www / extensions / safehtml / inc / safehtml.php
index 72053b3..fc8b727 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2009                                                *
+ *  Copyright (c) 2001-2014                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -34,6 +34,19 @@ function inc_safehtml_dist($t) {
        }
 
        if ($test > 0) {
+               # autoriser des trucs
+               # ex: l'embed de youtube
+               if (
+               false !== strpos($t, 'iframe')) {
+                       foreach (extraire_balises($t, 'iframe') as $iframe) {
+                               if (preg_match(',^http://(www\.)?(youtube\.com|(player\.)?vimeo\.com)/.*,', extraire_attribut($iframe, 'src'))) {
+                                       $re = '___IFRAME___'.md5($iframe);
+                                       $ok[$re] = $iframe;
+                                       $t = str_replace($iframe, $re, $t);
+                               }
+                       }
+               }
+
                # reset ($process->clear() ne vide que _xhtml...),
                # on doit pouvoir programmer ca plus propremement
                $process->_counter = array();
@@ -45,6 +58,11 @@ function inc_safehtml_dist($t) {
 #              $process->parse(''); # cas particulier ?
                $process->clear();
                $t = $process->parse($t);
+
+               # reinserer les trucs autorises
+               if ($ok)
+               foreach ($ok as $re => $v)
+                       $t = str_replace($re, $v, $t);
        }
        else
                $t = entites_html($t); // tres laid, en cas d'erreur