Cette question me dérange depuis un million d'années ... chaque fois que je crée un site Web avec une zone de texte qui autorise le multi-lignes (comme une "Bio" pour le profil d'un utilisateur) je finis toujours par écrire le code paranoïaque suivant:
// C# code sample...
bio = bio.Replace("\r\n", "\n").Replace("\r", "\n");
bio = Regex.Replace(@"\n{2,}", "\n\n");
Alors, qu'est-ce que les navigateurs envoient pour un <textarea name="Bio"></textarea>
s'il a plusieurs lignes?
html
browser
web-standards
line-breaks
Timothy Khouri
la source
la source
<p>
balise.Réponses:
Les spécifications HTTP et MIME spécifient que les lignes d'en-tête doivent se terminer par \ r \ n, mais elles ne sont pas claires (certains diront que ce n'est pas clair si elles sont claires) sur ce qu'il faut faire avec le contenu d'un TEXTAREA. (Voir, par exemple, ce fil de discussion d'un groupe de travail HTML sur le problème.)
Voici une citation de la spécification HTTP / 1.1 sur les en-têtes de message:
Je pense que c'est une bonne stratégie en général: soyez strict sur ce que vous produisez mais libéral dans ce que vous acceptez. Vous devez supposer que vous recevrez toutes sortes de terminateurs de ligne. (Notez qu'en plus de CRLF et LF, Mac OS-9 utilisait CR seul, et il y en a encore quelques-uns autour. La norme Unicode (section 5.8) spécifie une large gamme de séquences de caractères qui devraient être reconnues comme des terminateurs de ligne; il y en a une liste ici .)
la source
textarea
(qui est quelque chose que la spécification, ou au moins la section citée par Ted, ne contraint pas).textarea
ne sont pas envoyés comme champs d'en-tête de message.textarea
s sont encodés dans le corps du message, ce qui est différent.Tous les navigateurs modernes envoient CRLF (
\r\n
). Cependant, ce n'est pas quelque chose qui a été normalisé de manière satisfaisante, donc je considérerais certainement qu'il vaut la peine de normaliser les nouvelles lignes de tout le texte d'entrée multiligne.Lorsque la valeur est lue via JavaScript plutôt que soumise directement à partir d'un formulaire, le comportement du navigateur diffère. IE et Opera retournent des chaînes avec des CRLF dans; Firefox et WebKit renvoient LF. Ainsi, tout formulaire soumis avec l'aide de JavaScript / XMLHttpRequest est susceptible de se présenter sous l'une ou l'autre forme.
la source