function tw_autoliens($t) { defined('_EXTRAIRE_LIENS') || define('_EXTRAIRE_LIENS', ',' . '\\[[^\\[\\]]*(?:<-|->).*?\\]' . '|<a\\b.*?</a\\b' . '|<\\w.*?>' . '|((?:https?:/|www\\.)[^"\'\\s\\[\\]\\}\\)<>]*)' . ',imsS'); $t = preg_replace_callback(_EXTRAIRE_LIENS, 'tw_traiter_autoliens', $t); // echapper les autoliens eventuellement inseres (en une seule fois) if (strpos($t, "<html>") !== false) { $t = echappe_html($t); } return $t; }
function tw_pre_liens($t) { if (strpos($t, '<') !== false) { $t = preg_replace_callback(_EXTRAIRE_RESSOURCES, 'tw_traiter_ressources', $t); // echapper les autoliens eventuellement inseres (en une seule fois) if (strpos($t, "<html>") !== false) { $t = echappe_html($t); } } return $t; }
function post_autobr($texte, $delim = "\n_ ") { if (!function_exists('echappe_html')) { include_spip('inc/texte_mini'); } $texte = str_replace("\r\n", "\r", $texte); $texte = str_replace("\r", "\n", $texte); if (preg_match(",\n+\$,", $texte, $fin)) { $texte = substr($texte, 0, -strlen($fin = $fin[0])); } else { $fin = ''; } $texte = echappe_html($texte, '', true); // echapper les modeles if (strpos($texte, "<") !== false) { include_spip('inc/lien'); if (defined('_PREG_MODELE')) { $preg_modeles = "@" . _PREG_MODELE . "@imsS"; $texte = echappe_html($texte, '', true, $preg_modeles); } } $debut = ''; $suite = $texte; while ($t = strpos('-' . $suite, "\n", 1)) { $debut .= substr($suite, 0, $t - 1); $suite = substr($suite, $t); $car = substr($suite, 0, 1); if ($car != '-' and $car != '_' and $car != "\n" and $car != "|" and $car != "}" and !preg_match(',^\\s*(\\n|</?(quote|div|dl|dt|dd)|$),S', $suite) and !preg_match(',</?(quote|div|dl|dt|dd)> *$,iS', $debut)) { $debut .= $delim; } else { $debut .= "\n"; } if (preg_match(",^\n+,", $suite, $regs)) { $debut .= $regs[0]; $suite = substr($suite, strlen($regs[0])); } } $texte = $debut . $suite; $texte = echappe_retour($texte); return $texte . $fin; }
/** * Filtre a appliquer aux champs du type #TEXTE* * http://code.spip.net/@propre * * @param string $t * @param string $connect * @param array $env * @return string */ function propre($t, $connect = null, $env = array()) { // les appels directs a cette fonction depuis le php de l'espace // prive etant historiquement ecrits sans argment $connect // on utilise la presence de celui-ci pour distinguer les cas // ou il faut passer interdire_script explicitement // les appels dans les squelettes (de l'espace prive) fournissant un $connect // ne seront pas perturbes $interdire_script = false; if (is_null($connect) and test_espace_prive()) { $connect = ''; $interdire_script = true; } if (!$t) { return strval($t); } $t = pipeline('pre_echappe_html_propre', $t); $t = echappe_html($t); $t = expanser_liens($t, $connect, $env); $t = traiter_raccourcis($t, (isset($env['wysiwyg']) and $env['wysiwyg']) ? true : false); $t = echappe_retour_modeles($t, $interdire_script); return $t; }
function lang_select_public($lang, $lang_select, $titre = null) { // Cas 1. forcer_lang = true et pas de critere {lang_select} if (isset($GLOBALS['forcer_lang']) and $GLOBALS['forcer_lang'] and $lang_select !== 'oui') { $lang = $GLOBALS['spip_lang']; } elseif (!strlen($lang)) { $lang = $GLOBALS['spip_lang']; } elseif ($lang_select !== 'oui' and strlen($titre) > 10 and strpos($titre, '<multi>') !== false and strpos(echappe_html($titre), '<multi>') !== false) { $lang = $GLOBALS['spip_lang']; } // faire un lang_select() eventuellement sur la langue inchangee lang_select($lang); return; }
function typo($letexte) { global $lcm_lang, $lang_typo; // escape <html>...</html> code, etc. list($letexte, $les_echap) = echappe_html($letexte, "SOURCETYPO"); // Call the function for pre-processing $letexte = spip_avant_typo($letexte); if (!($lang = $lang_typo)) { include_lcm('inc_lang'); $lang = lang_typo($lcm_lang); } if ($lang == 'fr') { $letexte = typo_fr($letexte); } else { $letexte = typo_en($letexte); } // Call the post-processing function $letexte = spip_apres_typo($letexte); // reintegrate the escaped text $letexte = echappe_retour($letexte, $les_echap, "SOURCETYPO"); return $letexte; }
function tw_propre($t, $connect = null) { // les appels directs a cette fonction depuis le php de l'espace // prive etant historiquement ecrits sans argment $connect // on utilise la presence de celui-ci pour distinguer les cas // ou il faut passer interdire_script explicitement // les appels dans les squelettes (de l'espace prive) fournissant un $connect // ne seront pas perturbes $interdire_script = false; if (is_null($connect)) { $connect = ''; $interdire_script = true; } if (!$t) { return strval($t); } $debug = _request('var_debug_wheel'); if ($debug) { spip_timer('echappe_html'); } $t = echappe_html($t); if ($debug) { $GLOBALS['totaux']['echappe_html'] += spip_timer('echappe_html', true); } if ($debug) { spip_timer('expanser_liens'); } $t = expanser_liens_tw($t, $connect); if ($debug) { $GLOBALS['totaux']['expanser_liens'] += spip_timer('expanser_liens', true); } if ($debug) { spip_timer('tw_traiter_raccourcis'); } $t = tw_traiter_raccourcis($t); if ($debug) { $GLOBALS['totaux']['tw_traiter_raccourcis'] += spip_timer('tw_traiter_raccourcis', true); } if ($debug) { spip_timer('tw_echappe_retour_modeles'); } $t = tw_echappe_retour_modeles($t, $interdire_script); if ($debug) { $GLOBALS['totaux']['tw_echappe_retour_modeles'] += spip_timer('tw_echappe_retour_modeles', true); } return $t; }
function inc_lien_dist($lien, $texte = '', $class = '', $title = '', $hlang = '', $rel = '', $connect = '', $env = array()) { static $u = null; if (!$u) { $u = url_de_base(); } $typo = false; // Si une langue est demandee sur un raccourci d'article, chercher // la traduction ; // - [{en}->art2] => traduction anglaise de l'article 2, sinon art 2 // - [{}->art2] => traduction en langue courante de l'art 2, sinon art 2 // s'applique a tout objet traduit if ($hlang and $match = typer_raccourci($lien)) { @(list($type, , $id, , $args, , $ancre) = $match); $trouver_table = charger_fonction('trouver_table', 'base'); $desc = $trouver_table(table_objet($type, $connect), $connect); if ($desc and $id_table_objet = $desc['key']['PRIMARY KEY']) { $table_objet_sql = $desc['table']; if ($row = sql_fetsel('*', $table_objet_sql, "{$id_table_objet}=" . intval($id)) and isset($row['id_trad']) and isset($row['lang']) and $id_dest = sql_getfetsel($id_table_objet, $table_objet_sql, "id_trad=" . intval($row['id_trad']) . " AND lang=" . sql_quote($hlang)) and objet_test_si_publie($type, $id_dest)) { $lien = "{$type}{$id_dest}"; } else { $hlang = ''; } } else { $hlang = ''; } } $mode = ($texte and $class) ? 'url' : 'tout'; $lien = calculer_url($lien, $texte, $mode, $connect); if ($mode === 'tout') { $texte = $lien['titre']; if (!$class and isset($lien['class'])) { $class = $lien['class']; } $lang = isset($lien['lang']) ? $lien['lang'] : ''; $mime = isset($lien['mime']) ? " type='" . $lien['mime'] . "'" : ""; $lien = $lien['url']; } $lien = trim($lien); if (strncmp($lien, "#", 1) == 0) { # ancres pures (internes a la page) $class = 'spip_ancre'; } elseif (strncasecmp($lien, 'mailto:', 7) == 0) { # pseudo URL de mail $class = "spip_mail"; } elseif (strncmp($texte, '<html>', 6) == 0) { # cf traiter_lien_explicite $class = "spip_url spip_out"; } elseif (!$class) { $class = "spip_out"; } # si pas spip_in|spip_glossaire // Si l'objet n'est pas de la langue courante, on ajoute hreflang if (!$hlang and $lang !== $GLOBALS['spip_lang']) { $hlang = $lang; } $lang = $hlang ? " hreflang='{$hlang}'" : ''; if ($title) { $title = ' title="' . attribut_html($title) . '"'; } else { $title = ''; } // $title peut etre 'false' // rel=external pour les liens externes if ((strncmp($lien, 'http://', 7) == 0 or strncmp($lien, 'https://', 8) == 0) and strncmp("{$lien}/", $u, strlen($u)) != 0) { $rel = trim("{$rel} external"); } if ($rel) { $rel = " rel='{$rel}'"; } // si pas de modele dans le texte du lien, on peut juste passer typo sur le texte, c'est plus rapide // les rares cas de lien qui encapsule un modele passe en dessous, c'est plus lent if (traiter_modeles($texte, false, '', $connect, null, $env) == $texte) { $texte = typo($texte, true, $connect, $env); $lien = "<a href=\"" . str_replace('"', '"', $lien) . "\" class='{$class}'{$lang}{$title}{$rel}" . (isset($mime) ? $mime : '') . ">{$texte}</a>"; return $lien; } # ceci s'execute heureusement avant les tableaux et leur "|". # Attention, le texte initial est deja echappe mais pas forcement # celui retourne par calculer_url. # Penser au cas [<imgXX|right>->URL], qui exige typo('<a>...</a>') $lien = "<a href=\"" . str_replace('"', '"', $lien) . "\" class='{$class}'{$lang}{$title}{$rel}{$mime}>{$texte}</a>"; $res = typo($lien, true, $connect, $env); // dans ce cas, echapons le resultat du modele pour que propre etc ne viennent pas pouicher le html $res = echappe_html("<html>{$res}</html>"); return $res; }
function lang_select_public($lang, $lang_select, $titre = null) { // Cas 1. forcer_lang = true et pas de critere {lang_select} if (isset($GLOBALS['forcer_lang']) and $GLOBALS['forcer_lang'] and $lang_select !== 'oui') { return; } // Cas 2. l'objet n'a pas de langue definie (ou definie a '') if (!strlen($lang)) { return; } // Cas 3. l'objet est multilingue ! if ($lang_select !== 'oui' and strlen($titre) > 10 and strpos($titre, '<multi>') !== false and strpos(echappe_html($titre), '<multi>') !== false) { return; } // Tous les cas ayant ete elimines, faire le job $GLOBALS['spip_lang'] = $lang; return; }
function post_autobr($texte, $delim="\n_ ") { $texte = str_replace("\r\n", "\r", $texte); $texte = str_replace("\r", "\n", $texte); if (preg_match(",\n+$,", $texte, $fin)) $texte = substr($texte, 0, -strlen($fin = $fin[0])); else $fin = ''; $texte = echappe_html($texte, '', true); $debut = ''; $suite = $texte; while ($t = strpos('-'.$suite, "\n", 1)) { $debut .= substr($suite, 0, $t-1); $suite = substr($suite, $t); $car = substr($suite, 0, 1); if (($car<>'-') AND ($car<>'_') AND ($car<>"\n") AND ($car<>"|") AND ($car<>"}") AND !preg_match(',^\s*(\n|</?(quote|div)|$),S',($suite)) AND !preg_match(',</?(quote|div)> *$,iS', $debut)) { $debut .= $delim; } else $debut .= "\n"; if (preg_match(",^\n+,", $suite, $regs)) { $debut.=$regs[0]; $suite = substr($suite, strlen($regs[0])); } } $texte = $debut.$suite; $texte = echappe_retour($texte); return $texte.$fin; }
/** * Retourne un tableau d'analyse du texte transmis * Cette analyse concerne principalement des statistiques sur les liens * * @param string $texte texte d'entree * @return array rapport d'analyse */ function analyser_spams($texte) { $infos = array('caracteres_utiles' => 0, 'nombre_liens' => 0, 'caracteres_texte_lien_min' => 0); if (!$texte) { return $infos; } // on travaille d'abord sur le texte 'brut' tel que saisi par // l'utilisateur pour ne pas avoir les class= et style= que spip ajoute // sur les raccourcis. // on ne tient pas compte des blocs <code> et <cadre> ni de leurs contenus include_spip("inc/texte_mini"); if (!function_exists('echappe_html')) { // SPIP 2.x include_spip("inc/texte"); } $texte_humain = echappe_html($texte); // on repère dans ce qui reste la présence de style= ou class= qui peuvent // servir à masquer du contenu // les spammeurs utilisent le laxisme des navigateurs pour envoyer aussi style = // soyons donc mefiant // (mais en enlevant le base64 !) $texte_humain = str_replace('class="base64"', '', $texte_humain); $hidden = ",(<(img|object)|\\s(?:style|class)\\s*=[^>]+>),UimsS"; if (preg_match($hidden, $texte_humain)) { // suspicion de spam $infos['contenu_cache'] = true; } include_spip('inc/texte'); $texte = propre($texte); // caracteres_utiles $infos['caracteres_utiles'] = compter_caracteres_utiles($texte, false); // nombre de liens $liens = array_filter(extraire_balises($texte, 'a'), 'pas_lien_ancre'); $infos['nombre_liens'] = count($liens); $infos['liens'] = $liens; // taille du titre de lien minimum if (count($liens)) { // supprimer_tags() s'applique a tout le tableau, // mais attention a verifier dans le temps que ca continue a fonctionner # $titres_liens = array_map('supprimer_tags', $liens); $titres_liens = supprimer_tags($liens); $titres_liens = array_map('strlen', $titres_liens); $infos['caracteres_texte_lien_min'] = min($titres_liens); } return $infos; }
function post_autobr($texte, $delim = "\n_ ") { $texte = str_replace("\r\n", "\r", $texte); $texte = str_replace("\r", "\n", $texte); list($texte, $les_echap) = echappe_html($texte, "POSTAUTOBR", true); $debut = ''; $suite = $texte; while ($t = strpos('-' . $suite, "\n", 1)) { $debut .= substr($suite, 0, $t - 1); $suite = substr($suite, $t); $car = substr($suite, 0, 1); if ($car != '-' and $car != '_' and $car != "\n" and $car != "|") { $debut .= $delim; } else { $debut .= "\n"; } if (preg_match("/^\n+/", $suite, $regs)) { $debut .= $regs[0]; $suite = substr($suite, strlen($regs[0])); } } $texte = $debut . $suite; $texte = echappe_retour($texte, $les_echap, "POSTAUTOBR"); return $texte; }
function cs_les_tests() { global $icone, $metas_vars, $metas_outils; $icone = find_in_path('img/couteau-24.gif'); test_outil($_SERVER, 'Echo de : $_SERVER[]'); test_outil($_ENV, 'Echo de : $_ENV[]'); global $HTTP_ENV_VARS; test_outil($HTTP_ENV_VARS, 'Echo de : $HTTP_ENV_VARS'); $a = array('DOCUMENT_ROOT'=>getenv('DOCUMENT_ROOT'), 'REQUEST_URI'=>getenv('REQUEST_URI'), 'SCRIPT_NAME'=>getenv('SCRIPT_NAME'), 'PHP_SELF'=>getenv('PHP_SELF'), ); test_outil($a, 'Echo de : getenv()'); // lecture des variables stockees en meta test_outil($metas_outils, 'Outils actifs : $metas_outils[]'); test_outil($metas_vars, 'Contenu des variables : $metas_vars[]'); // test de url_absolue() $relative_path = find_in_path('img/smileys'); $realpath = str_replace("\\", "/", realpath($relative_path)); $root = preg_replace(',/$,', '', $_SERVER['DOCUMENT_ROOT']); $test_result=substr($realpath, strlen($root)); $dir = dirname(!empty($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : (!empty($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : (!empty($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] : str_replace('\\','/',__FILE__) ))); $a = array('DOCUMENT_ROOT'=>$_SERVER['DOCUMENT_ROOT'], 'REQUEST_URI'=>$_SERVER['REQUEST_URI'], 'SCRIPT_NAME'=>$_SERVER['SCRIPT_NAME'], 'PHP_SELF'=>$_SERVER['PHP_SELF'], '__FILE__'=>__FILE__, '$root'=>$root, "find_in_path('img/smileys')"=>find_in_path('img/smileys'), "str_replace('\\', '/', realpath('$relative_path'))"=>$realpath, "substr('$realpath', strlen('$root'))"=>cs_red($test_result), "return?"=>(strlen($root) && strpos($realpath, $root)===0)?'oui':'non', "url_absolue('$relative_path')"=>url_absolue($relative_path), '$dir'=>$dir, "cs_canonicalize('$dir'.'/'.'$relative_path')"=>cs_red(cs_canonicalize($dir.'/'.$relative_path)), ); test_outil($a, 'Test sur : url_absolue()'); // test de cs_canonicalize() $dir = $dir.'/'.$relative_path; $address = str_replace("//", "/", $dir); $address1 = $address2 = explode('/', $address); $keys = array_keys($address2, '..'); foreach($keys as $keypos => $key) array_splice($address2, $key - ($keypos * 2 + 1), 2); $address3 = preg_replace(',([^.])\./,', '\1', implode('/', $address2)); $a = array('$dir'=>$dir, '$address'=>$address, "explode('/', '$address')"=>$address1, 'array_keys($dessus, "..")'=>$keys, 'array_spliced()'=>$address2, '$resultat'=>cs_red($address3), ); test_outil($a, 'Test sur : cs_canonicalize()'); // charger mes_fonctions, utile pour les filtres ou certains outils include_spip('public/parametrer'); // test de typo_exposants() include_spip('inc/charsets'); $textes = array( "Pr Paul, Dr Jules, Prs Pierre & Paul, Drs Pierre & Paul. Surveiller : Pré-St-Gervais ou Dré", "Ste Lucie, St-Lucien, St.Patrick, St Patrick, st-jules (laisser?), Sts Pierre & Paul, STe Lucie (laisser?)", "Bse Lucie, Bx-Lucien, Bx.Patrick, Bx Patrick, bx-jules (laisser?), Bses Jeanne & Julie", "Ier, Iers, Iier, Iiers, Ire (laisser?), Ires (laisser?), Ière, 1ière, 1ères, 1ières", unicode2charset("Accents : Ière, 1ière, 1ères, 1ières - ro, vo, rro, 1o, 2o, 22o, Mgr J.XXIII"), unicode2charset("Ie IIème IIIe IVe Ve VIe VIIe VIIIe IXe Xe XIe XVe XXe"), unicode2charset("Erreurs de typo : 2me, 3ème, 4ième, 5mes, 6èmes, 7ièmes"), unicode2charset("Cas problématique du L (50) : XLe XLème XLième Lème LIe"), "1er 1ers, 1eres, 2e 2es, IIIe IIIes, 2nd 22nd 21nd 2ndes. Vve Martin Cie Tartuffe, 3 Bd Voltaire.", "3 ou 4 m², 3 ou 4 m2 et 2 m3. 50 Mds ou 50 Mns ! Sté, Stés, Stés, Ste, Ets, Éts, Éts, Éts, Éts ...", "Mlle, Mlles, Mme, Mmes et erreurs Melle, Melles", "Me, Me martin, Me Martin, Mes M.&T., MMes M.&T.", 'avant <a href="www.mon-1er-lien.com" title="Mon 1er titre">Mon 1er lien</a> et <img src="image.jpg" alt="logo 6e" title="Cliquez!">', 'avant [Mon 1er lien->www.mon-1er-lien.com] apres le "test"!', 'on est passé du 7e au 15e rang, pas du 17e au 5e, des 7es aux 3emes !', 'on est passé du 7eme au 15ème rang, pas du 17ieme au 5ème', ); test_outil(cs_test_fun($textes, 'typo_exposants'), 'Test sur : typo_exposants() - Charset du site : '.$GLOBALS['meta']['charset']); // test de typo_guillemets() $textes = array( 'avant <i class="style">le</i> "test"!', 'avant <code class="code">toto</code>. apres le "test"!', 'avant '.echappe_html('<script>toto</script>', 'TEST', true).'apres le "test"!', 'avant '.echappe_html('<code class="code">toto</code>', 'TEST', true).'apres le "test"!', 'avant <a href="www.monlien.com" title="Mon titre" target="_blank">Mon lien</a> apres le "test"!', 'avant [Mon lien->www.monlien.com] apres le "test"!', ); test_outil(cs_test_fun($textes, 'typo_guillemets'), 'Test sur : typo_guillemets()'); // test des smileys $textes = array( "Doubles : :-(( :-)) :)) :'-)) :’-))", "Simples : :-> :-> :-( :-D :-) |-) :'-) :’-) :'-D :’-D :'-( :’-( :-( :o) B-) ;-) :-p :-P' :-| :-/ :-o :-O", "les courts (reconnus s'il y a un espace avant) : :) :( ;) :| |) :/ :(", ); test_outil(cs_test_fun($textes, 'cs_smileys_pre_typo'), 'Test sur : cs_smileys_pre_typo()'); // test des filets $textes = array( "__degrade.png__\n__ornement.png__", "\n__6__\n__5__\n__4__\n__3__\n__2__\n__1__\n__0__\n", ); if(function_exists('filets_sep')) test_outil(cs_test_fun($textes, create_function('$t','return propre(filets_sep($t));')), 'Test sur : filets_sep()'); // test des liens orphelins $GLOBALS["liens_orphelins_etendu"]=true; $textes = array( "http://google.fr et <html>http://google.fr</html> et <code>http://google.fr</code> et <cite>http://google.fr</cite>", "Voici : http://google.fr. Voici :http://www.google.fr. Voici http://www.google.fr", "voici : https://mabanque.fr ou encore ftp://mabanque.fr!", "www.google.fr ou bien : www.google.fr", "http://*****:*****@www.commentcamarche.net:80/glossair/glossair.php3 et http://serveur:port/repertoire/fichier.html", "ftp://serveur/repertoire/fichier.qqchose, ou encore ftp.stockage.fr/tropdelaballe...", "file:///disque|/repertoire/fichier.qqchose et : file:///c|/tmp/fichier.txt", "mailto:nom@organisation.domaine et : mailto:Fabien.Gandon@sophia.inria.fr", "telnet://bbs.monsite.com/ et telnet://Nom:Password@serveur.ici:port", "telnet://*****:*****@gopa.insa.fr:23", "gopher://serveur.ici:port/repertoire/fichier#marqueur et gopher://gopher.monsite.com/", "newsrc://*****:*****@world.com, mailto:moi-moi@world.com, mailto:nom@provider.com?subject=renseignement", "moi+moi@kekpar.tm.fr, mailto:moi-moi@kekpar.tm.fr, mailto:nom@provider.com.tm.fr?subject=renseignement", 'une image ? <img src="http://mailer.e-flux.com/mail_images/toto.jpg" alt="" />', '[<img src="http://mailer.e-flux.com/mail_images/toto.jpg" alt="" />->http://www.americas-society.org/] ', ); // test_outil(cs_test_fun($textes, 'typo'), 'Test sur : echappements'); test_outil(cs_test_fun($textes, 'liens_orphelins'), 'Test sur : liens_orphelins()'); $textes = array( "mailto:nom@organisation.domaine et : mailto:Fabien.Gandon@sophia.inria.fr (on supprime ces liens)", "moi+moi@world.com, mailto:moi-moi@world.com, mailto:nom@provider.com?subject=renseignement", "pat@moi.com [->pat@moi.com] [pat->pat@moi.com]", "pat@moi.com.tm.fr [->pat@moi.com.tm.fr] [pat->pat@moi.com.tm.fr]", "<a href='mailto:moi@toto.com'>Moi</a> et : <a href='mailto:moi@toto.com'>moi@toto.com</a>", "<a href='mailto:moi@kekpar.tm.fr'>Moi</a> et : <a href='mailto:moi@kekpar.tm.fr'>moi@kekpar.tm.fr</a>", '[Navigation->/@mot.html] <a class="spip_out" href="/@mot.html">Navigation</a>', ); test_outil(cs_test_fun($textes, 'mailcrypt'), 'Test sur : mailcrypt()'); /* define('_COULEURS_FONDS', 1); define('_COULEURS_SET', 1); define('_COULEURS_PERSO', "bas =#99CC11, haut= brown, test= bleu"); couleurs_installe(); print_r(couleurs_pre_typo("to[bas]to[/bas]to[haut]to[/haut]toto[test]to[/couleur]to\nto[bg bas]to[/bg]to[bg haut]to[/bg]toto[bg test]to[/bg test]to\n")); print_r(couleurs_pre_typo("to[red]to[/red]to[bleu]to[/bleu]toto[rouge]to[/couleur]to\nto[bg red]to[/bg]to[bg bleu]to[/bg]toto[bg rouge]to[/bg rouge]to\n")); */ }
function cs_echappe_balises($balises, $fonction, $texte, $arg=NULL){ if(!strlen($texte)) return ''; if (($fonction!==false) && !function_exists($fonction)) { // chargement des fonctions include_spip('cout_fonctions'); if (!function_exists($fonction)) { spip_log("Erreur - cs_echappe_balises() : $fonction() non definie dans : ".$_SERVER['REQUEST_URI']); return $texte; } } // trace d'anciennes balises <html></html> ou autre echappement SPIP ? if(strpos($texte, _CS_HTMLA)!==false) { $texte = preg_replace(',<p[^>]*>(\s*'._CS_HTMLX.')</p>,', '$1', $texte); $texte = preg_replace_callback(','._CS_HTMLA.'(.*?)(?='._CS_HTMLB.'),s', 'cs_echappe_html_callback', $texte); } // protection du texte if($balises!==false) { if(!strlen($balises)) $balises = 'html|code|cadre|frame|script'; $balises = ',<('.$balises.')(\s[^>]*)?>(.*)</\1>,UimsS'; include_spip('inc/texte'); $texte = echappe_html($texte, 'CS', true, $balises); } // retour du texte simplement protege if ($fonction===false) return $texte; // transformation par $fonction $texte = $arg==NULL?$fonction($texte):$fonction($texte, $arg); // deprotection en abime, notamment des modeles... if(strpos($texte, 'base64CS')!==false) $texte = echappe_retour($texte, 'CS'); if(strpos($texte, 'base64CS')!==false) return echappe_retour($texte, 'CS'); return $texte; }
function propre($t, $connect=null) { // les appels directs a cette fonction depuis le php de l'espace // prive etant historiquement ecrits sans argment $connect // on utilise la presence de celui-ci pour distinguer les cas // ou il faut passer interdire_script explicitement // les appels dans les squelettes (de l'espace prive) fournissant un $connect // ne seront pas perturbes $interdire_script = false; if (is_null($connect)){ $connect = ''; $interdire_script = true; } return !$t ? strval($t) : echappe_retour_modeles( traiter_raccourcis( expanser_liens(echappe_html($t),$connect)),$interdire_script); }