Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Échappement html et javascript

2 réponses
Avatar
Yliur
Bonjour

Je tâchais de soigneusement appliquer l'échappement javascript puis
html dans les pages que je génère (avec un programme).

Et en fait ça n'a pas l'air tout à fait correct : j'ai l'impression que
dans la balise <script> il ne faut pas faire les échappements html.
Après être tombé dessus par hasard j'ai fait un essai sur une page toute
simple et on dirait bien que les échappements html sont en trop dans
une balise <script>. par exemple cette page m'affiche une boîte de
dialogue avec "&amp;" écrit dedans au démarrage mais une boîte avec
"&" quand je clique sur le champ de saisie :

<html>
<head>
</head>
<body>
<input type="text" onClick="javascript:alert ('&amp;') ;" />
<script>
alert ('&amp;') ;
</script>
</body>
</html>

A priori dans mes pages ça fonctionne comme ça : dans le code html à
proprement parler (par exemple le code d'un événement sur un champ de
saisie) je dois appliquer les échappements js puis html, mais dans la
balise <script> seulement les échappements js. Testé avec Firefox
seulement.

Est-ce que quelqu'un peut confirmer/infirmer ça ? C'est normal, c'est
écrit dans une norme quelque part ?

Merci

Yliur

2 réponses

Avatar
Paul Gaborit
À (at) Tue, 7 Jul 2015 09:05:22 +0200,
Yliur écrivait (wrote):

A priori dans mes pages ça fonctionne comme ça : dans le code html à
proprement parler (par exemple le code d'un événement sur un champ de
saisie) je dois appliquer les échappements js puis html, mais dans la
balise <script> seulement les échappements js. Testé avec Firefox
seulement.

Est-ce que quelqu'un peut confirmer/infirmer ça ? C'est normal, c'est
écrit dans une norme quelque part ?



C'est normal... Et c'est expliqué et détaillé dans les recommandations
HTML5 (cf. section 4.11.1.2).

Pour HTML4, le contenu d'un élément "script" est de type CDATA. Ce type
est décrit par :

Le type CDATA représente une séquence de caractères, issus du jeu
de caractère du document, qui peut inclure des entités de
caractères. Les agents utilisateurs devraient interpréter les
valeurs d'attributs ainsi :
- remplacer les entités de caractères par les caractères
correspondants ;
- ignorer les sauts de ligne ;
- remplacer chaque retour chariot ou tabulation par un espace
simple.

Mais un peu plus loin, on trouve :

Bien que les éléments STYLE et SCRIPT utilisent le type « CDATA »
pour leur modèle de données, les agents utilisateurs doivent
interpréter différemment le type CDATA pour ceux-ci. Le balisage et
les entités doivent être traités comme du texte brut et passés tel
quel à l'application. La première occurence de la séquence de
caractères « </ » (délimiteur d'ouverture de balise fermante) est
traitée comme terminant la fin du contenu de l'élément. Dans les
documents valides, ce serait la balise fermante de l'élément.


--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/&gt;
Avatar
Yliur
Le Tue, 07 Jul 2015 11:26:41 +0200
Paul Gaborit a écrit :


À (at) Tue, 7 Jul 2015 09:05:22 +0200,
Yliur écrivait (wrote):

> A priori dans mes pages ça fonctionne comme ça : dans le code html à
> proprement parler (par exemple le code d'un événement sur un champ
> de saisie) je dois appliquer les échappements js puis html, mais
> dans la balise <script> seulement les échappements js. Testé avec
> Firefox seulement.
>
> Est-ce que quelqu'un peut confirmer/infirmer ça ? C'est normal,
> c'est écrit dans une norme quelque part ?

C'est normal... Et c'est expliqué et détaillé dans les recommandations
HTML5 (cf. section 4.11.1.2).

Pour HTML4, le contenu d'un élément "script" est de type CDATA. Ce
type est décrit par :

Le type CDATA représente une séquence de caractères, issus du jeu
de caractère du document, qui peut inclure des entités de
caractères. Les agents utilisateurs devraient interpréter les
valeurs d'attributs ainsi :
- remplacer les entités de caractères par les caractères
correspondants ;
- ignorer les sauts de ligne ;
- remplacer chaque retour chariot ou tabulation par un espace
simple.

Mais un peu plus loin, on trouve :

Bien que les éléments STYLE et SCRIPT utilisent le type « CDATA »
pour leur modèle de données, les agents utilisateurs doivent
interpréter différemment le type CDATA pour ceux-ci. Le balisage
et les entités doivent être traités comme du texte brut et passés tel
quel à l'application. La première occurence de la séquence de
caractères « </ » (délimiteur d'ouverture de balise fermante) est
traitée comme terminant la fin du contenu de l'élément. Dans les
documents valides, ce serait la balise fermante de l'élément.



D'accord, je vais creuser tout ça. Merci pour les références.