En développant une validation côté serveur, j'ai découvert que (les dernières versions Windows en date d'écriture de) Firefox, Chrome et Internet Explorer gèrent les caractères de tabulation verticale différemment dans les champs de formulaire input type=text
.
J'ai eu beaucoup de difficulté à coller le caractère dans l'un des navigateurs. J'ai donc utilisé JavaScript pour renseigner le texte saisi sur mon formulaire de test de la manière suivante:
document.getElementById('theField').setAttribute('value', "hello\vthere");
Vous pouvez voir certaines des différences côté client dans ceci JSFiddle .
Il y a des différences dans la façon dont les navigateurs:
<pre>
Ce tableau ci-dessous montre ce que j'ai trouvé:
Browser | displayed | put into pre-tag | logged to console | received by server
------------------------------------------------------------------------------------
Chrome | hello | hellothere | hellothere | hello
------------------------------------------------------------------------------------
Safari | hello | hellothere | hellothere | hello
------------------------------------------------------------------------------------
Firefox | hellothere | hellothere | hellothere | hello
FF cont. | | | | there
------------------------------------------------------------------------------------
IE | hello there | hello there | hello | hello
IE cont. | | | there | there
------------------------------------------------------------------------------------
Opera | hellothere | hello | hello | hello
Op cont. | | there | there | there
Pour la console, j'ai utilisé les outils de développement intégrés à chaque navigateur (je ne pouvais pas faire fonctionner JSFiddle avec Firebug).
Existe-t-il une spécification sur la manière dont les navigateurs sont supposés gérer ce caractère dans ce type de champ de formulaire? Si oui, quelle est la spécification et quel navigateur la suit?
Réponse mise à jour
tkent, un développeur de chrome qui s’est efforcé de résoudre le problème de troncature des valeurs de son navigateur, a trouvé les spécifications du WHATWG indiquant que l’onglet vertical (U + 000B) est légal et ne doit pas être modifié dans divers contextes. Le type d'entrée = texte est pertinent pour cette question:
Les caractères VT sont dans "Tout le reste". Il est ajouté tel quel à une valeur d'attribut.
Ce qui précède est extrait de son commentaire original sur le suivi des émissions de chrome.
Réponse originale Je n'ai pas trouvé de spécification HTML ou HTTP qui interdit spécifiquement la tabulation verticale dans les valeurs d'entrée de formulaire. Mais sur la base d'informations indirectes Firefox, I.E. et Opera semblent plus corrects.
La valeur d'entrée peut être considérée comme une valeur d'attribut d'élément, auquel cas elle entre dans la définition d'une valeur d'attribut. Le brouillon des spécifications HTML5. indique que valeurs d'attribut "sont un mélange de références de texte et de caractères, sauf que le texte ne peut pas contenir d'esperluette ambiguë."
Leurs définitions de " text " et " références de caractères " n'excluent pas spécifiquement l'onglet vertical. D'après mes lectures, cela suggère que c'est autorisé.
En outre, les développeurs de chrome ont convenu que c'est un problème et travaillent pour le résoudre.
Je dirais que le caractère de tabulation verticale est l'un des caractères d'espacement classiques ASCII (Unicode, par exemple, en connaît un peu plus), de sorte que HTML devrait le "réduire" à un seul espace en texte normal (white-space: normal
).
A partir d'une session en ligne de commande Python:
>>> import string
>>> string.whitespace
'\t\n\x0b\x0c\r '
>>> string.whitespace == '\t\n\v\f\r '
True
>>> map(ord, '\t\n\v\f\r ')
[9, 10, 11, 12, 13, 32]
Les navigateurs peuvent ne pas savoir quoi faire à propos de l'onglet vertical ('\ v') car il est rarement utilisé de nos jours; Je pense que cela avait plus d'importance à l'époque des imprimantes non graphiques avec des jeux de caractères à largeur fixe. Mais il s’agit d’un caractère juridique (même s’il n’est pas facile à saisir, ce qui est vrai aussi pour le caractère de tabulation "normal" dans les formulaires Web), il doit donc être stocké et transmis comme n'importe quel autre.