source: spip-zone/_core_/branches/spip-3.0/plugins/textwheel/inc/autoliens.php @ 104360

Last change on this file since 104360 was 104360, checked in by spip.franck@…, 3 years ago

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

File size: 1.8 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        include_spip('inc/ressource');
13        if (defined('_EXTRAIRE_RESSOURCES'))
14        $t = preg_replace_callback(_EXTRAIRE_RESSOURCES, 'traiter_ressources', $t);
15
16        // echapper les autoliens eventuellement inseres (en une seule fois)
17        if (strpos($t,"<html>")!==false)
18                $t = echappe_html($t);
19        return $t;
20}
21
22
23// callback pour la fonction autoliens()
24// https://code.spip.net/@autoliens_callback
25function tw_traiter_autoliens($r) {
26        if (count($r)<2) return reset($r);
27        list($tout, $l) = $r;
28        if (!$l) return $tout;
29        // reperer le protocole
30        if (preg_match(',^(https?):/*,S', $l, $m)) {
31                $l = substr($l, strlen($m[0]));
32                $protocol = $m[1];
33        } else  $protocol = 'http';
34        // valider le nom de domaine
35        if (!preg_match(_EXTRAIRE_DOMAINE, $l)) return $tout;
36        // les ponctuations a la fin d'une URL n'en font certainement pas partie
37        // en particulier le "|" quand elles sont dans un tableau a la SPIP
38        preg_match('/^(.*?)([,.;?|]?)$/', $l, $k);
39        $url = $protocol.'://'.$k[1];
40        $lien = charger_fonction('lien', 'inc');
41        // deux fois <html> car inc_lien echappe un coup et restaure ensuite
42        // => un perd 1 <html>
43        $r = $lien($url,"<html><html>$url</html></html>",'','','','nofollow') . $k[2];
44
45        // ajouter la class auto
46        $r = inserer_attribut($r, 'class', trim(extraire_attribut($r,'class').' auto'));
47
48        // si l'original ne contenait pas le 'http:' on le supprime du clic
49        return ($m ? $r : str_replace('>http://', '>', $r));
50}
51
52
53
54?>
Note: See TracBrowser for help on using the repository browser.