From 12624d6a8b07e74064cd51792db4695b24fead9b Mon Sep 17 00:00:00 2001 From: Fil <fil@rezo.net> Date: Tue, 12 Feb 2002 21:46:58 +0000 Subject: [PATCH] reorganisation de inc_texte.php3 en deux parties (inc_texte et inc_filtres). Chaque partie est reorganisee de maniere "logique". --Fil --- ecrire/accents.php3 | 1 + ecrire/aide_droite.php3 | 1 + ecrire/inc.php3 | 1 + ecrire/inc_filtres.php3 | 361 +++++++++++++++++++++++++++ ecrire/inc_texte.php3 | 536 +++++++--------------------------------- inc-calcul.php3 | 1 + inc-formulaires.php3 | 1 + inc-forum.php3 | 1 + inc-public.php3 | 11 +- 9 files changed, 467 insertions(+), 447 deletions(-) create mode 100644 ecrire/inc_filtres.php3 diff --git a/ecrire/accents.php3 b/ecrire/accents.php3 index d28dfeed36..c4cd031402 100644 --- a/ecrire/accents.php3 +++ b/ecrire/accents.php3 @@ -14,6 +14,7 @@ function changer_accents($dir) { if (ereg('\.', $nomfich) && !ereg('(\.php3|\.html)$', $nomfich)) continue; if ($nomfich == 'accents.php3') continue; if ($nomfich == 'inc_texte.php3') continue; + if ($nomfich == 'inc_filtres.php3') continue; if ($nomfich == 'inc_index.php3') continue; if ($nomfich == 'inc_mail.php3') continue; $nomfich = "$dir/$nomfich"; diff --git a/ecrire/aide_droite.php3 b/ecrire/aide_droite.php3 index 0776e401bb..7d95fbcedb 100644 --- a/ecrire/aide_droite.php3 +++ b/ecrire/aide_droite.php3 @@ -1,6 +1,7 @@ <?php include ("inc_version.php3"); include_local ("inc_texte.php3"); +include_local ("inc_filtres.php3"); ?> <HTML> <head> diff --git a/ecrire/inc.php3 b/ecrire/inc.php3 index b3b1eda6a2..c9f9cab3db 100644 --- a/ecrire/inc.php3 +++ b/ecrire/inc.php3 @@ -91,6 +91,7 @@ include_local ("inc_connect.php3"); include_local ("inc_meta.php3"); include_local ("inc_auth.php3"); include_local ("inc_texte.php3"); +include_local ("inc_filtres.php3"); include_local ("inc_urls.php3"); include_local ("inc_mail.php3"); include_local ("inc_admin.php3"); diff --git a/ecrire/inc_filtres.php3 b/ecrire/inc_filtres.php3 new file mode 100644 index 0000000000..c12a4e7b42 --- /dev/null +++ b/ecrire/inc_filtres.php3 @@ -0,0 +1,361 @@ +<?php + +// +// Ce fichier ne sera execute qu'une fois +if (defined("_ECRIRE_INC_FILTRES")) return; +define("_ECRIRE_INC_FILTRES", "1"); + +// +// divers +// + +// pour les titres numerotes ("1. Titre" -> "Titre") +function supprimer_numero($texte) { + $texte = ereg_replace("^[[:space:]]*[0-9]+[.)財[[:space:]]+", "", $texte); + return $texte; +} + +// suppression basique et brutale de tous les <...> +function supprimer_tags($texte, $rempl = "") { + // super gavant : la regexp ci-dessous plante sous php3, genre boucle infinie ! + // $texte = ereg_replace("<([^>\"']*|\"[^\"]*\"|'[^']*')*>", $rempl, $texte); + $texte = ereg_replace("<[^>]*>", $rempl, $texte); + return $texte; +} + +// texte au kilometre +function textebrut($texte) { + $texte = ereg_replace("[\n\r]+", " ", $texte); + $texte = eregi_replace("<(p|br)([[:space:]][^>]*)?".">", "\n\n", $texte); + $texte = ereg_replace("^\n+", "", $texte); + $texte = ereg_replace("\n+$", "", $texte); + $texte = ereg_replace("\n +", "\n", $texte); + $texte = supprimer_tags($texte); + $texte = ereg_replace("( | )+", " ", $texte); + return $texte; +} + +// pour ceux qui aiment les liens qui ouvrent une nouvelle fenetre +function liens_ouvrants ($texte) { + return ereg_replace("<a ([^>]*class=\"spip_out\")>", + "<a \\1 target=\"_blank\">", $texte); +} + +// corrige les caracteres degoutants +function corriger_caracteres($texte) { + // 145,146,180 = simple quote ; 147,148 = double quote ; 150 = tiret long + return strtr($texte, chr(145).chr(146).chr(180).chr(147).chr(148).chr(150), "'''".'""-'); +} + +// resserrer les paragraphes pour l'intro +function PtoBR($texte){ + $texte = eregi_replace("</p>", "\n", $texte); + $texte = eregi_replace("<p([[:space:]][^>]*)?".">", "<br>", $texte); + return $texte; +} + +// majuscules y compris accents +function majuscules($texte) { + $suite = htmlentities($texte); + $suite = ereg_replace('&', '&', $suite); + $suite = ereg_replace('<', '<', $suite); + $suite = ereg_replace('>', '>', $suite); + $texte = ''; + if (ereg('^(.*)&([A-Za-z])([a-zA-Z]*);(.*)$', $suite, $regs)) { + $texte .= majuscules($regs[1]); + $suite = $regs[4]; + $carspe = $regs[2]; + $accent = $regs[3]; + if (ereg('^(acute|grave|circ|uml|cedil|slash|caron|ring|tilde|elig)$', $accent)) + $carspe = strtoupper($carspe); + if ($accent == 'elig') $accent = 'Elig'; + $texte .= '&'.$carspe.$accent.';'; + } + $texte .= strtoupper($suite); + return $texte; +} + +// "127.4 ko" ou "3.1 Mo" +function taille_en_octets ($taille) { + if ($taille < 1024) {$taille .= " octets";} + else if ($taille < 1024*1024) { + $taille = ((floor($taille / 102.4))/10)." ko"; + } else { + $taille = ((floor(($taille / 1024) / 102.4))/10)." Mo"; + } + return $taille; +} + + +// +// date, heure, saisons +// + +function vider_date($letexte) { + if (ereg("^0000-00-00", $letexte)) return ''; + return $letexte; +} + +function recup_heure($numdate){ + if (!$numdate) return ''; + + if (ereg('([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})', $numdate, $regs)) { + $heures = $regs[1]; + $minutes = $regs[2]; + $secondes = $regs[3]; + } + return array($heures, $minutes, $secondes); +} + +function heures($numdate) { + $date_array = recup_heure($numdate); + if ($date_array) + list($heures, $minutes, $secondes) = $date_array; + return $heures; +} + +function minutes($numdate) { + $date_array = recup_heure($numdate); + if ($date_array) + list($heures, $minutes, $secondes) = $date_array; + return $minutes; +} + +function secondes($numdate) { + $date_array = recup_heure($numdate); + if ($date_array) + list($heures,$minutes,$secondes) = $date_array; + return $secondes; +} + +function recup_date($numdate){ + if (!$numdate) return ''; + if (ereg('([0-9]{1,2})/([0-9]{1,2})/([0-9]{1,2})', $numdate, $regs)) { + $jour = $regs[1]; + $mois = $regs[2]; + $annee = $regs[3]; + if ($annee < 90){ + $annee = 2000 + $annee; + } else { + $annee = 1900 + $annee ; + } + } + elseif (ereg('([0-9]{4})-([0-9]{2})-([0-9]{2})',$numdate, $regs)) { + $annee = $regs[1]; + $mois = $regs[2]; + $jour = $regs[3]; + } + elseif (ereg('([0-9]{4})-([0-9]{2})', $numdate, $regs)){ + $annee = $regs[1]; + $mois = $regs[2]; + } + if ($annee > 4000) $annee -= 9000; + if (substr($jour, 0, 1) == '0') $jour = substr($jour, 1); + + return array($annee, $mois, $jour); +} + + +function affdate_base($numdate, $vue) { + global $lang; + $date_array = recup_date($numdate); + if ($date_array) + list($annee, $mois, $jour) = $date_array; + else + return ''; + + if ($mois > 0){ + $saison = "hiver"; + if (($mois == 3 AND $jour >= 21) OR $mois > 3) $saison = "printemps"; + if (($mois == 6 AND $jour >= 21) OR $mois > 6) $saison = "彋�"; + if (($mois == 9 AND $jour >= 21) OR $mois > 9) $saison = "automne"; + if (($mois == 12 AND $jour >= 21) OR $mois > 12) $saison = "hiver"; + } + + if ($lang == "fr") { + if ($jour == '1') $jour = '1er'; + $tab_mois = array('', + 'janvier', 'f憝rier', 'mars', 'avril', 'mai', 'juin', + 'juillet', 'ao壻', 'septembre', 'octobre', 'novembre', 'd嶰embre'); + $avjc = ' av. J.C.'; + } + elseif ($lang == "en"){ + switch($jour) { + case '1': + $jour = '1st'; + break; + case '2': + $jour = '2nd'; + break; + case '3': + $jour = '3rd'; + break; + case '21': + $jour = '21st'; + break; + case '22': + $jour = '22nd'; + break; + case '23': + $jour = '23rd'; + break; + case '31': + $jour = '31st'; + break; + } + $tab_mois = array('', + 'January', 'February', 'March', 'April', 'May', 'June', + 'July', 'August', 'September', 'October', 'November', 'December'); + $avjc = ' B.C.'; + } + if ($jour == 0) $jour = ""; + if ($jour) $jour .= ' '; + $mois = $tab_mois[(int) $mois]; + if ($annee < 0) { + $annee = -$annee.$avjc; + $avjc = true; + } + else $avjc = false; + + switch ($vue) { + case 'saison': + return $saison; + + case 'court': + if ($avjc) return $annee; + $a = date('Y'); + if ($annee < ($a - 100) OR $annee > ($a + 100)) return $annee; + if ($annee != $a) return ucfirst($mois)." $annee"; + return $jour.$mois; + + case 'entier': + if ($avjc) return $annee; + return "$jour$mois $annee"; + + case 'mois': + return "$mois"; + + case 'mois_annee': + if ($avjc) return $annee; + return "$mois $annee"; + } + + return '<blink>format non défini</blink>'; +} + +function nom_jour($numdate) { + global $lang; + $date_array = recup_date($numdate); + if ($date_array) + list($annee,$mois,$jour) = $date_array; + else + return ''; + + if (!$mois OR !$jour) return; + + $nom = mktime(1,1,1,$mois,$jour,$annee); + $nom = date("D",$nom); + + if ($lang == "fr") { + switch($nom) { + case 'Sun': $nom='dimanche'; break; + case 'Mon': $nom='lundi'; break; + case 'Tue': $nom='mardi'; break; + case 'Wed': $nom='mercredi'; break; + case 'Thu': $nom='jeudi'; break; + case 'Fri': $nom='vendredi'; break; + case 'Sat': $nom='samedi'; break; + } + } + elseif ($lang == "en") { + switch($nom) { + case 'Sun': $nom='Sunday'; break; + case 'Mon': $nom='Monday'; break; + case 'Tue': $nom='Tuesday'; break; + case 'Wed': $nom='Wednesday'; break; + case 'Thu': $nom='Thursday'; break; + case 'Fri': $nom='Friday'; break; + case 'Sat': $nom='Saturday'; break; + } + } + return $nom; +} + +function jour($numdate) { + $date_array = recup_date($numdate); + if ($date_array) + list($annee,$mois,$jour) = $date_array; + else + return ''; + if ($jour=="1") $jour="1er"; + return $jour; +} + +function mois($numdate) { + $date_array = recup_date($numdate); + if ($date_array) + list($annee,$mois,$jour) = $date_array; + else + return ''; + return $mois; +} + +function annee($numdate) { + $date_array = recup_date($numdate); + if ($date_array) + list($annee,$mois,$jour) = $date_array; + else + return ''; + return $annee; +} + +function saison($numdate) { + return affdate_base($numdate, 'saison'); +} + +function affdate($numdate) { + return affdate_base($numdate, 'entier'); +} + +function affdate_court($numdate) { + return affdate_base($numdate, 'court'); +} + +function affdate_mois_annee($numdate) { + return affdate_base($numdate, 'mois_annee'); +} + +function nom_mois($numdate) { + return affdate_base($numdate, 'mois'); +} + +// +// alignements +// + +function justifier($letexte) { + if ($letexte) + $letexte = eregi_replace("<p([[:space:]][^>]*)?".">", "<p\\1 align='justify'>", $letexte); + return $letexte; +} + +function aligner_droite($letexte) { + if ($letexte) + $letexte = eregi_replace("<p([[:space:]][^>]*)?".">", "<p\\1 align='right'>",$letexte); + return $letexte; +} + +function aligner_gauche($letexte) { + $letexte = eregi_replace("^<p([[:space:]][^>]*)?".">", "", trim($letexte)); + if ($letexte) + $letexte = eregi_replace("<p([[:space:]][^>]*)?".">", "<p\\1 align='left'>",$letexte); + return $letexte; +} + +function centrer($letexte) { + $letexte = eregi_replace("^<p([[:space:]][^>]*)?".">", "", trim($letexte)); + if ($letexte) + $letexte = eregi_replace("<p([[:space:]][^>]*)?".">", "<p\\1 align='center'>",$letexte); + return $letexte; +} + diff --git a/ecrire/inc_texte.php3 b/ecrire/inc_texte.php3 index 43a02e6a67..fa7eb13b00 100644 --- a/ecrire/inc_texte.php3 +++ b/ecrire/inc_texte.php3 @@ -46,345 +46,120 @@ setlocale('LC_CTYPE', $lang2.'_'.$GLOBALS['lang']) || setlocale('LC_CTYPE', $GLOBALS['lang'].'_'.$lang2); -// Securite : empecher l'execution de code PHP -function interdire_scripts($source) { - $source = eregi_replace("<(\%|\?|([[:space:]]*)script)", "<\\1", $source); - return $source; -} - -function supprimer_numero($texte) { - $texte = ereg_replace("^[[:space:]]*[0-9]+[.)財[[:space:]]+", "", $texte); - return $texte; -} - -function supprimer_tags($texte, $rempl = "") { - // super gavant : la regexp ci-dessous plante sous php3, genre boucle infinie ! - // $texte = ereg_replace("<([^>\"']*|\"[^\"]*\"|'[^']*')*>", $rempl, $texte); - $texte = ereg_replace("<[^>]*>", $rempl, $texte); - return $texte; -} - -function corriger_caracteres($texte) { - // corrige les caracteres degoutants - // 145,146,180 = simple quote ; 147,148 = double quote ; 150 = tiret long - return strtr($texte, chr(145).chr(146).chr(180).chr(147).chr(148).chr(150), "'''".'""-'); -} +// +// diverses fonctions essentielles +// -function PtoBR($texte){ - $texte = eregi_replace("</p>", "\n", $texte); - $texte = eregi_replace("<p([[:space:]][^>]*)?".">", "<br>", $texte); - return $texte; -} +// ereg_ ou preg_ ? +function ereg_remplace($cherche_tableau, $remplace_tableau, $texte) { + global $flag_preg_replace; -function vider_date($letexte) { - if (ereg("^0000-00-00", $letexte)) return ''; - return $letexte; -} + if ($flag_preg_replace) return preg_replace($cherche_tableau, $remplace_tableau, $texte); -function recup_heure($numdate){ - if (!$numdate) return ''; + $n = count($cherche_tableau); - if (ereg('([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})', $numdate, $regs)) { - $heures = $regs[1]; - $minutes = $regs[2]; - $secondes = $regs[3]; + for ($i = 0; $i < $n; $i++) { + $texte = ereg_replace(substr($cherche_tableau[$i], 1, -1), $remplace_tableau[$i], $texte); } - return array($heures, $minutes, $secondes); + return $texte; } -function heures($numdate) { - $date_array = recup_heure($numdate); - if ($date_array) - list($heures, $minutes, $secondes) = $date_array; - return $heures; -} -function minutes($numdate) { - $date_array = recup_heure($numdate); - if ($date_array) - list($heures, $minutes, $secondes) = $date_array; - return $minutes; -} +// Mise de cote des echappements +function echappe_html($letexte,$source) { + // + // Echapper les <code>...</ code> + // + $regexp_echap = "<code>(([^<]|<[^/]|</[^c]|</c[^o]|</co[^d]|</cod[^e]|<\/code[^>])*)<\/code>"; + while (eregi($regexp_echap, $letexte, $regs)) { + $num_echap++; + $lecode = htmlspecialchars($regs[1]); -function secondes($numdate) { - $date_array = recup_heure($numdate); - if ($date_array) - list($heures,$minutes,$secondes) = $date_array; - return $secondes; -} + // ne pas mettre le <div...> s'il n'y a qu'une ligne + if (is_int(strpos($lecode,"\n"))) + $lecode = nl2br("<div align='left' class='spip_code'>".trim($lecode)."</div>"); -function recup_date($numdate){ - if (!$numdate) return ''; - if (ereg('([0-9]{1,2})/([0-9]{1,2})/([0-9]{1,2})', $numdate, $regs)) { - $jour = $regs[1]; - $mois = $regs[2]; - $annee = $regs[3]; - if ($annee < 90){ - $annee = 2000 + $annee; - } else { - $annee = 1900 + $annee ; - } - } - elseif (ereg('([0-9]{4})-([0-9]{2})-([0-9]{2})',$numdate, $regs)) { - $annee = $regs[1]; - $mois = $regs[2]; - $jour = $regs[3]; - } - elseif (ereg('([0-9]{4})-([0-9]{2})', $numdate, $regs)){ - $annee = $regs[1]; - $mois = $regs[2]; + $lecode = ereg_replace("\t", " ", $lecode); + $lecode = ereg_replace(" ", " ", $lecode); + $les_echap[$num_echap] = "<tt>".$lecode."</tt>"; + $pos = strpos($letexte, $regs[0]); + $letexte = substr($letexte,0,$pos)."___SPIP_$source$num_echap ___" + .substr($letexte,$pos+strlen($regs[0])); } - if ($annee > 4000) $annee -= 9000; - if (substr($jour, 0, 1) == '0') $jour = substr($jour, 1); - return array($annee, $mois, $jour); -} + // + // Echapper les <cadre>...</cadre> + // + $regexp_echap = "<cadre>(([^<]|<[^/]|</[^c]|</c[^a]|</ca[^d]|</cad[^r]|</cadr[^e]|<\/cadre[^>])*)<\/cadre>"; + while (eregi($regexp_echap, $letexte, $regs)) { + $num_echap++; + $lecode = trim(htmlspecialchars($regs[1])); + $total_lignes = count(explode("\n", $lecode)) + 1; + $les_echap[$num_echap] = "<form><textarea cols='40' rows='$total_lignes' wrap='no' class='spip_cadre'>".$lecode."</textarea></form>"; -function affdate_base($numdate, $vue) { - global $lang; - $date_array = recup_date($numdate); - if ($date_array) - list($annee, $mois, $jour) = $date_array; - else - return ''; - - if ($mois > 0){ - $saison = "hiver"; - if (($mois == 3 AND $jour >= 21) OR $mois > 3) $saison = "printemps"; - if (($mois == 6 AND $jour >= 21) OR $mois > 6) $saison = "彋�"; - if (($mois == 9 AND $jour >= 21) OR $mois > 9) $saison = "automne"; - if (($mois == 12 AND $jour >= 21) OR $mois > 12) $saison = "hiver"; - } - - if ($lang == "fr") { - if ($jour == '1') $jour = '1er'; - $tab_mois = array('', - 'janvier', 'f憝rier', 'mars', 'avril', 'mai', 'juin', - 'juillet', 'ao壻', 'septembre', 'octobre', 'novembre', 'd嶰embre'); - $avjc = ' av. J.C.'; - } - elseif ($lang == "en"){ - switch($jour) { - case '1': - $jour = '1st'; - break; - case '2': - $jour = '2nd'; - break; - case '3': - $jour = '3rd'; - break; - case '21': - $jour = '21st'; - break; - case '22': - $jour = '22nd'; - break; - case '23': - $jour = '23rd'; - break; - case '31': - $jour = '31st'; - break; - } - $tab_mois = array('', - 'January', 'February', 'March', 'April', 'May', 'June', - 'July', 'August', 'September', 'October', 'November', 'December'); - $avjc = ' B.C.'; - } - if ($jour == 0) $jour = ""; - if ($jour) $jour .= ' '; - $mois = $tab_mois[(int) $mois]; - if ($annee < 0) { - $annee = -$annee.$avjc; - $avjc = true; + $pos = strpos($letexte, $regs[0]); + $letexte = substr($letexte,0,$pos)."___SPIP_$source$num_echap ___" + .substr($letexte,$pos+strlen($regs[0])); } - else $avjc = false; - - switch ($vue) { - case 'saison': - return $saison; - case 'court': - if ($avjc) return $annee; - $a = date('Y'); - if ($annee < ($a - 100) OR $annee > ($a + 100)) return $annee; - if ($annee != $a) return ucfirst($mois)." $annee"; - return $jour.$mois; - - case 'entier': - if ($avjc) return $annee; - return "$jour$mois $annee"; - - case 'mois': - return "$mois"; - - case 'mois_annee': - if ($avjc) return $annee; - return "$mois $annee"; + // + // Echapper les <html>...</ html> + // + $regexp_echap = "<html>(([^<]|<[^/]|</[^h]|</h[^t]|</ht[^m]|</htm[^l]|<\/html[^>])*)<\/html>"; + while (eregi($regexp_echap, $letexte, $regs)) { + $num_echap++; + $les_echap[$num_echap] = $regs[1]; + $pos = strpos($letexte, $regs[0]); + $letexte = substr($letexte,0,$pos)."___SPIP_$source$num_echap ___" + .substr($letexte,$pos+strlen($regs[0])); } - return '<blink>format non défini</blink>'; -} - - -function nom_jour($numdate) { - global $lang; - $date_array = recup_date($numdate); - if ($date_array) - list($annee,$mois,$jour) = $date_array; - else - return ''; - - if (!$mois OR !$jour) return; - - $nom = mktime(1,1,1,$mois,$jour,$annee); - $nom = date("D",$nom); - - if ($lang == "fr") { - switch($nom) { - case 'Sun': $nom='dimanche'; break; - case 'Mon': $nom='lundi'; break; - case 'Tue': $nom='mardi'; break; - case 'Wed': $nom='mercredi'; break; - case 'Thu': $nom='jeudi'; break; - case 'Fri': $nom='vendredi'; break; - case 'Sat': $nom='samedi'; break; - } - } - elseif ($lang == "en") { - switch($nom) { - case 'Sun': $nom='Sunday'; break; - case 'Mon': $nom='Monday'; break; - case 'Tue': $nom='Tuesday'; break; - case 'Wed': $nom='Wednesday'; break; - case 'Thu': $nom='Thursday'; break; - case 'Fri': $nom='Friday'; break; - case 'Sat': $nom='Saturday'; break; - } + // + // Echapper les <a href> + // + $regexp_echap = "<a [^>]+>"; + while (eregi($regexp_echap, $letexte, $regs)) { + $num_echap++; + $les_echap[$num_echap] = $regs[0]; + $pos = strpos($letexte, $les_echap[$num_echap]); + $letexte = substr($letexte,0,$pos)."___SPIP_$source$num_echap ___" + .substr($letexte,$pos+strlen($les_echap[$num_echap])); } - return $nom; -} - - -function jour($numdate) { - $date_array = recup_date($numdate); - if ($date_array) - list($annee,$mois,$jour) = $date_array; - else - return ''; - if ($jour=="1") $jour="1er"; - return $jour; -} - - -function mois($numdate) { - $date_array = recup_date($numdate); - if ($date_array) - list($annee,$mois,$jour) = $date_array; - else - return ''; - return $mois; -} - - -function annee($numdate) { - $date_array = recup_date($numdate); - if ($date_array) - list($annee,$mois,$jour) = $date_array; - else - return ''; - return $annee; -} - -function saison($numdate) { - return affdate_base($numdate, 'saison'); -} - -function affdate($numdate) { - return affdate_base($numdate, 'entier'); -} - -function affdate_court($numdate) { - return affdate_base($numdate, 'court'); -} - -function affdate_mois_annee($numdate) { - return affdate_base($numdate, 'mois_annee'); -} -function nom_mois($numdate) { - return affdate_base($numdate, 'mois'); + return array($letexte, $les_echap); } -function majuscules($texte) { - $suite = htmlentities($texte); - $suite = ereg_replace('&', '&', $suite); - $suite = ereg_replace('<', '<', $suite); - $suite = ereg_replace('>', '>', $suite); - $texte = ''; - if (ereg('^(.*)&([A-Za-z])([a-zA-Z]*);(.*)$', $suite, $regs)) { - $texte .= majuscules($regs[1]); - $suite = $regs[4]; - $carspe = $regs[2]; - $accent = $regs[3]; - if (ereg('^(acute|grave|circ|uml|cedil|slash|caron|ring|tilde|elig)$', $accent)) - $carspe = strtoupper($carspe); - if ($accent == 'elig') $accent = 'Elig'; - $texte .= '&'.$carspe.$accent.';'; +// Traitement final des echappements +function echappe_retour($letexte, $les_echap, $source) { + while(ereg("___SPIP_$source([0-9]+) ___", $letexte, $match)) { + $lenum = $match[1]; + $cherche = $match[0]; + $pos = strpos($letexte, $cherche); + $letexte = substr($letexte, 0, $pos). $les_echap[$lenum] . substr($letexte, $pos + strlen($cherche)); } - $texte .= strtoupper($suite); - return $texte; -} - -function justifier($letexte) { - if ($letexte) - $letexte = eregi_replace("<p([[:space:]][^>]*)?".">", "<p\\1 align='justify'>", $letexte); - return $letexte; -} - -function aligner_droite($letexte) { - if ($letexte) - $letexte = eregi_replace("<p([[:space:]][^>]*)?".">", "<p\\1 align='right'>",$letexte); return $letexte; } -function aligner_gauche($letexte) { - $letexte = eregi_replace("^<p([[:space:]][^>]*)?".">", "", trim($letexte)); - if ($letexte) - $letexte = eregi_replace("<p([[:space:]][^>]*)?".">", "<p\\1 align='left'>",$letexte); - return $letexte; -} - -function centrer($letexte) { - $letexte = eregi_replace("^<p([[:space:]][^>]*)?".">", "", trim($letexte)); - if ($letexte) - $letexte = eregi_replace("<p([[:space:]][^>]*)?".">", "<p\\1 align='center'>",$letexte); - return $letexte; -} +function couper($texte, $long) { + $texte2 = substr($texte, 0, $long * 2); /* heuristique pour prendre seulement le necessaire */ + if (strlen($texte2) < strlen($texte)) $plus_petit = true; + $texte = ereg_replace("\[([^\[]*)->([^]]*)\]","\\1", $texte2); -function textebrut($texte) { - $texte = ereg_replace("[\n\r]+", " ", $texte); - $texte = eregi_replace("<(p|br)([[:space:]][^>]*)?".">", "\n\n", $texte); - $texte = ereg_replace("^\n+", "", $texte); - $texte = ereg_replace("\n+$", "", $texte); - $texte = ereg_replace("\n +", "\n", $texte); - $texte = supprimer_tags($texte); - $texte = ereg_replace("( | )+", " ", $texte); - return $texte; -} + // supprimer les notes + $texte = ereg_replace("\[\[([^]]|\][^]])*\]\]", "", $texte); + // supprimer les codes typos + $texte = strtr($texte,"{}"," "); -// une fonction bien pratique pour ceux qui aiment les liens qui ouvrent -// une nouvelle fen皻re : utiliser (#TEXTE|liens_ouvrants) -function liens_ouvrants ($texte) { - return ereg_replace("<a ([^>]*class=\"spip_out\")>", - "<a \\1 target=\"_blank\">", $texte); + $texte2 = substr($texte." ", 0, $long); + $texte2 = ereg_replace("([^[:space:]][[:space:]]+)[^[:space:]]*$", "\\1", $texte2); + if ((strlen($texte2) + 3) < strlen($texte)) $plus_petit = true; + if ($plus_petit) $texte2 .= ' (...)'; + return $texte2; } -// si le texte contient <intro>...</intro>, prendre CES bouts-la -// sinon couper automatiquement � la longueur demandee +// prendre <intro>...</intro> sinon couper a la longueur demandee function couper_intro($texte, $long) { $texte = eregi_replace("(</?)intro>", "\\1intro>", $texte); // minuscules while ($fin = strpos($texte, "</intro>")) { @@ -406,50 +181,17 @@ function couper_intro($texte, $long) { return $intro; } -function couper($texte, $long) { - $texte2 = substr($texte, 0, $long * 2); /* heuristique pour prendre seulement le necessaire */ - if (strlen($texte2) < strlen($texte)) $plus_petit = true; - $texte = ereg_replace("\[([^\[]*)->([^]]*)\]","\\1", $texte2); - - // supprimer les notes - $texte = ereg_replace("\[\[([^]]|\][^]])*\]\]", "", $texte); - - // supprimer les codes typos - $texte = strtr($texte,"{}"," "); - - $texte2 = substr($texte." ", 0, $long); - $texte2 = ereg_replace("([^[:space:]][[:space:]]+)[^[:space:]]*$", "\\1", $texte2); - if ((strlen($texte2) + 3) < strlen($texte)) $plus_petit = true; - if ($plus_petit) $texte2 .= ' (...)'; - return $texte2; -} - - -function ereg_remplace($cherche_tableau, $remplace_tableau, $texte) { - global $flag_preg_replace; - - if ($flag_preg_replace) return preg_replace($cherche_tableau, $remplace_tableau, $texte); - - $n = count($cherche_tableau); - - for ($i = 0; $i < $n; $i++) { - $texte = ereg_replace(substr($cherche_tableau[$i], 1, -1), $remplace_tableau[$i], $texte); - } - return $texte; -} +// +// les elements de propre() +// -function taille_en_octets ($taille) { - if ($taille < 1024) {$taille .= " octets";} - else if ($taille < 1024*1024) { - $taille = ((floor($taille / 102.4))/10)." ko"; - } else { - $taille = ((floor(($taille / 1024) / 102.4))/10)." Mo"; - } - return $taille; +// Securite : empecher l'execution de code PHP +function interdire_scripts($source) { + $source = eregi_replace("<(\%|\?|([[:space:]]*)script)", "<\\1", $source); + return $source; } - // correction typographique francaise function typo_fr($letexte) { global $flag_preg_replace; @@ -498,89 +240,7 @@ function typo_fr($letexte) { return ($letexte); } - -// -// Mise de cote des echappements -// - -function echappe_html($letexte,$source) { - // - // Echapper les <code>...</ code> - // - $regexp_echap = "<code>(([^<]|<[^/]|</[^c]|</c[^o]|</co[^d]|</cod[^e]|<\/code[^>])*)<\/code>"; - while (eregi($regexp_echap, $letexte, $regs)) { - $num_echap++; - $lecode = htmlspecialchars($regs[1]); - - // ne pas mettre le <div...> s'il n'y a qu'une ligne - if (is_int(strpos($lecode,"\n"))) - $lecode = nl2br("<div align='left' class='spip_code'>".trim($lecode)."</div>"); - - $lecode = ereg_replace("\t", " ", $lecode); - $lecode = ereg_replace(" ", " ", $lecode); - $les_echap[$num_echap] = "<tt>".$lecode."</tt>"; - $pos = strpos($letexte, $regs[0]); - $letexte = substr($letexte,0,$pos)."___SPIP_$source$num_echap ___" - .substr($letexte,$pos+strlen($regs[0])); - } - - // - // Echapper les <cadre>...</cadre> - // - $regexp_echap = "<cadre>(([^<]|<[^/]|</[^c]|</c[^a]|</ca[^d]|</cad[^r]|</cadr[^e]|<\/cadre[^>])*)<\/cadre>"; - while (eregi($regexp_echap, $letexte, $regs)) { - $num_echap++; - $lecode = trim(htmlspecialchars($regs[1])); - $total_lignes = count(explode("\n", $lecode)) + 1; - - $les_echap[$num_echap] = "<form><textarea cols='40' rows='$total_lignes' wrap='no' class='spip_cadre'>".$lecode."</textarea></form>"; - - $pos = strpos($letexte, $regs[0]); - $letexte = substr($letexte,0,$pos)."___SPIP_$source$num_echap ___" - .substr($letexte,$pos+strlen($regs[0])); - } - - // - // Echapper les <html>...</ html> - // - $regexp_echap = "<html>(([^<]|<[^/]|</[^h]|</h[^t]|</ht[^m]|</htm[^l]|<\/html[^>])*)<\/html>"; - while (eregi($regexp_echap, $letexte, $regs)) { - $num_echap++; - $les_echap[$num_echap] = $regs[1]; - $pos = strpos($letexte, $regs[0]); - $letexte = substr($letexte,0,$pos)."___SPIP_$source$num_echap ___" - .substr($letexte,$pos+strlen($regs[0])); - } - - // - // Echapper les <a href> - // - $regexp_echap = "<a [^>]+>"; - while (eregi($regexp_echap, $letexte, $regs)) { - $num_echap++; - $les_echap[$num_echap] = $regs[0]; - $pos = strpos($letexte, $les_echap[$num_echap]); - $letexte = substr($letexte,0,$pos)."___SPIP_$source$num_echap ___" - .substr($letexte,$pos+strlen($les_echap[$num_echap])); - } - - return array($letexte, $les_echap); -} - -// -// Traitement final des echappements -// - -function echappe_retour($letexte, $les_echap, $source) { - while(ereg("___SPIP_$source([0-9]+) ___", $letexte, $match)) { - $lenum = $match[1]; - $cherche = $match[0]; - $pos = strpos($letexte, $cherche); - $letexte = substr($letexte, 0, $pos). $les_echap[$lenum] . substr($letexte, $pos + strlen($cherche)); - } - return $letexte; -} - +// typo : francaise sinon rien (pour l'instant) function typo($letexte) { global $lang; @@ -595,9 +255,7 @@ function typo($letexte) { return $letexte; } -// // Nettoie un texte, traite les raccourcis spip, la typo, etc. -// function traiter_raccourcis($letexte, $les_echap = false) { global $puce; global $debut_intertitre, $fin_intertitre; @@ -609,14 +267,6 @@ function traiter_raccourcis($letexte, $les_echap = false) { global $ferme_note; global $flag_strpos_3, $flag_preg_replace, $flag_str_replace; - // regle l'id_article pour recuperation d'images -/* global $id_article; - global $id_article_img; - $my_id_article_img = (int) $id_article_img; - if ($my_id_article_img == 0) { - $my_id_article_img = (int) $id_article; - }*/ - // Harmoniser les retours chariot $letexte = ereg_replace ("\r\n?", "\n",$letexte); @@ -805,7 +455,7 @@ function traiter_raccourcis($letexte, $les_echap = false) { // en forme (paragraphes, raccourcis...) // // ATTENTION : si vous modifiez cette partie, modifiez les DEUX - // alternatives (if/else) de fa蔞n similaire. Merci. + // alternatives (if/else) de facon similaire. Merci. // $letexte = trim($letexte); @@ -868,7 +518,7 @@ function traiter_raccourcis($letexte, $les_echap = false) { return $letexte; } - +// filtre a appliquer aux champs du type #TEXTE* function propre($letexte) { return interdire_scripts(traiter_raccourcis(trim($letexte))); } diff --git a/inc-calcul.php3 b/inc-calcul.php3 index 0ab5dc7686..168dda46fa 100644 --- a/inc-calcul.php3 +++ b/inc-calcul.php3 @@ -92,6 +92,7 @@ function integre_image($id_document, $align, $affichage_detaille = false) { include_local("ecrire/inc_index.php3"); include_local("ecrire/inc_texte.php3"); +include_local ("ecrire/inc_filtres.php3"); include_local("inc-forum.php3"); diff --git a/inc-formulaires.php3 b/inc-formulaires.php3 index 97b608749e..efbd9e2c2a 100644 --- a/inc-formulaires.php3 +++ b/inc-formulaires.php3 @@ -52,6 +52,7 @@ function formulaire_signature($id_article) { include_local ("ecrire/inc_connect.php3"); include_local ("ecrire/inc_texte.php3"); + include_local ("ecrire/inc_filtres.php3"); echo "<a name='sp$id_article'>"; diff --git a/inc-forum.php3 b/inc-forum.php3 index 4e72ba274e..7045b91c62 100644 --- a/inc-forum.php3 +++ b/inc-forum.php3 @@ -11,6 +11,7 @@ include_local ("ecrire/inc_meta.php3"); include_local ("ecrire/inc_admin.php3"); include_local ("ecrire/inc_acces.php3"); include_local ("ecrire/inc_texte.php3"); +include_local ("ecrire/inc_filtres.php3"); include_local ("ecrire/inc_mail.php3"); if (file_exists("inc-urls.php3")) { include_local ("inc-urls.php3"); diff --git a/inc-public.php3 b/inc-public.php3 index efd60bad67..493eb48167 100644 --- a/inc-public.php3 +++ b/inc-public.php3 @@ -172,8 +172,9 @@ if (!file_exists("CACHE/.htaccess")) { if (lire_meta('activer_moteur') == 'oui') { $fichier_index = 'CACHE/.index'; if ($db_ok) { - include_local("ecrire/inc_texte.php3"); - include_local("ecrire/inc_index.php3"); + include_local ("ecrire/inc_texte.php3"); + include_local ("ecrire/inc_filtres.php3"); + include_local ("ecrire/inc_index.php3"); $s = ''; if ($id_article AND !deja_indexe('article', $id_article)) $s .= "article $id_article\n"; @@ -194,8 +195,9 @@ if (lire_meta('activer_moteur') == 'oui') { if ($use_cache AND file_exists($fichier_index) AND $size = filesize($fichier_index)) { include_local ("ecrire/inc_connect.php3"); if ($db_ok) { - include_local("ecrire/inc_texte.php3"); - include_local("ecrire/inc_index.php3"); + include_local ("ecrire/inc_texte.php3"); + include_local ("ecrire/inc_filtres.php3"); + include_local ("ecrire/inc_index.php3"); $f = fopen($fichier_index, 'r'); $s = fgets($f, 100); $suite = fread($f, $size); @@ -322,6 +324,7 @@ if ($id_article AND lire_meta("activer_statistiques") != "non" AND !$flag_preser if ($db_ok AND lire_meta("activer_syndic") != "non") { include_local ("ecrire/inc_texte.php3"); + include_local ("ecrire/inc_filtres.php3"); include_local ("ecrire/inc_sites.php3"); include_local ("ecrire/inc_index.php3"); executer_une_syndication(); -- GitLab