/***************************************************************************\
* 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. *
// 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]);
// 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;
}
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);
+}
?>