Partage
  • Partager sur Facebook
  • Partager sur Twitter

balise code ckeditor

28 septembre 2021 à 14:06:50

bonjour

quand je met du code dans la balise code, et fait montrer le résultat en dehors d'un textarea... il exécute le code.

exemple:

<div class="ruban">     
        <h2>Astuce à la une</h2>     
</div>     
      <div class="ruban_gauche"></div>
      <div class="ruban_droit"></div>

dans le code source va m'afficher:

<pre>
<code class="language-html"><div class="ruban">     
        <h2>Astuce à la une</h2>     
      </div>     
      <div class="ruban_gauche"></div>
      <div class="ruban_droit"></div>
</div></code></pre>

j'ai donc ajouter :

$descrip = str_replace( '<code ', '<xmp><code ', $descrip);	
$descrip = str_replace( "</code>", "</code></xmp>", $descrip);
?>

<div class='blocast'><?php echo $descrip; ?><div class="clear_DG"></div></div>

ça m'affiche bien le code sans l’exécuter mais sans le style, couleur.

comment je peut faire ? 



  • Partager sur Facebook
  • Partager sur Twitter
29 septembre 2021 à 11:05:53

Salut

merci, mais je ne vois pas de solution : plaintext, et listing également obsolètes.

<pre> et <code> sont déja présent mais exécute le code...htmlspecialchars enlève tous le style.

la balise <code> je ne vois pas a quoi elle sert si elle exécute le code.

il existe une fonction ou autre qui permet de faire tous ce qui entre la balise <code></code> est en htmlspecialchars ?

  • Partager sur Facebook
  • Partager sur Twitter
29 septembre 2021 à 11:22:40

maxtrident a écrit:

il existe une fonction ou autre qui permet de faire tous ce qui entre la balise est en htmlspecialchars ?

Oui, htmlspecialchars() elle-même… Mais ce que tu ne dis pas et que je crois deviner, c'est que le code dont tu parles est inclus au milieu de texte saisi par l'utilisateur ?

Tant que tu souhaites enregistrer uniquement du HTML en base, tu n'as à mon avis pas trop le choix que d'extraire ce qui se trouve entre les balises "sources" <code>…</code>, y faire le traitement de htmlspecialchars(), et remettre le code ainsi traité entre les balises.
Une autre alternative serait d'utiliser un autre système de mise en forme, comme du bbcode, du wikicode ou encore du markdown (il existe très probablement des éditeurs "WYSIWYG" pour chacune de ces possibilités, et ce ne sont pas les seules), et de faire la conversion depuis cette source. Les outils qui gèrent ça doivent aussi gérer le cas qui te préoccupe. Attention cependant : en base, tu enregistres la source et la version HTML dans ce cas.

Note que ce que tu as actuellement semble manquer un chevron fermant (>) dans ce que tu remplaces pour la balise ouvrante.

Edit

Si jamais, la balise <code> indique, du point de vue sémantique, que ce qu'elle contient est du code inline, comme le nom de la balise dans ce paragraphe. Utile pour de petits extraits inclus dans une phrase, par exemple. La balise <pre>, elle, indique que ce qu'elle contient est un bloc de code, comme ce que tu as utilisé dans le premier message. Utile donc pour des extraits pour lesquels il faut plusieurs lignes.

-
Edité par Ymox 30 septembre 2021 à 9:42:11

  • Partager sur Facebook
  • Partager sur Twitter
29 septembre 2021 à 12:03:30

Ckeditor c'est un éditeurs "WYSIWYG"

la seul solution c'est de le mettre dans un textarea... parcontre je ne vois pas comment mettre la hauteur automatiquement en fonction du contenue et avoir uniquement le cadre et pas tous les icones de ckeditor.

  • Partager sur Facebook
  • Partager sur Twitter
29 septembre 2021 à 12:24:09

maxtrident a écrit:

Ckeditor c'est un éditeurs "WYSIWYG"

Qui génère du HTML, avec les éventuels désagréments que ça implique pour la gestion de code HTML intégré dans ce qui est saisi.

Normalement, CKEditor devrait de lui-même traiter ce qui est saisi comme code et échapper de lui-même les balises.

Pour l'histoire de hauteur, c'est un tout autre problème.

  • Partager sur Facebook
  • Partager sur Twitter
30 septembre 2021 à 10:20:07

ouai normalement il devrait le traiter... mais en plus dans le textarea ça fait pareille.

j'ai résolu une partie du problème en faisant ça en espérant que certain module de ckeditor ne l'utilise pas.

$descrip = str_replace('<div', '&lt;div', $descrip);
$descrip = str_replace('</div>', '&lt;/div&gt;', $descrip);


par contre je voudrais faire ça uniquement entre les balises code, je ne vois pas comment faire une idée ?

  • Partager sur Facebook
  • Partager sur Twitter
30 septembre 2021 à 10:24:19

Dans un <textarea>, il faut que les caractères spéciaux du HTML y soient mis sous forme d'entité quand tu "préremplis" le champ. Et pour du code, le traitement doit être "doublé", &amp;lt;div&amp;gt;

  • Partager sur Facebook
  • Partager sur Twitter
30 septembre 2021 à 11:47:16

si je fait ça, j'ai plus de style.

enfaite utilisateur créer sa propre page donc avec ckeditor (qui est  merdique mais complet)...il peut ajouter photo tableau, graphique, video, du code etc...

le problème c'est quand je fait voir dans  le résultat, niveau sécu = zéro...

je ne peut pas mettre du htmlspecialchars sinon plus de style.

je fait avec des str_replace...je ne sais pas si il y a une autre méthode ?

-
Edité par maxtrident 30 septembre 2021 à 11:48:14

  • Partager sur Facebook
  • Partager sur Twitter
30 septembre 2021 à 12:47:25

Seulement tu ne peux pas mettre du code HTML brut dans un <textarea>, ce qui en résulterait serait invalide niveau structure.

Pour ce qui est de sécuriser à l'affichage de la page comme l'utilisateur l'aurait souhaité, on est encore sur un autre souci semble-t'il, mais là je ne vois pas trop d'alternative à effectuer un traitement avec une bibliothèque comme HTML Purifier.

  • Partager sur Facebook
  • Partager sur Twitter