Example #1
0
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;
}
Example #2
0
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;
}
Example #3
0
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;
}
Example #4
0
/**
 * 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;
}
Example #5
0
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;
}
Example #6
0
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;
}
Example #7
0
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;
}
Example #8
0
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('"', '&quot;', $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('"', '&quot;', $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;
}
Example #9
0
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;
}
Example #10
0
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;
}
Example #11
0
/**
 * 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;
}
Example #12
0
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;
}
Example #13
0
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 &amp; Paul, Drs Pierre &amp; Paul. Surveiller : Pr&eacute;-St-Gervais ou Dr&eacute;",
		"Ste Lucie, St-Lucien, St.Patrick, St Patrick, st-jules (laisser?), Sts Pierre &amp; Paul, STe Lucie (laisser?)",
		"Bse Lucie, Bx-Lucien, Bx.Patrick, Bx Patrick, bx-jules (laisser?), Bses Jeanne &amp; Julie",
		"Ier, Iers, Iier, Iiers, Ire (laisser?), Ires (laisser?), I&#232;re, 1i&#232;re, 1&#232;res, 1i&#232;res",
		unicode2charset("Accents : I&#232;re, 1i&#232;re, 1&#232;res, 1i&#232;res - ro, vo, rro, 1o, 2o, 22o, Mgr J.XXIII"),
		unicode2charset("Ie II&#232;me IIIe IVe Ve VIe VIIe VIIIe IXe Xe XIe XVe XXe"),
		unicode2charset("Erreurs de typo : 2me, 3&#232;me, 4i&#232;me, 5mes, 6&#232;mes, 7i&#232;mes"),
		unicode2charset("Cas probl&#233;matique du L (50) : XLe XL&#232;me XLi&#232;me L&#232;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&eacute;s, Stés, Ste, Ets, Éts, Éts, &Eacute;ts, &#201;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&eacute; du 7e au 15e rang, pas du 17e au 5e, des 7es aux 3emes !',
		'on est pass&eacute; du 7eme au 15&#232;me rang, pas du 17ieme au 5&egrave;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 : :-> :-&gt; :-( :-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"));
*/
}
Example #14
0
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;
}
Example #15
0
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);
}