Juste un rapide, mais je veux m'assurer que j'attrape les variations multiplateformes.
J'aime convertir les nouvelles lignes entrées dans une zone de texte en une [virgule], afin que la sortie puisse être représentée sur une seule ligne, ma question ...
Actuellement, en envoyant à partir de Google Chrome, lorsque je regarde la valeur, je trouve qu'il utilise \r\n
pour les nouvelles lignes. Si je remplace, \r\n
je sais que cela fonctionnera pour Chrome sur Windows 7, mais qu'en est-il des autres plates-formes, y a-t-il des variations sur ce que les autres navigateurs vont insérer comme nouvelle ligne dans une zone de texte?
Réponses:
Selon les spécifications HTML, les navigateurs sont tenus de canoniser les sauts de ligne dans l'entrée utilisateur dans CR LF (
\r\n
), et je ne pense pas qu'un navigateur se trompe. Référence: clause 17.13.4 Types de contenu de formulaire dans la spécification HTML 4.01.Dans les brouillons HTML5, la situation est plus compliquée, car ils traitent également des processus à l'intérieur d'un navigateur, pas seulement des données qui sont envoyées à un gestionnaire de formulaire côté serveur lorsque le formulaire est soumis. Selon eux (et la pratique du navigateur), la
textarea
valeur de l' élément existe en trois variantes:la source
the user agent should allow the user to edit, insert, and remove text, and to insert and remove line breaks in the form of "LF" (U+000A) characters
.\n
), est probablement ce qui est fourni par «l'API interne». Aucune référence, c'est juste ma base de supposition sur le bon sens.Parler spécifiquement des zones de texte dans les formulaires Web, pour toutes les zones de texte, sur toutes les plates-formes,
\r\n
fonctionnera.Si vous utilisez autre chose, vous causerez des problèmes de copier-coller sur les plates-formes Windows.
Les sauts de ligne seront canonisés par les navigateurs Windows lorsque le formulaire est soumis, mais si vous envoyez le formulaire au navigateur avec des
\n
sauts de ligne, vous constaterez que le texte ne sera pas copié et collé correctement entre, par exemple, le bloc-notes et la zone de texte.Fait intéressant, malgré la convention de fin de ligne Unix
\n
, la norme dans la plupart des protocoles réseau basés sur du texte, y compris HTTP, SMTP, POP3, IMAP, et ainsi de suite est toujours\r\n
. Oui, cela n'a peut-être pas beaucoup de sens, mais c'est l'histoire et l'évolution des normes pour vous!la source
Il semble que, selon la spécification HTML5 , la propriété value de l'élément textarea devrait renvoyer '\ r \ n' pour une nouvelle ligne:
Suivre le lien vers "valeur" indique clairement qu'il fait référence à la propriété value accessible en javascript:
Cependant, dans les cinq principaux navigateurs (sous Windows, 27/11/2015), si '\ r \ n' est écrit dans une zone de texte, le '\ r' est supprimé. (Pour tester: var e = document.createElement ('textarea'); e.value = '\ r \ n'; alert (e.value == '\ n');) Ceci est vrai pour IE depuis la v9. Avant cela, IE retournait '\ r \ n' et convertissait à la fois '\ r' et '\ n' en '\ r \ n' (qui est la spécification HTML5). Alors ... je suis confus.
Pour être sûr, il suffit généralement d'utiliser '\ r? \ N' dans les expressions régulières au lieu de simplement '\ n', mais si la séquence de retour à la ligne doit être connue, un test comme celui ci-dessus peut être effectué dans l'application.
la source
textarea
. 1. Le corps de la requête n'aura que \ r \ n 2. La valeur JS n'aura que \ n que vous utilisiez \ r, \ r \ n ou \ n lors de la saisie. Cela correspond également à votre découverte avec IE9 +. - Line Feed and Carriage Return
Ces entités HTML inséreront une nouvelle ligne ou un retour chariot dans une zone de texte.
la source