5568 sujets

Sémantique web et HTML

Bonjour,

Voila je recontre une petit soucci, dans le cadre du développemet d'un outil de gestion de contenu, je stock un certain nombre de ligne de code dans des champs de base de données (MySQL).

L'interface d'admin du système permet de mettre à jour le contenu des pages stocké.


Pour ce faire je publi le résultat dans un "textarea". Le soucci est que si dans le contenu stocké en base, j'ai une balise "textarea" le code est interprété et çà explose ma page.

en fait la fermeture de la zone </textarea> ferme la zone ou devrait s'afficher le code.

Existet'il une ruse pour protégéer le code afin qu'il ne soit pas interprété ?

merci
Modifié par ernstein (21 Aug 2005 - 21:30)
Bonjour,

Curieuse idée que de publier un contenu dans un textarea si ce textarea n'est pas l'élément d'un formulaire destiné à être renvoyé au serveur...

Il y a quand même d'autres conteneurs possibles !

Quel avantage à utiliser textarea ?

Le scroll automatique ?

Les "div" avec "overflow auto" servent à quoi ?

Cela dit ces barres grisâtres de scroll au milieu d'une page web sont d'une esthétique qui ne m'a jamais séduit...

Cela dit transforme tes crochets (ouvrants et fermants) en &gt; &lt; par exemple et tu n'auras peut-être plus ce problème ?
Le but du jeu est de pouvoir éditer le code présent dans la zone pour le remonter ensuite dans la base.

Ce n'est pas unproblème de design , mais plutot fonctionnel ...
Modifié par ernstein (21 Aug 2005 - 19:18)
Editer du HTML dans un textarea serait un titre plus approprié pour ce sujet.

Le fait que ta page de formulaire soit invalide à cause de l'imbrication d'une balise quelconque dans un textarea aurait dû t'alerter : c'est à cela que sert le test de validité (X)HTML à faire immédiatement en cas de problème... Mais l'as-tu fait ? Smiley cligne

