De beaux liens hypertexte

...vus par le Couteau Suisse

Les outils décrits ici sont des fonctionnalités du plugin Le Couteau Suisse. « Liens orphelins » rend cliquable les liens bruts. « MailCrypt » protège les mails présents sur votre site contre les crawlers. « SPIP et les liens... » configure les liens externes et le glossaire externe. « Liens en clair » affiche les liens cachés en vue d’une impression.

Présentation

Les outils décrits ici sont des fonctionnalités du plugin Le Couteau Suisse que vous pouvez trouver ici : Le Couteau Suisse. Pour avoir accès aux nouvelles fonctions agissant sur les liens hypertexte de votre site, il vous faut donc avoir préalablement installé ce plugin.

Ensuite, une fois ces outils activés sur la page d’administration du plugin en espace privé, vous avez donc gestion étendue de tous les liens trouvés dans le corps des textes, aussi bien pour les articles, les brèves, les forums, etc. Bref, tous les textes de SPIP, car de façon plus technique, ces outils utilisent les pipelines de SPIP « pre_propre » ou « post_propre ».

Dépendances

-  La librairie jQuery est requise pour le fonctionnement des Liens externes, ainsi que pour l’outil MailCrypt dans la réalisation de la deuxième étape d’encodage. Ce jeu de fonctions JavaScript très utile a été intégré au core dès la version 1.9.2 de SPIP. Pour les versions inférieures, il vous faut installer et activer le plugin Jquery que vous pouvez télécharger ici : http://zone.spip.org/files/spip-zon....
-  Les styles CSS et les fonctions JavaScript du plugin sont insérés grâce à la balise #INSERT_HEAD qui doit absolument être présente (en un seul exemplaire) dans le header de vos squelettes (entre les balises <head> et </head> des fichiers HTML). Si vous ne trouvez pas cette balise dans vos codes et que les liens n’ont pas l’apparence voulue, alors l’outil « Balise #INSERT_HEAD » permet d’insérer automatiquement cette balise sans manipulation de votre part.

Apparté

Le mot hypertexte a été créé et publié pour la première fois en 1965, par Théodore Nelson. Il explique ainsi son idée :

« Elle m’est venue en octobre-novembre 1960, alors que je suivais un cours d’initiation à l’informatique qui, au début, devait m’aider à écrire mes livres de philosophie. Je cherchais un moyen de créer sans contrainte un document à partir d’un vaste ensemble d’idées de tous types, non-structurées, non-séquentielles, exprimées sur des supports aussi divers qu’un film, une bande magnétique ou un morceau de papier. » (entretien accordé à A. Baritault, SVM n°77 p. 190)

Rappel : les liens hypertextes de SPIP

