Problème avec CKEditor

TetsumakiTetsumaki Member
septembre 2013 modifié dans Bogues
Bonjour, il y a quelques bugs avec la colorisation syntaxique.

PluXml : 5.2
CKEditor : 1.5

Bug 1 : Lorsque j'écris root@ip ou a@a etc... j'ai un <script type="text/javascript">eval(unescape('%64%6f%63%75%6d%65%6e%74%2e%77%72%69%74%65%28%27%72%6f%6f%74%40%69%70%27%29')) qui apparaît dans le bloc.

Lorsqu'on rédige l'article et qu'on fait une prévisualisation il n'y a pas ce bug.

Bug 2 : Dans le bloc "Ajouter du code" > Avancé de CKEditor, l'option "Désactiver les retours à la ligne." ne semblent pas être prise en compte.

Bug 3 : Les lignes sont mal comptées

Apparemment dés qu'une ligne est trop grande et fait un saut de ligne, ça compte une ligne de plus alors que ça ne devrait pas.
Du coup ça décale et à la fin il manque des lignes.

Par exemple :
Voici une phrase assez longue de test.
Une autre ligne.

Je devrais obtenir quelque chose du genre :
1. Voici une phrase assez
   longue de test
2. Une autre ligne

Hors, j'obtiens :
1. Voici une phrase assez
2. longue de test
   Une autre ligne

J'ai mis en ligne les bugs sur un site provisoire que je supprimerais par la suite pour bien comprendre :
https://tetsumaki.net/test123/

Réponses

  • Au lieu de recrée un sujet, j'en profite pour signaler un problème sur le plugin : MyComRememberMe
    D'après ce que je vois il ajoute une balise <p> à l'intérieure d'une balise <p> ce qui aux yeux du validator w3c n'est pas correct.

    J'ai :
    <p>
    	<textarea id="id_content" name="content" cols="35" rows="6"></textarea>
    	<p class="rememberme">
    		<input type="checkbox" id="id_rememberme" name="rememberme" value="1" />&nbsp;Se rappeler de moi sur ce site
    	</p>
    </p>
    

    au lieu de :
    <p>
    	<textarea id="id_content" name="content" cols="35" rows="6"></textarea>
    </p>
    <p class="rememberme">
    	<input type="checkbox" id="id_rememberme" name="rememberme" value="1" />&nbsp;Se rappeler de moi sur ce site
    </p>
    

    On voit bien le problème ici : http://validator.w3.org/check?uri=https://tetsumaki.net/test123/article8/quelques-bugs
  • TetsumakiTetsumaki Member
    septembre 2013 modifié
    Je viens de trouver le problème pour le bug 1.
    Le soucis vient de la fonction protectEmails().

    Celle-ci fonctionne très bien mais à l'intérieur d'une balise pre class= elle ne devrait pas faire de traitement étant donné que tout code html à l'intérieur de cette balise sera traité par un htmlentities() (ou équivalent).

    Ne voulant pas m'aventurer dans le code et les regex je préfère laisser faire les mainteneurs du projet.

    En attendant j'ai solutionné mon problème de façon barbare et provisoire (en attendant un fix) de cette façon :

    Avant :
    # si affichage des articles coté visiteurs: protection des emails contre le spam
    if(!defined('PLX_ADMIN')) {
        $this->addHook('plxMotorParseArticle', 'protectEmailsArticles');
        ...
    

    Après :
    # si affichage des articles coté visiteurs: protection des emails contre le spam
    if(!defined('PLX_ADMIN')) {
    #   $this->addHook('plxMotorParseArticle', 'protectEmailsArticles');
        ...
    
  • Jerry WhamJerry Wham Member
    septembre 2013 modifié
    Pour le bug 1, en effet c'est barbare. Tu te prives ainsi de la protection des emails entrés dans le texte.
    Je ne suis pas d'accord quand tu dis que la balise pre ne devrait pas subir de traitement car il peut arriver, quand tu partages du code via cette balise, que tu mettes l'email de l'auteur dans les commentaires du code.
    Si tu supprimes cette protection, l'auteur a un risque beaucoup plus élevé de se faire spammer.

    Tout ça pour dire, que balise pre ou pas, le traitement ne devrait apparaître que dans le code source et pas à l'affichage. Il me semblait pourtant que le bug avait déjà été corrigé...
  • Oui effectivement ça doit être aussi traité dans une balise <pre>.
    Sinon oui c'est barbare mais sur mon site il n'y a aucun email donc en attendant ça me dépanne bien.
  • Pour info une solution propre a été donné il y a 4 mois sur GitHub :

    /plugins/ckeditor/ckeditor.php
    En dessous de :
    $s = preg_replace('/<textarea(\s+[^>]*)?>.*?<\/textarea(\s+[^>]*)?>/i', '', $s);
    

    Ajouter :
    $s = preg_replace('/<(code|pre)(\b.*)<\/(code|pre)>/is', '', $s);
    
Connectez-vous ou Inscrivez-vous pour répondre.