2 // expanser_liens() est introduit sous SPIP 2.0
3 if (!defined('_SPIP19300')) {
4 @define
('_RACCOURCI_LIEN', ',\[([^][]*)->(>?)([^]]*)\],msS');
5 function expanser_liens($letexte) {
7 if (preg_match_all(_RACCOURCI_LIEN
, $letexte, $matches, PREG_SET_ORDER
)) {
9 foreach ($matches as $regs) {
10 $inserts[++
$i] = traiter_raccourci_lien($regs);
11 $letexte = str_replace($regs[0], "@@SPIP_ECHAPPE_LIEN_$i@@", $letexte);
14 $letexte = typo($letexte, /* echap deja fait, accelerer */ false);
15 foreach ($inserts as $i => $insert)
16 $letexte = str_replace("@@SPIP_ECHAPPE_LIEN_$i@@", $insert, $letexte);
22 chiffres, lettres, 20 caracteres speciaux autorises dans les urls
23 voir les references suivantes :
24 http://gbiv.com/protocols/uri/rfc/rfc3986.html
25 http://tools.ietf.org/html/rfc3696
27 @define
('_cs_liens_AUTORISE', $autorises='\!\#\$\%\&\'\*\+\-\/\=\?\^\_\`\.\{\|\}\~a-zA-Z0-9');
28 @define
('_cs_liens_AUTORISE_FIN', $autorisesfin='\#\$\&\'\*\+\-\/\=\^\_\`\|\~a-zA-Z0-9');
29 @define
('_cs_liens_HTTP', ",[a-zA-Z]+://[{$autorises}:@]*[{$autorisesfin}],");
30 @define
('_cs_liens_WWW', ",\b(www|ftp)\.[a-zA-Z0-9_-]+\.[{$autorises}]*[{$autorisesfin}],");
31 @define
('_cs_liens_NEWS', ",\bnews:[{$autorises}]*[{$autorisesfin}],");
32 @define
('_cs_liens_MAILS', ",\b(mailto:)?([{$autorises}]*@[a-zA-Z][a-zA-Z0-9-.]*\.[a-zA-Z]+(\?[{$autorises}]*)?),");
36 function cs_liens_echappe_callback($matches)
37 {return cs_code_echappement($matches[0], 'LIENS');}
39 function cs_liens_raccourcis_callback($matches) {
40 if($GLOBALS["liens_interrogation"]) {
41 // TODO (SPIP>=2.1) : utiliser $lien_court = charger_fonction('lien_court', 'inc');
42 $long_url = defined('_MAX_LONG_URL') ? _MAX_LONG_URL
: 40;
43 $coupe_url = defined('_MAX_COUPE_URL') ? _MAX_COUPE_URL
: 35;
44 if(strlen($texte = retour_interro_amp($matches[0]))>$long_url) $texte = substr($texte,0,$coupe_url).'...';
45 $texte = expanser_liens('['.echappe_interro_amp($texte).'->'.echappe_interro_amp($matches[0]).']');
47 $texte = expanser_liens('[->'.$matches[0].']');
48 return cs_code_echappement($texte, 'LIENS');
51 function cs_liens_email_callback($matches) {
52 return cs_code_echappement(expanser_liens("[$matches[2]->mailto:$matches[2]]"), 'LIENS');
55 // les echappements...
57 function echappe_interro_amp(&$texte) {
58 return !$GLOBALS["liens_interrogation"]?
$texte
59 :str_replace(array('?', '!', '&', '&', '--'),
60 array('++cs_INTERRO++', '++cs_EXCLAM++', '++cs_AMP++', '++cs_AMP++', '++cs_TIR++'), $texte);
63 function retour_interro_amp(&$texte) {
64 return !$GLOBALS["liens_interrogation"] ||
strpos($texte, '++')===false?
$texte
65 :str_replace(array('++cs_INTERRO++', '++cs_EXCLAM++', '++cs_AMP++', '++cs_TIR++'),
66 array('?', '!', '&', '--'), $texte);