Les liens sous SPIP sont facilement générés grâce à un raccourci [1] : mettre le texte et l’URL entre crochets, séparés par une flèche (comme ceci : [texte -> URL]). Le texte devient une zone cliquable, et renverra le lecteur sur la page
web indiquée par « URL ». Ex : [le site national de l'AITF->http://www.aivf.asso.fr] qui devient : le site national de l’AITF. Il existe plusieurs types de liens :

-  les liens à l’intérieur de votre propre site. Par exemple :
Le raccourci [->article2166] génère un lien interne, vers l’article 2166 de votre site, ainsi : Le Couteau Suisse.

-  les liens vers l’extérieur de votre site. Par exemple :
Le raccourci [uZine->http://www.uzine.net] affiche le lien externe suivant : uZine.

-  les adresses URL transformées en lien hypertexte. Par exemple :
Le raccourci [->http://www.uzine.net] affiche directement l’URL, avec un lien hypertexte vers cette adresse, ainsi : http://www.uzine.net.

-  les liens vers le glossaire externe (en l’occurrence l’encyclopédie en ligne Wikipédia). Par exemple :
Le raccourci [?SPIP] génére le lien suivant : SPIP.

L’outil « Belles URLs »

Les "liens corrects"

SPIP a pour habitude d’insérer un espace avant les points d’interrogation ou d’exclamation, typographie française oblige. Voici une option qui protège le point d’interrogation dans les URLs (cliquables ou non) de vos textes. Exemples :
-  http://www.spip-contrib.net/?article2166 au lieu de : http://www.spip-contrib.net/?article2166
-  http://www.spip-contrib.net/?article2166 au lieu de : http://www.spip-contrib.net/?article2166

Les « liens orphelins »

Cet outil remplace systématiquement tous les liens laissés en texte par les utilisateurs (notamment dans les forums) et qui ne sont donc pas cliquables, par des liens hypertexte au format SPIP. Par exemple : www.spip.net est remplacé par www.spip.net.

Sur la page de configuration des outils, vous pouvez choisir le type de remplacement :

-  Basique : sont remplacés les liens du type http://spip.net (tout protocole) ou www.spip.net.
-  Étendu : sont remplacés en plus les liens du type moi@spip.net, mailto:monmail ou news:mesnews.

Techniquement, les textes sont examinés selon cette procédure :
-  Protection 1 : toutes les balises html, code, cadre, frame, script, acronym et cite.
-  Protection 2 : toutes les balises <a></a> pour éviter les doublons
-  Protection 3 : tous les raccourcis de liens SPIP, au cas où...
-  Protection 4 : toutes les balises contenant des points, histoire de voir plus clair

Les caractères reconnus comme faisant partie des liens (chiffres, lettres et 20 caractères spéciaux) :

@define('_liens_orphelins_AUTORISE',
  '\!\#\$\%\&\'\*\+\-\/\=\?\^\_`\.\{\|\}\~a-zA-Z0-9');

Les caractères reconnus comme pouvant terminer un lien :

@define('_liens_orphelins_AUTORISE_FIN',
  '\#\$\&\'\*\+\-\/\=\^\_`\|\~a-zA-Z0-9');

Attention : la balise #EMAIL, qui renvoie un texte brut par défaut, renvoie un lien cliquable en bonne est due forme lorsque l’outil Liens orphelins est activé avec un type de remplacement étendu. Vérifiez bien le code HTML de vos squelettes.

L’outil « MailCrypt »

Cet outil est inspiré du plugin créé par paolo, dont l’article de documentation est ici.

Un raccourci e-mail [->quelquun@autre.part.org] est d’habitude converti en HTML de la façon suivante :

<a href="mailto:quelquun@autre.part.org" class="spip_out">quelquun@autre.part.org</span>autre.part.org</a>

— ce qui laisse le champ ouvert pour les robots spam.

Première étape :

Intercepté par « MailCrypt », ce lien va être réécrit pour devenir : <a class="spip_url spip_out" onclick="location.href=lancerlien('quelquun','autre.part.org'); return false;" title="quelquun..ât..autre.part.org" href="#">quelquun<span class="mcrypt"></span>autre.part.org</a>

Il n’y a plus d’arobase ni de « mailto» pour orienter les robots. Le style "mcrypt" affiche l’image de l’arobase :

span.mcrypt { 
  background:transparent
  url(plugins/couteau_suisse/img/mailcrypt/leure.gif)
  no-repeat scroll left center;
  color:#000099;
  padding-left:12px;
  text-decoration:none;
  float:none; 
  margin:0; 
  display:inline;
}

Seconde étape :

Si Javascript est activé, alors la librairie jQuery pourra changer le span-image, dont le principal défaut est d’être de taille et de couleur fixe, par un span-arobase tout simple : <span>@</span>. La protection des mails est donc transparente à l’écran et le lien ressemblera à :

<a class="spip_url spip_out" onclick="location.href=lancerlien('quelquun','autre.part.org'); return false;" title="quelquun..ât..autre.part.org" href="#">quelquun<span>@</span>autre.part.org</a>

.

Voici le code jQuery utilisé pour le remplacement :

$(document).ready(function(){
  $('span.mcrypt').after('<span>&#6'+'4;</span>');
  $('span.mcrypt').remove();
});

Lorsque le visiteur clique sur le lien c’est la fonction JavaScript lancerlien qui est exécutée, et ce script reconstitue le lien. Voici le code de la fonction :

function lancerlien(a,b){ return 'ma'+'ilto'+':'+a+'@'+b; }

Et si le visiteur n’a pas JavaScript ? (Il s’agit vraiment de très peu de personnes). C’est certain : ils ne pourront pas utiliser le lien. Ils peuvent pourtant lire l’adresse en survolant le lien avec la souris. Pour aider ceux qui ont ce problème, il vous est possible de mettre un mot explicatif sur la page « technique » du site qui ressemble à :

Parce que le spam est devenu un problème grandissant, nous sommes très prudents dans la manière de mettre publiquement à disposition des adresses e-mail. Celles-ci ne figurent pas sur les pages de ce site, mais sont créées uniquement au moment où le visiteur clique sur un lien. Les visiteurs qui n’ont pas Javascript ou un programme e-mail ne pourront pas utiliser le lien. Cependant, quand le curseur passe sur le lien, un « infobulle » apparaît avec l’adresse e-mail (sous une forme difficile à lire pour les robots spam, mais dont la plupart des visiteurs pourront faire usage).

Attention : la balise #EMAIL, qui renvoie un texte brut par défaut, renvoie un texte où l’arobase est remplacée par un span lorsque l’outil MailCrypt est activé. Vérifiez bien le code HTML de vos squelettes (voir le dernier paragraphe de cet article).

Protéger des mails placés directement dans les squelettes

L’outil « Mailcrypt » ne touche pas aux mails entrés en dur dans les squelettes (fichiers .html) : seules certaines balises SPIP sont traitées. Deux raisons à cela :
-  on fait confiance aux webmestres pour éviter d’offrir des proies si faciles aux robots de SPAM,
-  une vérification de la page finale à chaque hit serait un peu trop coûteux en temps serveur.

Le plugin est donc surtout destiné à protéger les mails stockés dans les textes de la base de données et introduits par les rédacteurs d’articles ou de messages de forum.

Plusieurs solutions s’offrent à vous

-  utiliser directement le filtre « cs_lien » du Couteau Suisse :
        #EVAL**{'cs_lien("moi@toto.com")'}
ou encore :
        #EVAL**{'cs_lien("moi@toto.com", "courriel")'}
-  utiliser la lourde fonction « propre » de SPIP :
        #EVAL**{'propre("moi@toto.com")'}
(attention : le paragraphage automatique de SPIP risque de désorganiser la mise en page et il faut configurer le Couteau Suisse pour que les liens deviennent cliquables avec « Liens orphelins »...)
-  Depuis SPIP 1.93, la balise #VAL permet facilement d’utiliser des filtres en simplifiant un peu le code :
        [(#VAL{moi@toto.com}|cs_lien)]
ou :
        [(#VAL{moi@toto.com}|cs_lien{courriel})]

Autres balises SPIP

L’outil « Mailcrypt » agit sur le pipeline post_propre de SPIP et sur le traitement de la balise #EMAIL. Par conséquent, toute balise nouvellement créée (par vous-même, par un champ de base de données ou par un autre plugin) ne sera pas protégée si son traitement n’est pas explicité dans mes_options.php, intégrant les fonctions mailcrypt() du Couteau Suisse OU propre() de SPIP.

A titre d’exemple, voici comment le Couteau Suisse compile le traitement de la balise #EMAIL, non concernée par la fonction propre() :

        $GLOBALS['table_des_traitements']['EMAIL'][]='mailcrypt(%s)';

Prenons par exemple un champ lesvaleurs présent dans une table de votre base de données. Si ce champ contient une adresse email, alors n’utilisez surtout pas directement dans vos squelettes l’expression suivante :
<a href="mailto:#LESVALEURS">#LESVALEURS</a>

Mais plutôt :
[(#LESVALEURS|cs_lien{#LESVALEURS})]

L’email brut non protégé sera alors transformé en un lien SPIP [->email] par le filtre cs_lien, puis traitée par MailCrypt.

Le filtre |maildecrypt

Ce filtre pourra être utilisé pour supprimer toute intervention de MailCrypt. Il pourrait être utile par exemple avant d’envoyer un mail.

Utilisation dans un squelette :
-  #FILTRE{maildecrypt} sur le fond entier
-  |maildecrypt sur une balise en particulier : [(#TEXTE|maildecrypt)]

L’outil « SPIP et les liens... »

Utiliser des liens externes :

Tous les liens du site s’ouvrent par défaut dans la fenêtre de navigation en cours. Mais il peut être utile d’ouvrir les liens externes au site dans une nouvelle fenêtre extérieure — cela revient à ajouter target="_blank" à toutes les balises <a> dotées par SPIP des classes spip_out, spip_url ou spip_glossaire.

Note : cette fonctionnalité utilise la librairie jQuery et voici son code :

$(document).ready(function(){ 
  $("a.spip_out,a.spip_url,a.spip_glossaire").attr("target", "_blank");
});

Lien vers le glossaire :

SPIP permet de relier des mots à leur définition grâce au raccourci typographique [?mot]. Par défaut (ou si vous laissez vide la case de configuration), le glossaire externe renvoie vers l’encyclopédie libre wikipedia.org : http://@lang@.wikipedia.org/wiki/ (pour le français, SPIP remplacera @lang@ par « fr »). À vous donc, de choisir l’adresse à utiliser.

Lien de test : SPIP

L’outil « Liens en clair »

Cet outil met à votre disposition le filtre : liens_en_clair.

Votre texte contient probablement des liens hypertexte qui ne sont pas visibles lors d’une impression, cachés dans un lien cliquable.... Ce filtre ajoute entre crochets la destination de chaque lien cliquable (liens externes ou mails). Voici un exemple de syntaxe SPIP : [(#TEXTE|liens_en_clair)].

Attention : en mode impression, cette fonctionnalité est appliquée automatiquement, sans filtre obligatoire.

Exemple : le lien caché "Un mail« est remplacé par : »Un mail [quelquun@autre.part.org]".

Précisions sur le mode impression du Couteau Suisse :

Le Couteau Suisse offre un mode utile pour l’impression en plaçant le paramètre « cs=print » dans le lien d’appel de la page. Ce mode est automatiquement activé si le squelette « print.html » est utilisé (donc ici : « page=print »).

Exemples d’appel :
-  Dans un navigateur : www.monsite.ici/spip?article999&cs=print
-  Dans un squelette : [(#SELF|parametre_url{cs,print})]
-  En PHP : parametre_url(self(), 'cs', 'print')

Cas de la balise #EMAIL

La balise #EMAIL, généralement utilisée dans une boucle AUTEURS, est complètement absente des squelettes d’origine, car il est déconseillé d’exposer des emails bruts à l’écran. Un crawler pourrait les utiliser à des fins mal intentionnées.

Voici donc un code à éviter : [<A HREF="mailto:#EMAIL">(#NOM)</A>].

Attention : bien qu’il soit valide, le code précédent est incompatible avec les outils MailCrypt et Liens orphelins qui agissent sur la balise #EMAIL.

A la base, cette balise renvoie un email brut, sans aucune protection. Mais :
-  MailCrypt remplace l’arobase du mail par un span, rendant donc impossible l’utilisation de cette balise dans un href !
-  Liens orphelins remplace l’email brut par un lien sur l’email, rendant également impossible l’utilisation de cette balise dans un href.

Bon, pour empêcher les traitements sur cette balise, vous pouvez toujours utiliser l’étoile : [<A HREF="mailto:#EMAIL*">(#NOM)</A>]. Mais aucune protection ne préservera alors vos auteurs face à la collecte des robots. Pour remédier à ce problème, et permettre quand même aux visiteurs d’envoyer directement des mails aux différents auteurs de votre site, le Couteau Suisse offre un filtre bien utile : cs_lien. Ce filtre très simple permet de créer un lien sur un texte.

La syntaxe à utiliser dans un squelette est donc désormais : [(#EMAIL*|cs_lien{#NOM})].

Ici, l’email brut non protégé est transformé en un lien SPIP [nom->email] par le filtre cs_lien, puis traitée par MailCrypt et éventuellement expansée par Liens en clair pour l’impression.

Eh oui, les outils du Couteau Suisse interagissent ensemble, en toute harmonie !

Notes

[1Si vous le souhaitez, vous pouvez naturellement utiliser du code HTML directement dans vos textes. Mais nous vous conseillons d’utiliser de préférence ces raccourcis, d’une part parce qu’ils sont plus simples à mémoriser, d’autre part parce qu’il font l’objet d’un traitement automatisé avantageux : SPIP les remplace par le code HTML approprié et valide, les dotant de plus de styles facilitant leur habillage graphique par le webmestre.

Discussion

Aucune discussion

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom