4 // Les URLs brutes sont converties en <a href='url'>url</a>
5 // https://code.spip.net/@traiter_raccourci_liens
6 function tw_autoliens($t) {
8 defined('_EXTRAIRE_LIENS') ||
define('_EXTRAIRE_LIENS', ',' . '\[[^\[\]]*(?:<-|->).*?\]' . '|<a\b.*?</a\b' . '|<\w.*?>' . '|((?:https?:/|www\.)[^"\'\s\[\]\}\)<>]*)' . ',imsS');
10 $t = preg_replace_callback(_EXTRAIRE_LIENS
, 'tw_traiter_autoliens', $t);
12 // echapper les autoliens eventuellement inseres (en une seule fois)
13 if (strpos($t, "<html>") !== false) {
14 $t = echappe_html($t);
21 // callback pour la fonction autoliens()
22 // https://code.spip.net/@autoliens_callback
23 function tw_traiter_autoliens($r) {
31 // reperer le protocole
32 if (preg_match(',^(https?):/*,S', $l, $m)) {
33 $l = substr($l, strlen($m[0]));
38 // valider le nom de domaine
39 if (!preg_match(_EXTRAIRE_DOMAINE
, $l)) {
42 // les ponctuations a la fin d'une URL n'en font certainement pas partie
43 // en particulier le "|" quand elles sont dans un tableau a la SPIP
44 preg_match('/^(.*?)([,.;?|]?)$/', $l, $k);
45 $url = $protocol . '://' . $k[1];
46 $lien = charger_fonction('lien', 'inc');
47 // deux fois <html> car inc_lien echappe un coup et restaure ensuite
48 // => un perd 1 <html>
49 $r = $lien($url, "<html><html>$url</html></html>", '', '', '', 'nofollow') . $k[2];
51 // ajouter la class auto
52 $r = inserer_attribut($r, 'class', trim(extraire_attribut($r, 'class') . ' auto'));
54 // si l'original ne contenait pas le 'http:' on le supprime du clic
55 return ($m ?
$r : str_replace('>http://', '>', $r));