[Résolu] Codage automatique des emails dans CKEditor

FrancisFrancis Member
juillet 2012 modifié dans Modifications
Bonjour,

Pour coder les adresses mail, j'utilisais du Javascript, mais ces adresses devenaient invisibles dans CKEditor : pas très ergonomique pour l'utilisateur !

Je voulais que ce soit automatique, comme dans Joomla, et j'ai imaginé des solutions compliquées, jusqu'à ce que je m'aperçoive que CKEditor pouvait le faire tout seul ! Au moins en partie, car dans une adresse :
<a href="mailto:titi@toto.fr">titi@toto.fr</a>
CKEditor ne code que la partie qui suit "mailto:", ce qui est déjà un bon début.

Il suffit d'écrire, dans ckeditor/ckeditor/config.js :
config.emailProtection = 'encode';

La doc se trouve à cette adresse : http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html


---
Parenthèse : J'y ai trouvé deux autres paramètres intéressants, que j'ai placés dans ce fichier config.js
config.height = '350px';
config.entities = false;
Le premier pour agrandir la hauteur de la fenêtre d'édition (200px par défaut, un peu petit à mon goût), le deuxième pour écrire les lettres accentuées, ç et € tels quels, au lieu d'utiliser des entités comme é pour le é par exemple (puisque le codage est déclaré dans l'en-tête, ça ne sert à rien et c'est plus simple pour éditer le code source - à condition d'enregistrer dans le bon format de codage, normalement utf-8).
Fin de la parenthèse
---


Pour revenir à notre adresse courriel, il restait à coder la partie affichée.
J'ai opté pour un codage basique : le remplacement de l'arobase @ par du Javascript. J'ai prévu aussi que l'on ne veuille pas coder le signe @ pour indiquer qu'il s'agit d'une seule arobase @, mais qui ne doit pas être codée en Javascript.


Dans le fichier ckeditor/ckeditor.php, il faut ajouter :


- à la fonction plxAdminEditArticle (codage pour l'enregistrement des articles) :
//  Codage de l'arobase @ en JavaScript, sauf les @ qui ne doivent être codées (à écrire @@ dans l'éditeur) : 
//  les @@ sont transformés temporairement en texte ('plx_arobase_nocode'), puis en @ après le codage des autres arobases.
echo "<?php \$chapo = str_replace('@@', 'plx_arobase_nocode', \$chapo); ?>";
echo "<?php \$content = str_replace('@@', 'plx_arobase_nocode', \$content); ?>";
echo "<?php \$chapo = str_replace('@', '<script type=\"text/javascript\">document.write(\"&#64;\");</script>', \$chapo); ?>";
echo "<?php \$content = str_replace('@', '<script type=\"text/javascript\">document.write(\"&#64;\");</script>', \$content); ?>";
echo "<?php \$chapo = str_replace('plx_arobase_nocode', '@', \$chapo); ?>";
echo "<?php \$content = str_replace('plx_arobase_nocode', '@', \$content); ?>";

- et à la fonction AdminArticleTop (décodage des @, pour permettre leur affichage dans la fenêtre de l'éditeur) :
// Décodage des arobases codées en JavaScript, et transformation des arobases @ écrites telles quelles en @@ 
// (les @@ repèrent les arobases simples @ à ne pas coder à l'enregistrement) 
echo "<?php \$chapo = str_replace('@', '@@', \$chapo); ?>";
echo "<?php \$content = str_replace('@', '@@', \$content); ?>";
echo "<?php \$chapo = str_replace('<script type=\"text/javascript\">document.write(\"&#64;\");</script>', '@', \$chapo); ?>";
echo "<?php \$content = str_replace('<script type=\"text/javascript\">document.write(\"&#64;\");</script>', '@', \$content); ?>";

Voilà pour la méthode, il faut faire la même chose pour les pages statiques.
Ce sera bientôt dans le paquet CKEditor + gestionnaire de fichiers libre KCFinder (à ne pas confondre avec CKFinder payant : voir http://forum.pluxml.org/search.php?search_id=988853269.

Réponses

  • StéphaneStéphane Member, Former PluXml Project Manager
    L'encodage des emails est géré dans le plugin ckeditor à partir de la version 1.4.2

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • Pour sûr, le problème est résolu, et de manière plus élégante que ma solution de départ ! Merci à toi Stéphane, ainsi qu'à Jerry Wham qui nous a aiguillé vers une bonne piste !
Connectez-vous ou Inscrivez-vous pour répondre.