// Copyleft (C) 2003 BohwaZ, license Art Libre ///////////////////////////////////////////////////////////////// // ATTENTION: les expressions régulières sont très gourmandes en ressources système. // Ainsi il est beaucoup plus que conseillé de stocker vos textes traités avec cette classe // dans une page de cache. // ATTENTION 2: Toutes les fonctions attendent en entrée une chaîne déjà traitée par un htmlentities. // La sortie HTML se fait en HTML 4 pas très valide ou en xHTML Strict Valide si on active la variable $xhtml ///////////////////////////////////////////////////////////////// // Version: 0.3.0 class FormatHTML { var $bbcode = "oui"; // Activer le BBCode dans totale? var $spip = "oui"; // Activer les raccourcis SPIP dans totale? var $berenice = "non"; // Activer le code de Textes Bérénice dans totale? var $wiki = "non"; // Parser le wikicode dans totale? (conforme au wiki2xhtml) var $julika = "oui"; // Activer le code de Textes Julika dans totale? #var $html = "oui"; // Autoriser le HTML? (entre les balises et ) var $typo_fr = "oui"; // Activer la correction typographique française? var $smileys = "oui"; // Activer les smileys dans nettoyer_apres() ? var $parse_urls = "oui"; // Parser les URLS dans nettoyer_apres() ? var $retours = "oui"; // Traiter les retours à la ligne (\n =>
) ? var $antispam = "oui"; // Protection anti-spam sur les adresses emails? var $xhtml = "oui"; // Sortie xHTML Stricte ? var $nettoyages = "oui"; // Effectuer les nettoyages pour chaque fonction? (désactivé automatiquement // lors de l'exécution de totale) var $smiley_path = "smileys/"; var $smiley_base = "/smileys/"; // FIN DE LA CONFIG //////////////////////////////////////////////////////////////////////////// var $totale = "non"; // Ne pas toucher // Pour coder les adresse eMail des expéditeurs avec des codes étranges ;o) // Merci à Grand'Pa ;-) http://pretextes.apinc.org/ function _antispam($email) { //$email = str_replace("@","[at]",$email); $len = strlen($email); for($x = 0; $x < $len; $x++) { $ord = ord(substr($email,$x,1)); $temp.= "&#".$ord.";"; } return $temp; } // Pour la correction typographique française function typofr($texte) { $texte = ereg_replace("[ ]([\?!]|»|»)"," \\1",$texte); $texte = ereg_replace("(«|«) ","« ",$texte); return $texte; } // Nettoyage précédent l'appel d'une fonction function nettoyer_avant($texte) { $unicode = array("–" => "-", "—" => "-", "‘" => "'", "’" => "'", "…" => "...", "“" => "\"", "”" => "\"", " "=>" ", #"<"=>"<", ">"=>">", "œ"=>"oe","…"=>"...","’"=>"'"); $texte = strtr($texte,$unicode); $texte = str_replace("\r\n","\n",$texte); $texte = str_replace("\r","",$texte); $texte = str_replace("\t"," ",$texte); $texte = stripslashes($texte); return $texte; } // nettoyage suivant l'appel d'une fonction function nettoyer_apres($texte) { $texte = trim($texte); // retours à la ligne if($this->retours == "oui") { $texte = nl2br($texte); if($this->xhtml == "oui") { $texte = str_replace("
\n
\n","

\n

",$texte); $texte = "

".$texte."

"; } } $texte = str_replace("\\a","\n",$texte); // Pour les retours à la ligne de formatage du code if($this->parse_urls == "oui") { // URLs (+ gestion des liens Peercast et ed2k) $texte = eregi_replace( "(^|[ \t\r\n>])((ftp|http|https|gopher|mailto|news|nntp|telnet|wais|file|prospero|peercast|ed2k):". "[A-Za-z0-9/](([A-Za-z0-9$|.+!*(),;/?:@&~=_#-])|%[A-Fa-f0-9]{2})+)","\\1\\2",$texte); $texte = eregi_replace("(^|[ \t\r\n>])([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+)", "\\0", $texte); } if($this->antispam == "oui") { // Protection anti-spam while(eregi("([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+)",$texte,$out)) { $texte = str_replace($out[0],$this->_antispam($out[0]),$texte); } } if($this->smileys == "oui") // Smileys $texte = $this->smileys($texte); if($this->typo_fr == "oui") $texte = $this->typofr($texte); return $texte; } function totale($texte) { $this->nettoyages = "non"; $texte = $this->nettoyer_avant($texte); #$texte = $this->perso($texte); if($this->bbcode == "oui") $texte = $this->bbcode($texte); if($this->spip == "oui") $texte = $this->spip($texte); if($this->julika == "oui") $texte = $this->julika($texte); if($this->wiki == "oui") $texte = $this->wiki2xhtml($texte); if($this->berenice == "oui") $texte = $this->berenice($texte); $texte = $this->nettoyer_apres($texte); return $texte; } function perso($texte) { while(eregi("\[([^\n]*)-(>|>)(ecrit[ ]?|écrit[ ]?)?([0-9]+)\]",$texte,$out)) { $id = $out[4]; $lien = $out[1]; $res = mysql_query("SELECT id,name,mois,date,titre FROM ecrits WHERE id='{$id}'"); $rec = mysql_fetch_assoc($res); mysql_free_result($res); $url = '/'.substr($rec['mois'],0,4).'/'.substr($rec['mois'],4,2).'/'.date("d/",$rec['date']); if(!empty($rec['name'])) $url.= $rec['name']; else $url.= $rec['id']; if(empty($lien)) $lien = htmlentities(stripslashes($rec['titre'])); $texte = str_replace($out[0],''.$lien.'',$texte); } return $texte; } // BBCODE //////////////////////////////////////////////////////////////////////////////////// // La plupart du BBCode est compris par cette classe. Si vous trouvez des balises BBCode // // qui ne sont pas gérées par cette classe, contactez-moi. // // Les particularités de chaque forum (phpBB, Invision et Phorum) sont gérées. Si vous // // trouvez d'autres particularités avec d'autres forums, n'hésitez pas à me contacter. // ////////////////////////////////////////////////////////////////////////////////////////////// // Pour la balise [code] du bbcode function _code($texte) { return "

".str_replace(" ","  ",$texte[1])."

"; } // Traitement du BBCode (révision 0.3.9) function bbcode($texte) { // Si on est pas dans l'exécution de totale et que les nettoyages sont activés, on nettoie if($this->nettoyages == "oui") $texte = $this->nettoyer_avant($texte); // Si sortie xHTML if($this->xhtml == "oui") { // Tags simples $tablo = array( "[b]" => "", "[/b]" => "", "[u]" => "", "[/u]" => "", "[i]" => "", "[/i]" => "", "[center]"=>"
","[/center]"=>"
", "[/font]"=> "", "[/color]"=>"", "[/size]"=>""); $texte = strtr($texte,$tablo); // Couleurs, fontes, tailles $texte = preg_replace("|\[font=([a-z]+)\]|Ui","",$texte); $texte = preg_replace("|\[size=([1-7])\]|Ui","",$texte); // Pour les forums Invision $texte = preg_replace("§\[size=([1-4][0-9]|[89])\]§Ui","",$texte); // Forums phpBB $texte = preg_replace("§\[color=(#[0-9A-F]{6}|[a-z]+)\]§Ui","",$texte); } else { // Gras, italique, souligné $texte = preg_replace("|\[(/?[biu])\]|Ui","<\\1>",$texte); // Texte Centré $texte = preg_replace("|\[(/?center)\]|Ui","<\\1>",$texte); // Polices de caractères: fonte, taille, couleur... $texte = preg_replace("|\[font=([a-z]+)\]|Ui","",$texte); $texte = preg_replace("§\[/(font|size|color)\]§Ui","",$texte); $texte = preg_replace("|\[size=([1-7])\]|Ui","",$texte); // Pour les forums Invision $texte = preg_replace("§\[size=([1-4][0-9]|[89])\]§Ui","",$texte); // Forums phpBB $texte = preg_replace("§\[color=(#[0-9A-F]{6}|[a-z]+)\]§Ui","",$texte); } // Citations $texte = preg_replace("|\[quote\]|Ui","
",$texte); $texte = preg_replace("|\[quote=[\"']?([^\"']+)[\"']?\]|Ui","

\\1 a dit:

\\a",$texte); $texte = preg_replace("|\[/quote\]|Ui","
",$texte); // Code source $texte = preg_replace_callback("|\[code\]([^\[]+)\[/code\]|Ui",array(&$this,_code),$texte); // Barre horizontale if($this->xhtml == "oui") $texte = preg_replace("|\[hr\]|Ui","
\\a",$texte); else $texte = preg_replace("|\[hr\]|Ui","
\\a",$texte); // Images $texte = preg_replace("|\[img\]([^\[]+)\[/img\]|Ui","\"\"",$texte); // Adresses URLs $texte = preg_replace("|\[url=([^\]]+)\]([^\[]+)\[/url\]|Ui","\\2",$texte); $texte = preg_replace("|\[url\]([^\[]+)\[/url\]|Ui","\\1",$texte); $texte = preg_replace("§\[email]([^\[]+)\[/email\]§Ui","\\1",$texte); // Listes à puces $texte = eregi_replace("\[/list\]","[/list]",$texte); // Pour passer en minuscules while(eregi("\[list(=([1a])?)?\]",$texte,$out)) { $deb = strpos($texte,$out[0]); $txt = substr($texte,$deb); $fin = strpos($txt,"[/list]"); $txt = substr($txt,0,$fin+7); // On détermine le type de liste if($out[2] == "1") $in = '
    '; elseif($out[2] == "a") $in = '
      '; elseif(!empty($out[1])) $in = '
        '; else $in = "
          "; // Hop on construit la liste $lst = $in."\\a".substr($txt,strlen($out[0]),-7); $lst = preg_replace("/\[\*\](.+?)/U","
        • \\1
        • \\a",$lst); $lst = str_replace("\n\n","\\b",$lst); $lst = str_replace("\n","",$lst); $lst = str_replace("\\b","\n\n",$lst); if(!empty($out[1])) $lst.= "
      "; else $lst.= ""; $texte = str_replace($txt,$lst."\\a",$texte); } if($this->nettoyages == "oui") $texte = $this->nettoyer_apres($texte); return $texte; } // Textes Bérénice ////////////////////////////////////////////////////////////////////////// // Il n'existe pas d'autres codes propres à Textes Bérénice, à ma connaissance. // // Le code suivant est directement repris du code du forum (http://pretextes.apinc.org/) // // Une liste des codes et de leur utilisation est disponible ici: http://mi-c.org/notisse.html // ////////////////////////////////////////////////////////////////////////////////////////////////// function berenice($texte) { if($this->nettoyages == "oui") $texte = $this->nettoyer_avant($texte); // La ligne suivante est à décommenter si vous avez l'utilité des liens vers des messages // internes au forum Bérénice //$texte = eregi_replace("\[\[\(([0-9]+)\)\]\]","> Message \\1",$texte); $texte = eregi_replace("\[\(\[([[:alnum:]|[:punct:]]+)\]\)\]([^[:space:]]*)([[:alnum:]|[:punct:]])", "\\1", $texte); $texte = eregi_replace("\[\(f\[([[:alnum:]|[:punct:]]+)\]f\)\]([^[:space:]]*)([[:alnum:]|[:punct:]])", "\\1", $texte); $texte = eregi_replace("\[\(i\[([[:alnum:]|[:punct:]]+)\]i\)\]([^[:space:]]*)([[:alnum:]|[:punct:]])", "\\1", $texte); $texte = eregi_replace("\[\(u\[([[:alnum:]|[:punct:]]+)\]u\)\]([^[:space:]]*)([[:alnum:]|[:punct:]])", "\\1", $texte); if($this->nettoyages == "oui") $texte = $this->nettoyer_apres($texte); return $texte; } // Raccourcis SPIP /////////////////////////////////////////////////////////////////////////// // Les raccourcis gérés ici sont conformes à ceux utilisés par la version 1.6 de Spip. // // Cependant les listes à puces sur plusieurs niveaux ne sont pas gérées (pas encore). // // Documentation de SPIP ici: http://www.spip.org/ // ////////////////////////////////////////////////////////////////////////////////////////////// // Pour les raccourcis SPIP (révision 0.1.3) function spip($texte) { if($this->nettoyages == "oui") $texte = $this->nettoyer_avant($texte); // Raccourcis simples: intertitres, gras, italique if($this->xhtml == "oui") $tablo = array("{{{" => "

      ", "}}}" => "

      ", "{{" => "", "}}" => "", "{" => "", "}" => ""); else $tablo = array("{{{" => "

      ", "}}}" => "

      ", "{{" => "", "}}" => "", "{" => "", "}" => ""); $texte = strtr($texte,$tablo); $texte = ereg_replace("----+","
      ",$texte); // Barres horizontales // Puces (ne prend pas en compte les niveaux de profondeurs, du moins pas encore) #$texte = ereg_replace("(^|\n)-([*#]+)?","\\1
    1. ",$texte); // Pour les liens spécifiques vers des articles, des brèves ou des rubriques: [Article->112] // A décommenter si vous voyez l'utilité de ces liens. // Attention: les liens de type [->article 3212] ne sont pas gérés, cette classe ne pouvant // récupérer le titre de l'article. #$texte = preg_replace("/\[([^\n]+)-(>|>)(ecrit|ecrit )?([0-9]+)\]/Ui","\\1",$texte); # $texte = preg_replace("/\[([^\n]+)-(>|>)(br|breve |brève )([0-9]+)\]/Ui","\\1",$texte); # $texte = preg_replace("/\[([^\n]+)-(>|>)(rub|rubrique )([0-9]+)\]/Ui","\\1",$texte); // Liens $texte = preg_replace("/\[([^\n]+)-(>|>)([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+)\]/Ui", "\\1",$texte); $texte = preg_replace("/\[([^\n]+)-(>|>)([^\]]+)\]/Ui","\\1",$texte); // Notes de bas de page preg_match_all("/\[\[([^\]]+)\]\]/Ui",$texte,$out,PREG_SET_ORDER); $a = 1; for($i=0; $i < count($out); $i++) { if(preg_match("/(<|<)([^> &]+)(>|>)/Ui",$out[$i][1],$out2)) { $note = $out2[2]; $out[$i][1] = str_replace($out2[0],"",$out[$i][1]); } else { $note = $a; $a++; } $texte = str_replace($out[$i][0], '['.$note.']',$texte); if($i == 0) $texte.= '


        '; $texte.= '
      • ['.$note.'] '.$out[$i][1].'
      • \\a'; if($i == count($out)-1) $texte.= '

      '; } // Tableaux (piqué directement dans spip même si j'aimerais refaire ça avec des regex) $texte = ereg_replace("^\n?\|","\n\n|",$texte); $texte = ereg_replace("\|\n?$","|\n\n",$texte); $tableBeginPos = strpos($texte, "\n\n|"); $tableEndPos = strpos($texte, "|\n\n"); while(is_integer($tableBeginPos) && is_integer($tableEndPos) && $tableBeginPos < $tableEndPos + 3) { $textBegin = substr($texte, 0, $tableBeginPos); $textTable = substr($texte, $tableBeginPos + 2, $tableEndPos - $tableBeginPos); $textEnd = substr($texte, $tableEndPos + 3); $newTextTable = "\n\n"; if($this->xhtml == "oui") $newTextTable = "\n\n
      "; $rowId = 0; $lineEnd = strpos($textTable, "|\n"); while(is_integer($lineEnd)) { $rowId++; $row = substr($textTable, 0, $lineEnd); $textTable = substr($textTable,$lineEnd+2); if ($rowId == 1)// && ereg("^(\\|[[:space:]]*\\{\\{[^}]+\\}\\}[[:space:]]*)+$", $row)) { $newTextTable .= ''; } else { $newTextTable .= ''; } $newTextTable .= ereg_replace("\|([^\|]+)", "", $row); $newTextTable .= ''; $lineEnd = strpos($textTable, "|\n"); } $newTextTable .= "
      \\1
      \n"; $texte = $textBegin . $newTextTable . $textEnd; $tableBeginPos = strpos($texte, "\n\n|"); $tableEndPos = strpos($texte, "|\n\n"); } $texte = trim($texte); if($this->nettoyages == "oui") $texte = $this->nettoyer_apres($texte); return $texte; } // SMILEYS /////////////////////////////////////////////////////////////////////////////////////////// // La gestion des smileys se fait sur la base de phpBB. Donc des codes genre ':)' ou ':evil:'. Par // // défaut, aucun smiley n'est géré. Vous pouvez ajouter des smileys grâce au fichier // // conf.txt qui doit être situé dans le même répertoire que les smileys. Ce fichier doit // // comporter un smiley par ligne et écrit de cette manière: code du smiley (';)' par exemple) // // [espace] adresse de l'image // // (relative ou absolue). Ainsi voici une ligne par exemple: ':evil: /smileys/evil.gif' // ////////////////////////////////////////////////////////////////////////////////////////////////////// function smileys($texte) // révision 0.1.4 { if(!file_exists($this->smiley_path."conf.txt")) return $texte; $out = file($this->smiley_path."conf.txt"); $texte = "\n".$texte."\n"; foreach($out as $ligne) { if(trim($ligne) == "") continue; $ligne = explode(" ",$ligne); $image = $this->smiley_base.$ligne[0]; unset($smileys); for($i=1;$i < count($ligne);$i++) { $smileys.= preg_quote(trim($ligne[$i])); if($i < count($ligne)-1) $smileys.= "|"; } $texte = eregi_replace("(^|[ \n\r\t>])({$smileys})([ \n\r\t<]|$)", "\\1\"\\2\"\\3",$texte); } return trim($texte); } // TEXTES JULIKA ////////////////////////////////////////////////////////////////////////////// // Gère le code du forum Textes Julika .Certain codes sont les mêmes que les raccourcis SPIP // // Il y a donc quelques fonctions redondants. // //////////////////////////////////////////////////////////////////////////////////////////////////// function julika($texte) // Révision 0.1.3 { if($this->nettoyages == "oui") $texte = $this->nettoyer_avant($texte); // Les blocs et listes à puces $texte = ereg_replace("\n{2,}","\n\n",$texte); $txt = explode("\n\n",$texte); for($i=0; $i < count($txt); $i++) { if(eregi("^([ ]+)(#|-)",$txt[$i],$out)) { if($out[2] == "#") $ls = "ol"; else $ls = "ul"; $liste = explode("\n",trim($txt[$i])); $sortie = ""; for($a=0; $a < count($liste); $a++) { $x1 = ereg_replace("^[ ]*".$out[2],"",$liste[$a]); $x1 = trim($x1); $sortie.= "

    2. ".$x1."
    3. \\a"; } $txt[$i] = "<".$ls.">\\a".$sortie.""; } } $texte = implode("\n\n",$txt); $texte = ereg_replace("\n+","\\a",$texte); $texte = ereg_replace("\n+<([uo]l)>","\\a<\\1>",$texte); // Traitement des images: centrées, gauche ou droite et normales while(eregi("<img\|(center|right|left)\|([^\n &\|]+)>",$texte,$sortie1)) { $name = explode("/",$sortie1[2]); $name = ucfirst($name[-1]); if($this->xhtml == "oui") $texte = str_replace($sortie1[0],"
      \"{$name}\"
      ",$texte); else $texte = str_replace($sortie1[0],"

      {$name}

      ",$texte); } if($this->xhtml == "oui") $texte = eregi_replace("<img\|([^\n &\|]+)>","\"\"",$texte); else $texte = eregi_replace("<img\|([^\n &\|]+)>","Image",$texte); // Traitement des images (nouvelle version, apparu dans Textes Julika 3.4) preg_match_all("/<image\|([^\|]+)(\|align=(left|right|top|texttop|middle|absmiddle|baseline|bottom|absbottom))?". "(\|alt=([^\|]+))?(\|title=([^\|]+))?(\|([0-9]+)x([0-9]+))?>/Ui",$texte,$out,PREG_SET_ORDER); for($i=0; $i < count($out); $i++) { $tag = "\\1", $texte); $texte = eregi_replace("\[([^\n\[]+)(->|\|)([^\n\[\"]+)\]", "\\1", $texte); //" // Raccourcis simples: intertitres, gras, italique if($this->xhtml == "oui") $tablo = array("<<" => "", ">>" => "", "{{" => "", "}}" => "", "{" => "", "}" => ""); else $tablo = array("<<" => "«", ">>" => "»", "{{" => "", "}}" => "", "{" => "", "}" => ""); $texte = strtr($texte,$tablo); if($this->xhtml == "oui") $texte = ereg_replace("\n----+\n?", "
      ", $texte); // ligne de séparation else $texte = ereg_replace("\n----+\n?", "
      ", $texte); // ligne de séparation if($this->nettoyages == "oui") $texte = $this->nettoyer_apres($texte); return $texte; } // WIKI CODE ///////////////////////////////////////////////////////////////////////////////////////// // Le Wiki Code est celui qui est géré par le script wiki2xhtml d'Olivier Meunier. Il doit exister // // beaucoup d'autres wiki codes en fonction des versions des wikis. La version de wiki2xhtml de // // cette classe est donc amenée à s'agrandir avec d'autres codes venus d'autres wikis. Merci de me // // signaler les wikis codes que vous connaissez qui ne sont pas gérés ici. // ////////////////////////////////////////////////////////////////////////////////////////////////////// // Wiki2xhtml de Olivier Meunier . License MPL (Mozilla) Portions created by the // // Initial Developer are Copyright (C) 2003 the Initial Developer. All Rights Reserved. // ////////////////////////////////////////////////////////////////////////////////////////////////////// // Wiki2xHTML version +0.1.5 d'après le wiki2xhtml d'olivier meunier // Corrections faites pour l'appel aux fonctions à l'intérieur de la classe function wiki2xhtml($string) { if($this->nettoyages == "oui") $texte = $this->nettoyer_avant($texte); $T = explode("\n",$string); $T[] = "\n"; ## Application du parseur récursif $res = $this->wikiParseRecursif($T,0); ## Application des autres contraintes (gras, italique, liens) # Emphase //$res = preg_replace("§''(.*)''§msU",'$1',$res); $res = preg_replace("/''(.*)''/msU",'$1',$res); # Forte emphase $res = preg_replace('/__(.*)__/msU','$1',$res); # Line break $res = str_replace('%%%','
      ',$res); #Liens # Protégés par des assertions arrières $res = preg_replace_callback('/(?$1',$res); # Citation avec langue $res = preg_replace('/\{\{([^|]+)\|([^|]*)\}\}/msU','$1',$res); # Citation avec langue et url $res = preg_replace('/\{\{([^|]+)\|([^|]*)\|([^|]*)\}\}/msU','$1',$res); # Ajout d'une ~ancre~ (Stephanie) $res = preg_replace('/~([^~]+)~/msU',' ',$res); # Ajout d'un @@code@@ (Olivier) $res = preg_replace('/@@([^~]+)@@/msU','$1',$res); # Nettoyage des \s en trop $res = preg_replace('/([\s]+)(<\/p>|<\/li>|<\/pre>)/','$2',$res); $res = preg_replace('/(
    4. )([\s]+)/','$1',$res); if($this->nettoyages == "oui") $texte = $this->nettoyer_apres($texte); return $res; } function wikiParseRecursif($T,$i,$mode='') { $str = $T[$i]."\n"; # Titres if(ereg('^([!]{1,3})(.*)$',$str,$cap)) { if(strlen($cap[1]) == 3) { $t = 'h1'; } elseif (strlen($cap[1]) == 2) { $t = 'h2'; } else { $t = 'h3'; } $res .= '<'.$t.'>'.trim($cap[2]).''."\\a"; } #hr elseif(ereg('^[-]{4}([- ]*)$',trim($str))) { $res .= "\\a
      "; } # Liste elseif(ereg('^([*#]+)(.*)',$str,$cap)) { $dl = ($mode == '') ? 0 : strlen($mode); $d = strlen($cap[1]); $delta = $d-$dl; if($delta > 0) { if(substr($cap[1],-1,1) == '*') { $res .= "
        \\a"; } else { $res .= "
          \\a"; } } elseif ($delta < 0) { $res .= "\\a"; for($j=0;$jwikiParseRecursif($T,$i+1,$mode); } return $res; } function wikiParseUrl($matches) { # Tableau des correspondances d'url spéciales $array_url = array( '#^google://(.*)$#' => 'http://www.google.com/search?q=$1&start=0&start=0' ); $data = explode('|',$matches[1]); // Modifié pour ne pas interférer avec SPIP if(count($data) == 1) { $url = $data[0]; $content = $url; if(!eregi("^(ftp|http|https|gopher|mailto|news|nntp|telnet|wais|file|prospero|peercast|ed2k)",$data[0])) $nolinks = "oui"; } elseif(count($data) > 1) { $url = $data[1]; $content = $data[0]; $lang = $data[2]; $title = $data[3]; } $url = preg_replace(array_flip($array_url),$array_url,$url); if(ereg('^(.+)[.](gif|jpg|jpeg|png)$',$url)) { # On ajoute les dimensions de l'image si locale # Idée de Stephanie $img_size = NULL; if(!ereg('[a-zA-Z]+://',$url)) { if(ereg('^/',$url)) { $path_img = $_SERVER['DOCUMENT_ROOT'].$url; } else { $path_img = $url; } $img_size = @getimagesize($path_img); } $res = ''.$content.'