La solution est celle indiquée ci-dessus (encodage de toutes les balises contenues dans le textarea à l'aide de &lt; et &gt;) : <textarea> ne peut contenir aucune balise, que ce soit en HTML ou en XHTML, en strict ou en transitional...

<edit>
Merci de m'avoir remis en mémoire un cas de plus dans lequel l'invalidité HTML provoque un problème bien évident dans le résultat affiché Smiley ravi
</>
Modifié par Laurent Denis (21 Aug 2005 - 19:58)
c'est vrai que si j'avais commencé par la la piste aurait été plus clair.


Pour les utilisateur du language ASP voici la petite routine qui va bien:


Function Tarea(Chaine)
	 Tarea = Replace(Chaine, "&", "&amp;")
	 Tarea = Replace(Tarea, "<", "&lt;")
	 Tarea = Replace(Tarea, ">", "&gt;")
End Function


Merci Laurent (une fois de plus) et jcm
Modifié par ernstein (21 Aug 2005 - 21:36)
Moi aussi, je tape mes articles en html dans une textarea, j'ai donc le même probleme...

Encoder les caracteres avant de les mettre dans la textarea puis les désencoder avant le passage dans la base de donnée...ya pas plus simple ?

On ne peut pas par exemple faire un <textarea type"text/html"> ? Smiley sweatdrop
Dark elf a écrit :
Encoder les caracteres avant de les mettre dans la textarea puis les désencoder avant le passage dans la base de donnée...ya pas plus simple ?

Pourquoi les "désencoder" ? C'est déjà réalisé du côté du client par le moteur de rendu.
Tu ne veux pas qu'il apparaisse quand ?

Prenons l'exemple d'un code simple :
<p>Ceci est un paragraphe</p>


Pour l'afficher dans le textarea tu lui passes un coup d'htmlspecialchars() et tu envoies donc le code suivant au navigateur du client :
&lt;p&gt;Ceci est un paragraphe&lt;/p&gt;


Ce qui s'affichera (dans le textarea donc) après interprétation ("désencodage") du moteur de rendu :
<p>Ceci est un paragraphe</p>


Et lorsque l'utilisateur soumettra le formulaire c'est bien de l'html "désencodé" que le serveur recevra :
<p>Ceci est un paragraphe</p>
une chose est certaine, si tu dispose d'un serveur d'application (Asp,PHP, Coldfusion ...) tu te fais une petite fonction comme mentionné plus haut pour que la manipe soit tranaparente et rapide quelques soit le nombre de balise à afficher.

J'imagine qu'il est possible de faire ce genre de truc en javascript, mais je n'y comprends rien....
Ou avais je la tête, tu as raison djfeat.
Ernstein, nul besoin de creer sa propre fonction. Les fonctions PHP suffisent, htmlentities ou htmlspecialchars par exemple Smiley murf . Je ne suis pas sur que ta fonction sot plus rapide Smiley ohwell
Dark elf a écrit :
Ernstein, nul besoin de creer sa propre fonction. Les fonctions PHP suffisent, htmlentities ou htmlspecialchars par exemple Smiley murf . Je ne suis pas sur que ta fonction sot plus rapide Smiley ohwell

En PHP oui, mais il n'y a pas d'équivalent à htmlspecialchars() en ASP donc on est obligés de la coder soi-même.
Ha oui, désolé. Je n'avais pas vu qu'il faisait référence à l'ASP.

Bon, pour mettre les choses au clair..
Comment se fait-il que le formulaire envoie le contenu "désencodé" ? Smiley confused Alors que son contenu l'est.. Smiley murf
Ca veut dire que le contenu est interprété ça.. Smiley ohwell

Donc,
textarea <- caracteres encodé
formumlaire soumis -> caracteres automatiquement desencodés, un formulaire est donc toujours interprété même si on envoie directement les données dans une base de donnée.
Modifié par Dark elf (23 Aug 2005 - 11:40)
Dark elf a écrit :
Comment se fait-il que le formulaire envoie le contenu "désencodé" ? Smiley confused Alors que son contenu l'est.. Smiley murf
Ca veut dire que le contenu est interprété ça.. Smiley ohwell

Oui c'est le moteur de rendu qui "désencode", comme ça si l'utilisateur veut envoyer un < il peut, et s'il veut envoyer un &lt; à côté il peut aussi.

Dark elf a écrit :
Donc,
textarea <- caracteres encodé
formumlaire soumis -> caracteres automatiquement desencodés, un formulaire est donc toujours interprété même si on envoie directement les données dans une base de donnée.

Non, ce n'est pas à la soumission du formulaire que le "désencodage" se déroule, mais à l'affichage de celui-ci. À la soumission c'est exactement ce que voit l'utilisateur qui est envoyé.

De toute façon, pour des raisons de sécurité (attaques de type XSS) il est très très fortement conseillé de n'afficher que des données étant passées par une fonction du type htmlspecialchars() dans des éléments de formulaire.

[Ce n'est pas propre aux formulaires cette histoire de "désencodage", si tu veux afficher une esperluette dans un texte tu dois envoyer &amp; et non &]
Dark elf a écrit :
Ou avais je la tête, tu as raison djfeat.
Ernstein, nul besoin de creer sa propre fonction. Les fonctions PHP suffisent, htmlentities ou htmlspecialchars par exemple Smiley murf . Je ne suis pas sur que ta fonction sot plus rapide Smiley ohwell



sauf que je ne code pas en PHP mais en ASP....
Ce qui est envoyé est ce qui apparait dans les champs. Ok Smiley smile

Ernstein > Oui oui, j'ai fini par comprendre Smiley langue , les vacances apparemment, ça me fatigue Smiley lol
Modifié par Dark elf (24 Aug 2005 - 01:48)