X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=www%2Fecrire%2Finc%2Ffiltres_mini.php;fp=www%2Fecrire%2Finc%2Ffiltres_mini.php;h=cc10091f126bf33e8c5e405385b9c48f5f5dbef1;hb=a33c2ba9d919664b3bb0f565f8e9a8b9d8530cdb;hp=0000000000000000000000000000000000000000;hpb=8945248b3d948385798d9aa355c70e7089aca2b3;p=lhc%2Fweb%2Fclavette_www.git diff --git a/www/ecrire/inc/filtres_mini.php b/www/ecrire/inc/filtres_mini.php new file mode 100644 index 0000000..cc10091 --- /dev/null +++ b/www/ecrire/inc/filtres_mini.php @@ -0,0 +1,178 @@ + nouvelle adresse +// +// suivre_lien('http://rezo.net/sous/dir/../ect/ory/fi.html..s#toto', +// 'a/../../titi.coco.html/tata#titi'); +// http://doc.spip.org/@suivre_lien +function suivre_lien($url, $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]); + + # L'url site spip est un lien absolu aussi + if ($lien == $GLOBALS['meta']['adresse_site']){ + return $lien; + } + + # lien relatif, il faut verifier l'url de base + # commencer par virer la chaine de get de l'url de base + if (preg_match(';^((?:[a-z]{3,7}:)?//[^/]+)(/.*?/?)?([^/#?]*)([?][^#]*)?(#.*)?$;S', $url, $regs)) { + $debut = $regs[1]; + $dir = !strlen($regs[2]) ? '/' : $regs[2]; + $mot = $regs[3]; + $get = isset($regs[4])?$regs[4]:""; + $hash = isset($regs[5])?$regs[5]:""; + } + switch (substr($lien,0,1)) { + case '/': + return $debut . resolve_path($lien); + case '#': + return $debut . resolve_path($dir.$mot.$get.$lien); + case '': + return $debut . resolve_path($dir.$mot.$get.$hash); + default: + return $debut . resolve_path($dir.$lien); + } +} + +// un filtre pour transformer les URLs relatives en URLs absolues ; +// ne s'applique qu'aux #URL_XXXX +// http://doc.spip.org/@url_absolue +function url_absolue($url, $base='') { + if (strlen($url = trim($url)) == 0) + return ''; + if (!$base) + $base = url_de_base() . (_DIR_RACINE ? _DIR_RESTREINT_ABS : ''); + return suivre_lien($base, $url); +} + +/** + * Supprimer le protocole d'une url absolue + * pour le rendre implicite (URL commencant par "//") + * @param string $url_absolue + * @return string + */ +function protocole_implicite($url_absolue){ + return preg_replace(";^[a-z]{3,7}://;i","//",$url_absolue); +} + +// un filtre pour transformer les URLs relatives en URLs absolues ; +// 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', + $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); + } + } + return $texte; +} + +// +// Ce filtre public va traiter les URL ou les +// +// http://doc.spip.org/@abs_url +function abs_url($texte, $base='') { + if ($GLOBALS['mode_abs_url'] == 'url') + return url_absolue($texte, $base); + else + 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); +} +?>