[ Index ] |
|
Code source de SPIP Agora 1.4 |
1 <?php 2 /***************************************************** 3 * This file is part of Agora, web based content management system. 4 * 5 * Agora is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; version 2 of the License. 8 * 9 * Agora is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details (file "COPYING"). 13 * 14 * Copyright © Arnaud Martin, Antoine Pitrou et Philippe Rivière. 15 * List of authors detailed in "copyright_fr.html" file. 16 * E-mail : agora@sig.premier-ministre.gouv.fr 17 * Web site : http://www.agora.gouv.fr 18 *****************************************************/ 19 // Ce fichier ne sera execute qu'une fois 20 if (defined("_ECRIRE_INC_FILTRES")) 21 return; 22 23 define("_ECRIRE_INC_FILTRES", "1"); 24 25 // Include filtres pour la generation XML du DXS 26 require_once ("inc_dxs.php"); 27 28 // End include 29 30 // Echappement des entites HTML avec correction des entites "brutes" 31 // (generees par les butineurs lorsqu'on rentre des caracteres n'appartenant 32 // pas au charset de la page [iso-8859-1 par defaut]) 33 function corriger_entites_html ($texte) { 34 return ereg_replace('&(#[0-9]+;)', '&\1', $texte); 35 } 36 37 function entites_html ($texte) { 38 return corriger_entites_html(htmlspecialchars($texte)); 39 } 40 41 // Transformer les é dans le charset local 42 function filtrer_entites ($texte) { 43 include_ecrire ('inc_charsets.php'); 44 // filtrer 45 $texte = html2unicode($texte); 46 // remettre le tout dans le charset cible 47 return unicode2charset($texte); 48 } 49 50 // Tout mettre en entites pour l'export backend (sauf iso-8859-1) 51 function entites_unicode ($texte) { 52 include_ecrire ('inc_charsets.php'); 53 return charset2unicode($texte); 54 } 55 56 // Enleve le numero des titres numerotes ("1. Titre" -> "Titre") 57 function supprimer_numero ($texte) { 58 $texte = ereg_replace("^[[:space:]]*[0-9]+[.)" . chr(176). "][[:space:]]+", "", $texte); 59 return $texte; 60 } 61 62 // Suppression basique et brutale de tous les <...> 63 function supprimer_tags ($texte, $rempl = "") { 64 // super gavant : la regexp ci-dessous plante sous php3, genre boucle infinie ! 65 // $texte = ereg_replace("<([^>\"']*|\"[^\"]*\"|'[^']*')*>", $rempl, $texte); 66 $texte = ereg_replace("<[^>]*>", $rempl, $texte); 67 return $texte; 68 } 69 70 // Convertit les <...> en la version lisible en HTML 71 function echapper_tags ($texte, $rempl = "") { 72 $texte = ereg_replace("<([^>]*)>", "<\\1>", $texte); 73 return $texte; 74 } 75 76 // Convertit un texte HTML en texte brut 77 function textebrut ($texte) { 78 $texte = ereg_replace("[\n\r]+", " ", $texte); 79 $texte = eregi_replace("<(p|br)([[:space:]][^>]*)?" . ">", "\n\n", $texte); 80 $texte = ereg_replace("^\n+", "", $texte); 81 $texte = ereg_replace("\n+$", "", $texte); 82 $texte = ereg_replace("\n +", "\n", $texte); 83 $texte = supprimer_tags($texte); 84 $texte = ereg_replace("( | )+", " ", $texte); 85 return $texte; 86 } 87 88 // Remplace les liens SPIP en liens ouvrant dans une nouvelle fenetre (target=blank) 89 function liens_ouvrants ($texte) { 90 return ereg_replace("<a ([^>]*https?://[^>]*class=\"spip_(out|url)\")>", "<a \\1 target=\"_blank\">", $texte); 91 } 92 93 // Corrige les caracteres degoutants utilises par les Windozeries 94 function corriger_caracteres ($texte) { 95 static $trans; 96 97 if (!$trans) { 98 // 145,146,180 = simple quote ; 147,148 = double quote ; 150,151 = tiret long 99 $trans['iso-8859-1'] = array(chr(146)=> "'", chr(180)=> "'", chr(147)=> '“', chr(148)=> '”', 100 chr(150)=> '-', chr(151)=> '-', chr(133)=> '...'); 101 $trans['utf-8'] = array(chr(194). chr(146)=> "'", chr(194). chr(180)=> "'", chr(194). chr(147)=> '“', 102 chr(194). chr(148)=> '”', chr(194). chr(150)=> '-', chr(194). chr(151)=> '-', 103 chr(194). chr(133)=> '...'); 104 } 105 106 $charset = lire_meta('charset'); 107 108 if (!$trans[$charset]) 109 return $texte; 110 111 if ($GLOBALS['flag_strtr2']) 112 return strtr($texte, $trans[$charset]); 113 114 reset($trans[$charset]); 115 116 while (list($from, $to) = each($trans[$charset])) 117 $texte = str_replace($from, $to, $texte); 118 119 return $texte; 120 } 121 122 // Transformer les sauts de paragraphe en simples passages a la ligne 123 function PtoBR ($texte) { 124 $texte = eregi_replace("</p>", "\n", $texte); 125 $texte = eregi_replace("<p([[:space:]][^>]*)?" . ">", "<br />", $texte); 126 $texte = ereg_replace("^[[:space:]]*<br />", "", $texte); 127 return $texte; 128 } 129 130 // Majuscules y compris accents, en HTML 131 function majuscules ($texte) { 132 if (lire_meta('charset') != 'iso-8859-1') 133 return "<span style='text-transform: uppercase'>$texte</span>"; 134 135 $suite = htmlentities($texte); 136 $suite = ereg_replace('&', '&', $suite); 137 $suite = ereg_replace('<', '<', $suite); 138 $suite = ereg_replace('>', '>', $suite); 139 $texte = ''; 140 141 if (ereg('^(.*)&([A-Za-z])([a-zA-Z]*);(.*)$', $suite, $regs)) { 142 $texte .= majuscules($regs[1]); // quelle horrible recursion 143 $suite = $regs[4]; 144 $carspe = $regs[2]; 145 $accent = $regs[3]; 146 147 if (ereg('^(acute|grave|circ|uml|cedil|slash|caron|ring|tilde|elig)$', $accent)) 148 $carspe = strtoupper($carspe); 149 150 if ($accent == 'elig') 151 $accent = 'Elig'; 152 $texte .= '&' . $carspe . $accent . ';'; 153 } 154 155 $texte .= strtoupper($suite); 156 return $texte; 157 } 158 159 // "127.4 ko" ou "3.1 Mo" 160 function taille_en_octets ($taille) { 161 if ($taille < 1024) { 162 $taille = _T('taille_octets', array('taille' => $taille)); 163 } 164 else if ($taille < 1024 * 1024) { 165 $taille = _T('taille_ko', array('taille' => ((floor($taille / 102.4)) / 10))); 166 } 167 else { 168 $taille = _T('taille_mo', array('taille' => ((floor(($taille / 1024) / 102.4)) / 10))); 169 } 170 171 return $taille; 172 } 173 174 // Transforme n'importe quel champ en une chaine utilisable 175 // en PHP ou Javascript en toute securite 176 // < ? php $x = '[(#TEXTE|texte_script)]'; ? > 177 function texte_script ($texte) { 178 $texte = str_replace('\\', '\\\\', $texte); 179 $texte = str_replace('\'', '\\\'', $texte); 180 return $texte; 181 } 182 183 // Rend une chaine utilisable sans dommage comme attribut HTML 184 function attribut_html ($texte) { 185 $texte = ereg_replace('"', '"', supprimer_tags($texte)); 186 return $texte; 187 } 188 189 // Vider les url nulles comme 'http://' ou 'mailto:' 190 function vider_url ($url) { 191 if (eregi("^(http:?/?/?|mailto:?)$", trim($url))) 192 return false; 193 else 194 return $url; 195 } 196 197 // Extraire une date de n'importe quel champ (a completer...) 198 function extraire_date ($texte) { 199 // format = 2001-08 200 if (ereg("([1-2][0-9]{3})[^0-9]*(0?[1-9]|1[0-2])", $texte, $regs)) 201 return $regs[1]. "-" . $regs[2]. "01"; 202 } 203 204 // Maquiller une adresse e-mail 205 function antispam ($texte) { 206 include_ecrire ("inc_acces.php"); 207 $masque = creer_pass_aleatoire(3); 208 return ereg_replace("@", " $masque ", $texte); 209 } 210 211 // |sinon{rien} : affiche "rien" si la chaine est vide, affiche la chaine si non vide 212 function sinon ($texte, $sinon = '') { 213 if ($texte) 214 return $texte; 215 else 216 return $sinon; 217 } 218 219 // 220 // Date, heure, saisons 221 // 222 223 function normaliser_date ($date) { 224 /* Ajout nhoizey@clever-age.com */ 225 if ($date == '1970-01-01 00:00:00') 226 $date .= ' GMT'; 227 /* Fin d'ajout */ 228 if ($date != "NULL") { 229 if (ereg("^[0-9]{8,10}$", $date)) 230 $date = date("Y-m-d H:i:s", $date); 231 if (ereg("^([12][0-9]{3})([-/]00)?( [-0-9:]+)?$", $date, $regs)) 232 $date = $regs[1]. "-01-01" . $regs[3]; 233 else if (ereg("^([12][0-9]{3}[-/][01]?[0-9])([-/]00)?( [-0-9:]+)?$", $date, $regs)) 234 $date = ereg_replace("/", "-", $regs[1]). "-01" . $regs[3]; 235 else if ($GLOBALS['flag_strtotime']) { 236 $date = date("Y-m-d H:i:s", strtotime($date)); 237 } 238 else 239 $date = ereg_replace('[^-0-9/: ]', '', $date); 240 } 241 242 return $date; 243 } 244 245 function vider_date ($letexte) { 246 if (ereg("^0000-00-00", $letexte)) 247 return ''; 248 249 return $letexte; 250 } 251 252 function recup_heure ($numdate) { 253 if (!$numdate) 254 return ''; 255 256 if (ereg('([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})', $numdate, $regs)) { 257 $heures = $regs[1]; 258 $minutes = $regs[2]; 259 $secondes = $regs[3]; 260 } 261 262 return array($heures, $minutes, $secondes); 263 } 264 265 function heures ($numdate) { 266 $date_array = recup_heure($numdate); 267 268 if ($date_array) 269 list($heures, $minutes, $secondes) = $date_array; 270 271 return $heures; 272 } 273 274 function minutes ($numdate) { 275 $date_array = recup_heure($numdate); 276 277 if ($date_array) 278 list($heures, $minutes, $secondes) = $date_array; 279 280 return $minutes; 281 } 282 283 function secondes ($numdate) { 284 $date_array = recup_heure($numdate); 285 286 if ($date_array) 287 list($heures, $minutes, $secondes) = $date_array; 288 289 return $secondes; 290 } 291 292 function heures_minutes ($numdate) { 293 return _T('date_fmt_heures_minutes', array('h' => heures($numdate), 'm' => minutes($numdate))); 294 } 295 296 function recup_date ($numdate) { 297 if (!$numdate) 298 return ''; 299 300 if (ereg('([0-9]{1,2})/([0-9]{1,2})/([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})', $numdate, $regs)) { 301 $jour = $regs[1]; 302 $mois = $regs[2]; 303 $annee = $regs[3]; 304 305 if ($annee < 90) { 306 $annee = 2000 + $annee; 307 } 308 else { 309 $annee = 1900 + $annee; 310 } 311 312 $heure = $regs[4]; 313 $minute = $regs[5]; 314 $seconde = $regs[6]; 315 } 316 elseif (ereg('([0-9]{4})-([0-9]{1,2})-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})', $numdate, $regs)) { 317 $annee = $regs[1]; 318 $mois = $regs[2]; 319 $jour = $regs[3]; 320 $heure = $regs[4]; 321 $minute = $regs[5]; 322 $seconde = $regs[6]; 323 } 324 elseif (ereg('([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})', $numdate, $regs)) { 325 $annee = $regs[1]; 326 $mois = $regs[2]; 327 $jour = $regs[3]; 328 } 329 elseif (ereg('([0-9]{1,2})/([0-9]{1,2})/([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2})', $numdate, $regs)) { 330 $jour = $regs[1]; 331 $mois = $regs[2]; 332 $annee = $regs[3]; 333 if ($annee < 90) { 334 $annee = 2000 + $annee; 335 } 336 else { 337 $annee = 1900 + $annee; 338 } 339 } 340 elseif (ereg('([0-9]{4})-([0-9]{2})', $numdate, $regs)) { 341 $annee = $regs[1]; 342 $mois = $regs[2]; 343 } 344 345 if ($annee > 4000) 346 $annee -= 9000; 347 348 if (substr($jour, 0, 1) == '0') 349 $jour = substr($jour, 1); 350 351 return array($annee, $mois, $jour, $heure, $minute, $seconde); 352 } 353 354 function affdate_base ($numdate, $vue) { 355 global $spip_lang; 356 $date_array = recup_date($numdate); 357 358 if ($date_array) 359 list($annee, $mois, $jour, $heure, $minute, $seconde) = $date_array; 360 else 361 return ''; 362 363 // 1er, 21st, etc. 364 $journum = $jour; 365 366 switch ($spip_lang) { 367 case 'en': 368 switch ($jour) { 369 case 0: 370 $jour = ''; 371 break; 372 373 case 1: 374 $jour = '1st'; 375 break; 376 377 case 2: 378 $jour = '2nd'; 379 break; 380 381 case 3: 382 $jour = '3rd'; 383 break; 384 385 case 21: 386 $jour = '21st'; 387 break; 388 389 case 22: 390 $jour = '22nd'; 391 break; 392 393 case 23: 394 $jour = '23rd'; 395 break; 396 397 case 31: 398 $jour = '31st'; 399 break; 400 401 default: 402 $jour .= 'th'; 403 } 404 405 case 'fr': 406 if ($jour == '1') 407 $jour = '1er'; 408 } 409 410 if ($jour == 0) 411 $jour = ''; 412 413 $mois = intval($mois); 414 415 if ($mois > 0 AND $mois < 13) 416 $nommois = _T('date_mois_' . $mois); 417 else 418 $nommois = ''; 419 420 if ($annee < 0) { 421 $annee = -$annee . " " . _T('date_avant_jc'); 422 $avjc = true; 423 } 424 else 425 $avjc = false; 426 427 switch ($vue) { 428 case 'complet': 429 if ($avjc) 430 return $annee; 431 if ($jour) 432 return d_apostrophe(_T('date_fmt_jour_mois_annee_heure_minute_seconde', 433 array('jour' => $jour, 'nommois' => $nommois, 'mois' => $mois, 'annee' => $annee, 434 'heure' => $heure, 'minute' => $minute, 'seconde' => $seconde))); 435 else 436 return d_apostrophe( 437 _T('date_fmt_jour_mois_annee_heure_minute_seconde', 438 array('mois' => $mois, 'nommois' => $nommois, 'annee' => $annee, 'heure' => $heure, 439 'minute' => $minute, 'seconde' => $seconde))); 440 441 case 'saison': 442 if ($mois > 0) { 443 $saison = 1; 444 445 if (($mois == 3 AND $jour >= 21)OR $mois > 3) 446 $saison = 2; 447 448 if (($mois == 6 AND $jour >= 21)OR $mois > 6) 449 $saison = 3; 450 451 if (($mois == 9 AND $jour >= 21)OR $mois > 9) 452 $saison = 4; 453 if (($mois == 12 AND $jour >= 21)OR $mois > 12) 454 $saison = 1; 455 } 456 return _T('date_saison_' . $saison); 457 458 case 'court': 459 if ($avjc) 460 return $annee; 461 $a = date('Y'); 462 if ($annee < ($a - 100)OR $annee > ($a + 100)) 463 return $annee; 464 if ($annee != $a) 465 return d_apostrophe(_T('date_fmt_mois_annee', 466 array('mois' => $mois, 'nommois' => ucfirst($nommois), 'annee' => $annee))); 467 return d_apostrophe(_T('date_fmt_jour_mois', 468 array('jour' => $jour, 'nommois' => $nommois, 'mois' => $mois, 'annee' => $annee))); 469 470 case 'jourcourt': 471 if ($avjc) 472 return $annee; 473 $a = date('Y'); 474 if ($annee < ($a - 100)OR $annee > ($a + 100)) 475 return $annee; 476 if ($annee != $a) 477 return d_apostrophe( 478 _T('date_fmt_jour_mois_annee', 479 array('jour' => $jour, 'mois' => $mois, 'nommois' => $nommois, 'annee' => $annee))); 480 return d_apostrophe(_T('date_fmt_jour_mois', 481 array('jour' => $jour, 'nommois' => $nommois, 'mois' => $mois, 'annee' => $annee))); 482 483 case 'entier': 484 if ($avjc) 485 return $annee; 486 if ($jour) 487 return d_apostrophe( 488 _T('date_fmt_jour_mois_annee', 489 array('jour' => $jour, 'nommois' => $nommois, 'mois' => $mois, 'annee' => $annee))); 490 else 491 return d_apostrophe( 492 _T('date_fmt_mois_annee', array('mois' => $mois, 'nommois' => $nommois, 'annee' => $annee))); 493 494 case 'nom_mois': 495 return $nommois; 496 497 case 'mois': 498 return sprintf("%02s", $mois); 499 500 case 'jour': 501 return $jour; 502 503 case 'journum': 504 return $journum; 505 506 case 'nom_jour': 507 if (!$mois OR !$jour) 508 return ''; 509 $nom = mktime(1, 1, 1, $mois, $jour, $annee); 510 $nom = 1 + date('w', $nom); 511 return _T('date_jour_' . $nom); 512 513 case 'mois_annee': 514 if ($avjc) 515 return $annee; 516 return trim(d_apostrophe(_T('date_fmt_mois_annee', 517 array('mois' => $mois, 'nommois' => $nommois, 'annee' => $annee)))); 518 519 case 'annee': 520 return $annee; 521 } 522 523 return "<blink>" . _T('info_format_non_defini'). "</blink>"; 524 } 525 526 function nom_jour ($numdate) { 527 return affdate_base($numdate, 'nom_jour'); 528 } 529 530 function jour ($numdate) { 531 return affdate_base($numdate, 'jour'); 532 } 533 534 function journum ($numdate) { 535 return affdate_base($numdate, 'journum'); 536 } 537 538 function mois ($numdate) { 539 return affdate_base($numdate, 'mois'); 540 } 541 542 function nom_mois ($numdate) { 543 return affdate_base($numdate, 'nom_mois'); 544 } 545 546 function annee ($numdate) { 547 return affdate_base($numdate, 'annee'); 548 } 549 550 function saison ($numdate) { 551 return affdate_base($numdate, 'saison'); 552 } 553 554 function affdate ($numdate) { 555 return affdate_base($numdate, 'entier'); 556 } 557 558 function affdate_court ($numdate) { 559 return affdate_base($numdate, 'court'); 560 } 561 562 function affdate_jourcourt ($numdate) { 563 return affdate_base($numdate, 'jourcourt'); 564 } 565 566 function affdate_mois_annee ($numdate) { 567 return affdate_base($numdate, 'mois_annee'); 568 } 569 570 function affdate_heure ($numdate) { 571 return _T('date_fmt_jour_heure', array('jour' => affdate($numdate), 'heure' => heures_minutes($numdate))); 572 } 573 574 // renvoie "d'octobre" (ocitan) ou "de octubre" (espagnol) 575 function d_apostrophe ($texte) { 576 global $spip_lang; 577 578 if (ereg("^(oci_.+|fr|ca)$", $spip_lang)) 579 return ereg_replace("^(.+ )?de ([aeiou])", "\\1d'\\2", $texte); 580 else 581 return $texte; 582 } 583 584 // 585 // Alignements en HTML 586 // 587 588 function aligner ($letexte, $justif) { 589 /* --- nhoizey --- 590 $letexte = eregi_replace("<p([^>]*)", "<p\\1 align='$justif'", trim($letexte)); 591 if ($letexte AND !ereg("^[[:space:]]*<p", $letexte)) { 592 $letexte = "<p class='spip' align='$justif'>" . $letexte . "</p>"; 593 } 594 */ 595 $letexte = eregi_replace("<p([^>]*)", "<p\\1 style=\"text-align: $justif;\"", trim($letexte)); 596 // ajout Olivier Mansour 597 // detection de la class du paragraphe et annulation de l'application du style 598 $letexte = eregi_replace("(<p class=\"(spip_vignette|spip_titre_document|spip_descriptif|spip_complement)\")[^>]*>", 599 "\\1>", 600 $letexte); 601 602 // fin ajout Olivier Mansour 603 if ($letexte AND !ereg("^[[:space:]]*<p", $letexte)) { 604 $letexte = '<p class="spip" style="text-align: ' . $justif . ';">' . $letexte . '</p>'; 605 } 606 607 return $letexte; 608 } 609 610 function justifier ($letexte) { 611 return aligner($letexte, 'justify'); 612 } 613 614 function aligner_droite ($letexte) { 615 return aligner($letexte, 'right'); 616 } 617 618 function aligner_gauche ($letexte) { 619 return aligner($letexte, 'left'); 620 } 621 622 function centrer ($letexte) { 623 return aligner($letexte, 'center'); 624 } 625 626 // 627 // Export iCal 628 // 629 630 function filtrer_ical ($texte) { 631 $texte = html2unicode($texte); 632 $texte = unicode2charset(charset2unicode($texte, lire_meta('charset'), 1), 'utf-8'); 633 $texte = ereg_replace("\n", " ", $texte); 634 $texte = ereg_replace(",", "\,", $texte); 635 636 return $texte; 637 } 638 639 function date_ical ($date_heure, $minutes = 0) { 640 return date("Ymd\THis", 641 mktime(heures($date_heure), minutes($date_heure) + $minutes, 0, mois($date_heure), jour($date_heure), 642 annee($date_heure))); 643 } 644 645 // 646 // Recuperation de donnees dans le champ extra 647 // Ce filtre n'a de sens qu'avec la balise #EXTRA 648 // 649 650 function extra ($letexte, $champ) { 651 $champs = unserialize($letexte); 652 return $champs[$champ]; 653 } 654 655 // 656 // array_push et array_pop pour php3 (a virer si on n'a pas besoin de la compatibilite php3 657 // et a passer dans inc_version si on a besoin de ces fonctions ailleurs qu'ici) 658 // 659 /* 660 * Avertissement : Cette librairie de fonctions PHP est distribuee avec l'espoir 661 * qu'elle sera utile, mais elle l'est SANS AUCUNE GARANTIE; sans meme la garantie de 662 * COMMERCIALISATION ou d'UTILITE POUR UN BUT QUELCONQUE. 663 * Elle est librement redistribuable tant que la presente licence, ainsi que les credits des 664 * auteurs respectifs de chaque fonctions sont laisses ensembles. 665 * En aucun cas, Nexen.net ne pourra etre tenu responsable de quelques consequences que ce soit 666 * de l'utilisation ou la mesutilisation de ces fonctions PHP. 667 */ 668 /**** 669 * Titre : array_push() et array_pop() pour PHP3 670 * Auteur : Cedric Fronteau 671 * Email : charlie@nexen.net 672 * Url : 673 * Description : Implementation de array_push() et array_pop pour PHP3 674 ****/ 675 function php3_array_push (&$stack, $value) { 676 if (!is_array($stack)) 677 return FALSE; 678 679 end($stack); 680 681 do { 682 $k = key($stack); 683 684 if (is_long($k)) 685 ; 686 687 break; 688 } while (prev($stack)); 689 690 if (is_long($k)) 691 $stack[$k + 1] = $value; 692 else 693 $stack[0] = $value; 694 695 return count($stack); 696 } 697 698 function php3_array_pop (&$stack) { 699 if (!is_array($stack) || count($stack) == 0) 700 return NULL; 701 702 end($stack); 703 $v = current($stack); 704 $k = key($stack); 705 unset($stack[$k]); 706 return $v; 707 } 708 709 // Ajout Olivier Mansour 710 /**** 711 * titre : absolute_url 712 * Auteur : Olivier Mansour 713 * Email : omansour@clever-age.com 714 * Description : transforme les URLS relatives en URLS absolues 715 (utile pour la newsletter) 716 ****/ 717 function absolute_url ($chaine) { 718 // TBI : quid si le href n'est pas en premier ? 719 $URL_SITE_SPIP = lire_meta('adresse_site'); 720 721 // rajout d'un / éventuellement 722 if (substr($URL_SITE_SPIP, strlen($URL_SITE_SPIP) - 1, 1) != '/') 723 $URL_SITE_SPIP .= '/'; 724 725 $chaine = eregi_replace('<a href="', '<a href="' . $URL_SITE_SPIP, $chaine); 726 $chaine = eregi_replace('<a href="' . $URL_SITE_SPIP . 'http://([^"]*)"', "<a href=\"http://\\1\"", $chaine); 727 728 $chaine = eregi_replace('<img src="', '<img src="' . $URL_SITE_SPIP, $chaine); 729 $chaine = eregi_replace('<img src="' . $URL_SITE_SPIP . 'http://([^"]*)"', "<img src=\"http://\\1\"", $chaine); 730 731 // virer les http:// devant les #nb (les notes) 732 $chaine = eregi_replace('<a href="' . $URL_SITE_SPIP . '(#nb[^"]*)"', '<a href="\\1"', $chaine); 733 734 return $chaine; 735 } 736 737 // fin ajout Olivier Mansour 738 739 // Ajout Olivier Mansour 740 /**** 741 * titre : version_texte 742 * Auteur : Olivier Mansour 743 * Email : omansour@clever-age.com 744 * Description : transforme un texte au format HTML en texte brut, 745 par rapport a textebrut => traite les notes de bas de page, les liens, les intertitres, les images 746 // Remplace tous les liens selon la logique suivante : 747 // '<a href="link">link</a>' devient 'link' 748 // '<a href="link">text</a>' devient 'text (link)' 749 fonction issues de Clever Mail (-> NHoizey) 750 (utile pour la newsletter ? avec textebrut apres ? ) 751 ? a tester ? 752 ? gestion des images ? 753 ****/ 754 function version_texte ($in) { 755 // nettoyage des retours chariots 756 $out = str_replace("\n", '', $out); 757 758 // Nettoyage des liens des notes de bas de page 759 $out = ereg_replace( 760 "<a href=\"#n(b|h)[0-9]+-[0-9]+\" name=\"n(b|h)[0-9]+-[0-9]+\" class=\"spip_note\">([0-9]+)</a>", "\\3", 761 $in); 762 763 // les puces 764 $out = str_replace($GLOBALS['puce'], "\n" . '-', $out); 765 766 // Remplace tous les liens 767 768 while (eregi("<a href=['\"]([^'\">]+)['\"][^>]*>([^<]+)</a>", $out, $regs)) { 769 $cleanReg1 = ereg_replace("\\?", "\?", $regs[1]); 770 $cleanReg1 = ereg_replace("\\+", "\+", $cleanReg1); 771 $cleanReg1 = ereg_replace("\\(", "\(", $cleanReg1); 772 $cleanReg1 = ereg_replace("\\)", "\)", $cleanReg1); 773 774 $cleanReg2 = ereg_replace("\\?", "\?", $regs[2]); 775 $cleanReg2 = ereg_replace("\\+", "\+", $cleanReg2); 776 $cleanReg2 = ereg_replace("\\(", "\(", $cleanReg2); 777 $cleanReg2 = ereg_replace("\\)", "\)", $cleanReg2); 778 if ($regs[1] == $regs[2]) { 779 $out = eregi_replace("<a href=['\"]" . $cleanReg1 . "['\"][^>]*>" . $cleanReg1 . "</a>", $regs[1], $out); 780 } 781 else { 782 $out = eregi_replace("<a href=['\"]" . $cleanReg1 . "['\"][^>]*>" . $cleanReg2 . "</a>", 783 $regs[2]. " ( " . $regs[1]. " )", 784 $out); 785 } 786 } 787 788 // les images 789 while (eregi("<img src=['\"]([^'\">]+)['\"][^>]*title=['\"]([^'\">]+)['\"][^>]*>", $out, $regs)) { 790 $out = str_replace($regs[0], basename($regs[1]). ' (' . $regs[1]. ') ' . $regs[2]. "\n", $out); 791 } 792 793 while (eregi("<img src=['\"]([^'\">]+)['\"][^>]*>", $out, $regs)) { 794 $out = str_replace($regs[0], basename($regs[1]). ' (' . $regs[1]. ') ' . "\n", $out); 795 } 796 797 //$out = translitteration($out, 'iso-8859-1'); 798 $out = str_replace('œ', 'oe', $out . "<br /><br /><br /><br />"); 799 $out = str_replace("<h3 class='spip'>", 800 "\n----------------------------------------------------------------------\n", 801 $out); 802 $out = str_replace("<h3>", "\n----------------------------------------------------------------------\n", $out); 803 $out = str_replace("</h3>", "\n----------------------------------------------------------------------", $out); 804 $out = str_replace("</p>", "\n", $out); 805 806 // Les notes de bas de page 807 $out = str_replace("<p class=\"spip_note\">", "\n", $out); 808 $out = ereg_replace("<sup>([0-9]+)</sup>", "[\\1]", $out); 809 810 //$out = str_replace('<br /><img class=\'spip_puce\' src=\'puce.gif\' alt=\'-\' border=\'0\'>', "\n".'-', $out); 811 $out = ereg_replace('<li[^>]>', "\n" . '-', $out); 812 //$out = str_replace('<li>', "\n".'-', $out); 813 814 //$out = ereg_replace("<p align='center'><img src='([^']+)' border=0 width='[0-9]+' height='[0-9]+' align='center' hspace='[0-9]+' vspace='[0-9]+'>'", "\nIllustration : \\1\n", $out); 815 816 // accentuation du gras - 817 // <b>texte</b> -> *texte* 818 $out = ereg_replace('<b[^>|r]*>', '*', $out); 819 $out = str_replace('</b>', '*', $out); 820 821 // accentuation de l'italique 822 // <i>texte</i> -> *texte* 823 $out = ereg_replace('<i[^>|mg]*>', '*', $out); 824 $out = str_replace('</i>', '*', $out); 825 826 $out = supprimer_tags($out); 827 $out = unhtmlentities($out); 828 829 $out = str_replace(" ", " ", $out); 830 $out = str_replace("’", "'", $out); 831 $out = str_replace("«", "«", $out); 832 $out = str_replace("»", "»", $out); 833 $out = str_replace("“", "\"", $out); 834 $out = str_replace("”", "\"", $out); 835 $out = str_replace("°", "°", $out); 836 $out = str_replace("€", "E", $out); 837 $out = str_replace("$", "E", $out); 838 $out = wordwrap($out, 70, "\n"); 839 840 return $out; 841 } 842 843 // fin ajout Olivier Mansour 844 845 // For users prior to PHP 4.3.0 you may do this: 846 function unhtmlentities ($string) { 847 $trans_tbl = get_html_translation_table(HTML_ENTITIES); 848 $trans_tbl = array_flip($trans_tbl); 849 //var_dump($trans_tbl); 850 return strtr($string, $trans_tbl); 851 } 852 853 // 854 // Filtre |alterner 855 // 856 // Exemple [(#COMPTEUR_BOUCLE|alterner{'bleu','vert','rouge'})] 857 // 858 // http://doc.spip.org/@alterner 859 function alterner($i) { 860 // recuperer les arguments (attention fonctions un peu space) 861 $num = func_num_args(); 862 $args = func_get_args(); 863 864 // renvoyer le i-ieme argument, modulo le nombre d'arguments 865 return $args[(intval($i)-1)%($num-1)+1]; 866 } 867 868 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Sat Feb 24 14:40:03 2007 | par Balluche grâce à PHPXref 0.7 |