et supprime \r return str_replace(array(chr(10), chr(13)), array("
", ""), $chaine); } // Remplace l'espace devant les signes : ! ? par un espace insécable   // pour éviter les sauts de lignes intempestifs. function conv_ponctuation ($chaine) { return ereg_replace(' ([:!?])', ' \\1', $chaine); } // Convertit tous les caractères spéciaux en HTML avec htmlentities() function conv_html ($chaine) { $chaine = htmlentities($chaine, ENT_COMPAT, PHORTAIL_CHARSET); // Correction des caractères Windows-1252 générés par Internet Explorer (!) // et non valides en HTML $table = array( "\x80" => '€', "\x81" => '', "\x82" => '‚', "\x83" => 'ƒ', "\x84" => '„', "\x85" => '…', "\x86" => '†', "\x87" => '‡', "\x88" => 'ˆ', "\x89" => '‰', "\x8A" => 'Š', "\x8B" => '‹', "\x8C" => 'Œ', "\x8D" => '', "\x8E" => 'Ž', "\x8F" => '', "\x90" => '', "\x91" => '‘', "\x92" => '’', "\x93" => '“', "\x94" => '”', "\x95" => '•', "\x96" => '–', "\x97" => '—', "\x98" => '˜', "\x99" => '™', "\x9A" => 'š', "\x9B" => '›', "\x9C" => 'œ', "\x9D" => '', "\x9E" => 'ž', "\x9F" => 'Ÿ' ); $chaine = strtr($chaine, $table); // Conversion des entités HTML saisies dans le texte $chaine = preg_replace_callback( array('/&([a-z]\w+);/i', '/&#(\d{3,5});/'), "callback_entite_html", $chaine); return $chaine; } function callback_entite_html ($matches) { if (ctype_digit($matches[1][0])) { // Entité numérique $num = (int) $matches[1]; if ($num >= 160 and $num <= 65535) return '&#'.$num.';'; else return $matches[0]; } else { // Entité littérale return '&'.$matches[1].';'; } } // Convertit une URL en HTML // // - Encode, dans certaines parties de l'URL, les caractères non // alphanumériques (sauf -_.) sous la forme %hh, où h est un chiffre // hexadécimal (ex: espace -> %20, é -> %E9). // - Encode les caractères spéciaux HTML restants avec conv_html() // - Renvoie une chaine vide si l'URL n'est pas conforme function conv_url ($url) { return conv_html(encode_url_components($url)); } // Note: ne pas appeler encode_url_components() directement. // Pour un usage normal, il faut utiliser conv_url(). function encode_url_components ($url, $default_scheme = 'http', $force_encode = true) { $protocols = array("http", "https", "ftp", "mailto"); if ($force_encode) { $func_urlencode = 'urlencode'; $func_rawurlencode = 'rawurlencode'; } else { $func_urlencode = 'urlencode_auto'; $func_rawurlencode = 'rawurlencode_auto'; } $url = trim($url); if ($url == '') return ''; $comp = @parse_url($url); // Décomposition de l'url if ($comp !== false) { if (isset($comp['scheme'])) $scheme = $comp['scheme']; else $scheme = trim($default_scheme); $scheme = strtolower($scheme); // Format de l'URL : // scheme://user:pass@host:port/path?query#fragment $result = ''; if (isset($comp['scheme'])) { $comp['scheme'] = strtolower($comp['scheme']); if ($comp['scheme'] == 'mailto') $result .= $comp['scheme'].':'; elseif (in_array($comp['scheme'], $protocols)) $result .= $comp['scheme'].'://'; else return ''; // Refus des protocoles inconnus (sécurité) } if (isset($comp['user'])) { $result .= $func_rawurlencode($comp['user']); if (isset($comp['pass'])) $result .= ':'.$func_rawurlencode($comp['pass']); $result .= '@'; } if (isset($comp['host'])) { $result .= $comp['host']; if (isset($comp['port'])) $result .= ':'.$comp['port']; } if (isset($comp['path'])) $result .= implode('/', array_map($func_rawurlencode, explode('/', $comp['path']))); if ($scheme == 'mailto') $func_encode = $func_rawurlencode; else $func_encode = $func_urlencode; if (isset($comp['query'])) { $arr = preg_split('/([&=])/', $comp['query'], -1, PREG_SPLIT_DELIM_CAPTURE); $result .= '?'; foreach ($arr as $var) { if ($var == '&' || $var == '=') $result .= $var; else $result .= $func_encode($var); } } if (isset($comp['fragment'])) $result .= '#'.$func_encode($comp['fragment']); if ($result == '') $result = '#'; return $result; } else return ''; } function rawurlencode_auto ($url) { // Encode les caractères spéciaux en %hh, où h est un chiffre hexa. // Si l'url contient déjà des caractères codés, ils sont décodés avant d'être ré-encodés return rawurlencode(rawurldecode($url)); } function urlencode_auto ($url) { // Encode les caractères spéciaux en %hh, où h est un chiffre hexa, ou en "+" pour l'espace. // Si l'url contient déjà des caractères codés, ils sont décodés avant d'être ré-encodés return urlencode(urldecode($url)); } // Convertit une couleur de fond utilisée comme valeur d'un attribut CSS // "background-color" ou "border-color". // // Si la valeur est vide, elle est remplacée par le mot "transparent". function conv_couleur_fond ($couleur) { $couleur = trim($couleur); if ($couleur == "") $couleur = "transparent"; return conv_html($couleur); } //----------------------------------------------------------------------------- // Codage/décodage de chaine //----------------------------------------------------------------------------- // Décode une chaine ou un tableau issus d'un GET/POST/COOKIE (pouvant contenir des backslashes) function decode_gpc ($argument) { // Si l'option "magic_quotes_gpc" est active, PHP appelle automatiquement // addslashes sur les données renvoyées par GET/POST/COOKIES (ou GPC) // Il faut donc appeler stripslashes si cette option est active // et ne rien faire dans le cas contraire. if (is_array($argument)) { $tableau = array(); foreach ($argument as $cle => $valeur) { $tableau[$cle] = decode_gpc($valeur); } return $tableau; } else { if (get_magic_quotes_gpc()) return stripslashes($argument); else return $argument; } } // Encode une valeur pour son écriture dans une chaine PHP entre guillemets simples (') // // Exemple: // $valeur = "une chaine avec 'guillemets simples'"; // echo "\$var = '".encode_str($valeur)."';"; // // affichera : // // $var = 'une chaine avec \'guillemets simples\''; function encode_str ($chaine) { // Protège les backslashes et les guillemets simples return str_replace(array('\\', "'"), array('\\\\', "\\'"), $chaine); } //----------------------------------------------------------------------------- // Fonctions diverses //----------------------------------------------------------------------------- // Renvoie le chemin de la racine du site // // Exemple: // Si l'URL du site est 'http://monsite.fr/' , site_path() retourne '/' . // Si l'URL du site est 'http://monsite.fr/site1/' , site_path() retourne '/site1/' . function site_path () { // On suppose que ce script inclus est dans un sous-dossier de la racine du site (niveau 1) $root_path = dirname(dirname(__FILE__)); if ($root_path == '/' or $root_path == '\\') $root_path = ''; $working_path = getcwd(); if ($working_path === false) return '/'; if ($working_path == '/' or $working_path == '\\') $working_path = ''; if (strlen($working_path) < strlen($root_path) or substr($working_path, 0, strlen($root_path)) != $root_path) return '/'; $subpath = strtr(substr($working_path, strlen($root_path)), '\\', '/'); $dir_level = substr_count($subpath, '/'); $path = ''; if (!empty($_SERVER['SCRIPT_URL'])) $path = $_SERVER['SCRIPT_URL']; elseif (!empty($_SERVER['SCRIPT_NAME'])) $path = $_SERVER['SCRIPT_NAME']; $i = strlen($path) - 1; while ($dir_level >= 0 and $i >= 0) { if ($path[$i] == '/') $dir_level--; $i--; } return substr($path, 0, $i + 1).'/'; } // Démarre une session PHP function demarrer_session ($nom_session) { // Désactive l'écriture du SID dans les URL (si ini_set() fonctionne) @ini_set("session.use_trans_sid", "0"); // Nécessite PHP <= 4.2.3 ou PHP >= 5 @ini_set("url_rewriter.tags", ""); // Solution de remplacement pour PHP 4.3/4.4 // Autorise l'utilisation des cookies @ini_set("session.use_cookies", "1"); session_name($nom_session); // Nom du cookie de session session_set_cookie_params(0, site_path()); // Chemin du site qui aura accès au cookie $result = session_start(); // Démarrage de la session // Désactive l'écriture du SID dans les URL (si ini_set() est désactivée) if (version_compare(PHP_VERSION, "4.3.0", ">=")) output_reset_rewrite_vars(); return $result; } //----------------------------------------------------------------------------- ?>