AND isset($GLOBALS['meta']['charset'])
AND $GLOBALS['meta']['charset'] != 'utf-8'
AND is_string($a)
- AND preg_match(',[\x80-\xFF],', $a)) {
- include_spip('inc/charsets');
+ // check rapide mais pas fiable
+ AND preg_match(',[\x80-\xFF],', $a)
+ // check fiable
+ AND include_spip('inc/charsets')
+ AND is_utf8($a)
+ ) {
return importer_charset($a, 'utf-8');
}
return $url . (strlen($ancre) ? '#'. $ancre : '');
}
-//
-// pour le nom du cache, les types_urls et self
-//
-// http://doc.spip.org/@nettoyer_uri
-function nettoyer_uri()
+/**
+ * pour le nom du cache, les types_urls et self
+ * http://doc.spip.org/@nettoyer_uri
+ *
+ * @param string|null $reset
+ * @return string
+ */
+function nettoyer_uri($reset = null)
{
static $done = false;
static $propre = '';
+ if (!is_null($reset)) return $propre=$reset;
if ($done) return $propre;
$done = true;
//
// Fonctions de fabrication des URL des scripts de Spip
//
-
-// l'URL de base du site, sans se fier a meta(adresse_site) qui
-// peut etre fausse (sites a plusieurs noms d'hotes, deplacements, erreurs)
-// Note : la globale $profondeur_url doit etre initialisee de maniere a
-// indiquer le nombre de sous-repertoires de l'url courante par rapport a la
-// racine de SPIP : par exemple, sur ecrire/ elle vaut 1, sur sedna/ 1, et a
-// la racine 0. Sur url/perso/ elle vaut 2
-// http://doc.spip.org/@url_de_base
-function url_de_base() {
+/**
+ * l'URL de base du site, sans se fier a meta(adresse_site) qui
+ * peut etre fausse (sites a plusieurs noms d'hotes, deplacements, erreurs)
+ * Note : la globale $profondeur_url doit etre initialisee de maniere a
+ * indiquer le nombre de sous-repertoires de l'url courante par rapport a la
+ * racine de SPIP : par exemple, sur ecrire/ elle vaut 1, sur sedna/ 1, et a
+ * la racine 0. Sur url/perso/ elle vaut 2
+ * http://doc.spip.org/@url_de_base
+ *
+ * @param int|boo|array $profondeur
+ * si non renseignee : retourne l'url pour la profondeur $GLOBALS['profondeur_url']
+ * si int : indique que l'on veut l'url pour la prondeur indiquee
+ * si bool : retourne le tableau static complet
+ * si array : reinitialise le tableau static complet avec la valeur fournie
+ * @return string|array
+ */
+function url_de_base($profondeur=null) {
static $url = array();
+ if (is_array($profondeur)) return $url = $profondeur;
+ if ($profondeur===false) return $url;
+
+ if (is_null($profondeur)) $profondeur = $GLOBALS['profondeur_url'];
- if (isset($url[$GLOBALS['profondeur_url']]))
- return $url[$GLOBALS['profondeur_url']];
+ if (isset($url[$profondeur]))
+ return $url[$profondeur];
$http = (
(isset($_SERVER["SCRIPT_URI"]) AND
}
}
- $url[$GLOBALS['profondeur_url']] = url_de_($http,$host,$GLOBALS['REQUEST_URI'],$GLOBALS['profondeur_url']);
+ $url[$profondeur] = url_de_($http,$host,$GLOBALS['REQUEST_URI'],$profondeur);
- return $url[$GLOBALS['profondeur_url']];
+ return $url[$profondeur];
}
/**
* fonction testable de construction d'une url appelee par url_de_base()