source: spip-zone/_core_/plugins/textwheel/inc/autoliens.php

Last change on this file was 104354, checked in by spip.franck@…, 23 months ago

code.spip est maintenant en https, donc j'ajoute le "s" à http

File size: 1.7 KB
Line 
1<?php
2
3
4// Les URLs brutes sont converties en <a href='url'>url</a>
5// https://code.spip.net/@traiter_raccourci_liens
6function tw_autoliens($t) {
7
8        defined('_EXTRAIRE_LIENS') || define('_EXTRAIRE_LIENS', ',' . '\[[^\[\]]*(?:<-|->).*?\]' . '|<a\b.*?</a\b' . '|<\w.*?>' . '|((?:https?:/|www\.)[^"\'\s\[\]\}\)<>]*)' . ',imsS');
9
10        $t = preg_replace_callback(_EXTRAIRE_LIENS, 'tw_traiter_autoliens', $t);
11
12        // echapper les autoliens eventuellement inseres (en une seule fois)
13        if (strpos($t, "<html>") !== false) {
14                $t = echappe_html($t);
15        }
16
17        return $t;
18}
19
20
21// callback pour la fonction autoliens()
22// https://code.spip.net/@autoliens_callback
23function tw_traiter_autoliens($r) {
24        if (count($r) < 2) {
25                return reset($r);
26        }
27        list($tout, $l) = $r;
28        if (!$l) {
29                return $tout;
30        }
31        // reperer le protocole
32        if (preg_match(',^(https?):/*,S', $l, $m)) {
33                $l = substr($l, strlen($m[0]));
34                $protocol = $m[1];
35        } else {
36                $protocol = 'http';
37        }
38        // valider le nom de domaine
39        if (!preg_match(_EXTRAIRE_DOMAINE, $l)) {
40                return $tout;
41        }
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];
50
51        // ajouter la class auto
52        $r = inserer_attribut($r, 'class', trim(extraire_attribut($r, 'class') . ' auto'));
53
54        // si l'original ne contenait pas le 'http:' on le supprime du clic
55        return ($m ? $r : str_replace('>http://', '>', $r));
56}
Note: See TracBrowser for help on using the repository browser.