SPIP Blog

Du logiciel libre et de la tendresse

Accueil > Développement > Une vieillerie

Une vieillerie

mercredi 8 octobre 2008, par Fil

Retrouvée sur mon disque dur :

<?php
/* *******************************************************************
  SPIPLIB -- ensemble de fonctions pratiques pour SPIP/PHP

  Ecrire à <spip@atlas.bok.net> ; cette version = 0.0.2    30/05/2000
  ***************************************************************** */

// si on a déjà été chargé, on ne fait rien
if ( ! $spip_lib ) {
        $spip_lib = 1;


/* *******************************************************************
  On déclare ici les variables globales qui devront ensuite passer
  dans un fichier spip_config.inc                                   */

        $spip_table_ouvre = "<P align='center'><TABLE CELLPADDING=4><TR><TD ALIGN='center' BGCOLOR='#DDDDDD'>";
        $spip_table_ferme = "</TABLE><P>";
        $spip_table_element = "<TR><TD ALIGN='center' BGCOLOR='#DDDDDD'>";
        $spip_table_fin_element = "</TR>";
        $spip_table_case = "<TD ALIGN='center' BGCOLOR='#DDDDDD'>";
        $spip_li = '<BR><IMG SRC="/img/triangle.gif" ALT="&gt;" WIDTH=8 HEIGHT=7 ALIGN=bottom> ';


/* *******************************************************************
  PROPRE :   cette fonction est destinée à prendre un texte simple
  dans un formulaire web et de le nettoyer, tout en assurant un
  minimum de formatage avec des règles simples                     */

function propre($letexte){

        global
                $spip_table_ouvre,
                $spip_table_ferme,
                $spip_table_element,
                $spip_table_fin_element,
                $spip_table_case,
                $spip_li ;

        // sauts de ligne
        $letexte=ereg_replace("\r","\n",$letexte);

        // tirets long
        $letexte = ereg_replace("-","-",$letexte);
        $letexte = ereg_replace("&emdash;","-",$letexte);
        $letexte = ereg_replace("&endash;","-",$letexte);

        // espace dur (a revoir  | ici un espace "dur"
        //                       V    à coder en ascii
        $letexte = ereg_replace(" ","~",$letexte);
        $letexte = ereg_replace("&nbsp;","~",$letexte);

        // guillemets
        $letexte = ereg_replace("&#171","«",$letexte);
        $letexte = ereg_replace("»","»",$letexte);
        $letexte = ereg_replace(""","\"",$letexte);
        $letexte = ereg_replace(""","\"",$letexte);

        // caracteres non-ISO ou échappés (PAS CLAIR les guillemets)
        $letexte = ereg_replace("…","...",$letexte);
        $letexte = ereg_replace("œ","oe",$letexte);
        $letexte = ereg_replace("\'","'",$letexte);        // ?
        $letexte = ereg_replace("\'","'",$letexte);        // ?
        $letexte = ereg_replace('\\\"',"\"",$letexte);        // ?
        $letexte = ereg_replace('\\\\\'',"'",$letexte);        // ?

        // tableau
        if (ereg("\n\n\|",$letexte)){
                $letexte = ereg_replace("\n\n\n\|",$spip_table_ouvre,$letexte);
                $letexte = ereg_replace("\|\n\n\n","|".$spip_table_ferme,$letexte);
                $letexte = ereg_replace("\n\|",$spip_table_element,$letexte);
                $letexte = ereg_replace("\|\n",$spip_table_fin_element,$letexte);
                $letexte = ereg_replace("\|",$spip_table_case,$letexte);
        }

        // paragraphe
        $letexte = ereg_replace("(\n( *)){3,}","<P>\n",$letexte);

        // les sauts de ligne inutiles en fin de texte
        /* Arno : explique-moi comment il peut rester du \r dans la variable ? */
        $letexte = ereg_replace("([\r]*[\n]*)*$","",$letexte);

        // liste d'items
        $letexte = ereg_replace("--",$spip_li,$letexte);
        $letexte = ereg_replace("^-",$spip_li,$letexte);
        $letexte = ereg_replace("\n-",$spip_li,$letexte);

        // typo
        $letexte = ereg_replace("\n\{(.{1,2})\}","\n<B><font size=6>\\1</font></B>",$letexte);
        $letexte = ereg_replace("\{\{\{","<H4>",$letexte);
        $letexte = ereg_replace("\}\}\}","</H4>",$letexte);
        $letexte = ereg_replace("\{\{","<B>",$letexte);
        $letexte = ereg_replace("\}\}","</B>",$letexte);
        $letexte = ereg_replace("\{","<I>",$letexte);
        $letexte = ereg_replace("\}","</I>",$letexte);
/* attention il peut y avoir des ~ dans les URLS */
        $letexte = ereg_replace("[ ~]*([:;!?»%])","~\\1",$letexte);
        $letexte = ereg_replace("([«])[ ~]*","\\1~",$letexte);
        $letexte = ereg_replace("(~+)","&nbsp;",$letexte);
       
        //   **** bizarrerie ? ****
        $letexte = ereg_replace("¥([^¥]*)¥","<B>\\1</B>",$letexte);

        // lien sans URL apparente [ Mot -> http://... ]
        $letexte = ereg_replace("\[([^\[]*)->([^\[]*)\]","<A HREF='\\2' target='new'>\\1</A>",$letexte);

        // lien sur URL
        $letexte = ereg_replace("(http|ftp|mailto)&nbsp;://","\\1://",$letexte);
        $letexte = ereg_replace("(<BR>){2,}","<P>",$letexte);
        $letexte = ereg_replace("<P>(<BR>){1,}","<P>",$letexte);

        return $letexte;
}


/* *******************************************************************
   SUPGUILL : supprime les guillemets ajoutes par Excel(tm)
   et contourne le probleme des <A href> interpretes par Excel (tm)
   en utilisant { et } comme caractères de rechange ; très utile
   lorsqu'on utilise des tableaux texte/tabulation en guise de
   petites bases de données                                         */

function supguill ($reg)
{
        $reg = ereg_replace( "(\"\t|\t\"|\"\t\")","\t",$reg);
        $reg = ereg_replace( "\"$","",$reg);
        $reg = ereg_replace( "\"\n","\n",$reg);
        $reg = ereg_replace( "^\"","",$reg);
        $reg = ereg_replace( "\"\"","\"",$reg);
        $reg = ereg_replace( "\{","<",$reg);
        $reg = ereg_replace( "\}",">",$reg);
        $reg = ereg_replace( "\'","'",$reg);
        $reg = ereg_replace(""","“",$reg);
        $reg = ereg_replace(""","”",$reg);
        $reg = ereg_replace("…","...",$reg);
        return $reg;
}


/* *******************************************************************
   FUSIONURL : prend un URL de base et un lien, et les mixe.
   Exemple : si $url = "http://serveur/dossier/ ;
   $lien = "http://autre-serveur"  -> inchangé
   $lien = "/autredossier" -> "http://serveur/autredossier
   $lien = "sousdossier" -> "http://serveur/dossier/soudossier"    */

function fusionurl($url, $lien) {
        if (eregi("^mailto:",$lien,$regs)){
                return $lien;
        }else{
                $liene = parse_url($lien);
                if ($liene[host]) return($lien);
                $ure = parse_url($url);
                if ($ure[port]) $ure[port]=":".$ure[port];
                if (substr($liene[path],0,1)=="/") { return($ure[scheme]."://".$ure[host].$ure[port].$liene[path].$liene[query].$liene[fragment]); } else
                { return($ure[scheme]."://".$ure[host].$ure[port].$ure[path]."/".$liene[path].$liene[query]); };
        }
}


/* *******************************************************************
   AFFDATE : prend une date sous un des formats suivants et retourne
   sa valeur en français (ou anglais si deuxieme para="en").
         19/01/72 ; 1972-01-19 ; 2000-07

   peut affecter $spip_date_de : pour faire, par exemple,
        $date_francais = affdate ($date);
        print "les données ".$spip_date_de.$date_francais ;
        > les données d'août 2000   /    les données de juillet 2000    */
 
function affdate($numdate,$lang="fr") {

        global
                $spip_date_de;

        if (ereg("([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{1,2})",$numdate,$regs)){
                $mois = $regs[2];
                $jour = $regs[1];
                $annee = $regs[3];
                // si Excel (tm) se mêle des dates, il faut les démêler
                if ($annee < 90){
                        $annee = 2000 +$annee;
                } else {
                        $annee = 1900+$annee ;
                }
                $datevue = 3;
        } elseif (ereg("([0-9]{4})-([0-9]{2})-([0-9]{2})",$numdate,$regs)){
                $mois=$regs[2];
                $jour=$regs[3];
                $annee=$regs[1];
                $datevue = 3;
        } elseif (ereg("([0-9]{4})-([0-9]{2})",$numdate,$regs)){
                $mois=$regs[2];
                $annee=$regs[1];
                $datevue = 2;
        }

        if (substr($jour,0,1)=="0") $jour=substr($jour,1,1);

        if (($lang == "") || ($lang =="fr")){
                if (strcmp($jour,"1")==0) $jour="1er";
                if ($jour) $jour .= " ";
                if ($mois==1) {$mois="janvier"; $spip_date_de="de ";}
                if ($mois==2) {$mois="février"; $spip_date_de="de ";}
                if ($mois==3) {$mois="mars"; $spip_date_de="de ";}
                if ($mois==4) {$mois="avril"; $spip_date_de="d'";}
                if ($mois==5) {$mois="mai"; $spip_date_de="de ";}
                if ($mois==6) {$mois="juin"; $spip_date_de="de ";}
                if ($mois==7) {$mois="juillet"; $spip_date_de="de ";}
                if ($mois==8) {$mois="août"; $spip_date_de="d'";}
                if ($mois==9) {$mois="septembre"; $spip_date_de="de ";}
                if ($mois==10){$mois="octobre"; $spip_date_de="d'";}
                if ($mois==11){$mois="novembre"; $spip_date_de="de ";}
                if ($mois==12){$mois="décembre"; $spip_date_de="de ";}
        } elseif ($lang == "en"){
                if (strcmp($jour,"1")==0) $jour="1st";
                if ($jour) $jour .= " ";
                if ($mois==1) {$mois="January";}
                if ($mois==2) {$mois="February";}
                if ($mois==3) {$mois="March";}
                if ($mois==4) {$mois="April";}
                if ($mois==5) {$mois="May";}
                if ($mois==6) {$mois="June";}
                if ($mois==7) {$mois="July";}
                if ($mois==8) {$mois="August";}
                if ($mois==9) {$mois="September";}
                if ($mois==10){$mois="October";}
                if ($mois==11){$mois="November";}
                if ($mois==12){$mois="December";}
        }
  if ($datevue){
        $res=sprintf("%s%s %s",$jour,$mois,$annee);
        return $res;
  }
}

/* *******************************************************************
   MAJUSCULES : passe un texte en majuscules y compris les accents */

function majuscules($texte){
        $texte=htmlentities($texte);
        $texte=strtoupper($texte);
        $texte=eregi_replace("\&","&",$texte);
        $texte=eregi_replace("\&(.)acute;","&\\1acute;",$texte);
        $texte=eregi_replace("\&(.)circ;","&\\1circ;",$texte);
        $texte=eregi_replace("\&(.)grave;","&\\1grave;",$texte);
        $texte=eregi_replace("\&(.)uml;","&\\1uml;",$texte);

        return $texte;
}

// fin de la librairie
}
/* ******************************************************************* */
?>

Messages

Un message, un commentaire ?

Qui êtes-vous ?
Se connecter
Votre message

Ce formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.