~maj v3.0.19-->v3.0.21
[ptitvelo/web/www.git] / www / ecrire / inc / filtres_mini.php
index 7e5f252..4621ebc 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2012                                                *
+ *  Copyright (c) 2001-2014                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -44,7 +44,7 @@ function resolve_path($url) {
 // http://doc.spip.org/@suivre_lien
 function suivre_lien($url, $lien) {
 
-       if (preg_match(',^(mailto|javascript):,iS', $lien))
+       if (preg_match(',^(mailto|javascript|data):,iS', $lien))
                return $lien;
        if (preg_match(';^((?:[a-z]{3,7}:)?//.*?)(/.*)?$;iS', $lien, $r))
                return $r[1].resolve_path($r[2]);
@@ -100,22 +100,22 @@ function protocole_implicite($url_absolue){
 // ne s'applique qu'aux textes contenant des liens
 // http://doc.spip.org/@liens_absolus
 function liens_absolus($texte, $base='') {
-       if (preg_match_all(',(<(a|link|image)[[:space:]]+[^<>]*href=["\']?)([^"\' ><[:space:]]+)([^<>]*>),imsS', 
+       if (preg_match_all(',(<(a|link|image|img|script)\s[^<>]*(href|src)=[^<>]*>),imsS', 
        $texte, $liens, PREG_SET_ORDER)) {
                foreach ($liens as $lien) {
-                       $abs = url_absolue($lien[3], $base);
-                       if ($abs <> $lien[3] and !preg_match('/^#/',$lien[3]))
-                               $texte = str_replace($lien[0], $lien[1].$abs.$lien[4], $texte);
-               }
-       }
-       if (preg_match_all(',(<(img|script)[[:space:]]+[^<>]*src=["\']?)([^"\' ><[:space:]]+)([^<>]*>),imsS', 
-       $texte, $liens, PREG_SET_ORDER)) {
-               foreach ($liens as $lien) {
-                       $abs = url_absolue($lien[3], $base);
-                       if ($abs <> $lien[3])
-                               $texte = str_replace($lien[0], $lien[1].$abs.$lien[4], $texte);
+                       foreach(array('href', 'src') as $attr) {
+                               $href = extraire_attribut($lien[0], $attr);
+                               if (strlen($href)>0) {
+                                       $abs = url_absolue($href, $base);
+                                       if ($href != $abs and !preg_match('/^#/',$href)) {
+                                               $texte_lien = inserer_attribut($lien[0], $attr, $abs);
+                                               $texte = str_replace($lien[0],$texte_lien,$texte);
+                                       }
+                               }
+                       }
                }
        }
+
        return $texte;
 }
 
@@ -130,5 +130,49 @@ function abs_url($texte, $base='') {
                return liens_absolus($texte, $base);
 }
 
+/**
+* htmlspecialchars wrapper (PHP >= 5.4 compat issue)
+*
+* @param string $string
+* @param int $flags
+* @param string $encoding
+* @param bool $double_encode
+* @return string
+*/
+function spip_htmlspecialchars($string, $flags=null, $encoding='ISO-8859-1', $double_encode = true){
+       if (is_null($flags)) {
+               if (!defined('PHP_VERSION_ID') OR PHP_VERSION_ID < 50400)
+                       $flags = ENT_COMPAT;
+               else
+                       $flags = ENT_COMPAT|ENT_HTML401;
+       }
 
+       if (!defined('PHP_VERSION_ID') OR PHP_VERSION_ID < 50203)
+               return htmlspecialchars($string,$flags,$encoding);
+       else
+               return htmlspecialchars($string,$flags,$encoding,$double_encode);
+}
+
+/**
+* htmlentities wrapper (PHP >= 5.4 compat issue)
+*
+* @param string $string
+* @param int $flags
+* @param string $encoding
+* @param bool $double_encode
+* @return string
+*/
+function spip_htmlentities($string,$flags=null,$encoding = 'ISO-8859-1',$double_encode = true){
+       if (is_null($flags)) {
+               if (!defined('PHP_VERSION_ID') OR PHP_VERSION_ID < 50400)
+                       $flags = ENT_COMPAT;
+               else
+                       $flags = ENT_COMPAT|ENT_HTML401;
+       }
+
+       if (!defined('PHP_VERSION_ID') OR PHP_VERSION_ID < 50203)
+               return htmlentities($string,$flags,$encoding);
+       else
+               return htmlentities($string,$flags,$encoding,$double_encode);
+}
 ?>