web-dev-qa-db-fra.com

Quel caractère représente une nouvelle ligne dans une zone de texte

Juste un rapide, mais je veux être sûr d’attraper les variations entre les plates-formes.

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 vois la valeur, je découvre 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, existe-t-il des variantes de ce que les autres navigateurs inséreront comme nouvelle ligne dans une zone de texte?

71
Nnoel

Selon les spécifications HTML, les navigateurs sont tenus de canoniser les sauts de ligne dans les entrées utilisateur de 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 dans un navigateur, pas seulement des données envoyées à un gestionnaire de formulaire côté serveur lors de la soumission du formulaire. Selon eux (et dans la pratique du navigateur), la valeur de l'élément textarea existe sous trois variantes:

  1. la valeur brute entrée par l'utilisateur, non normalisée; il peut contenir CR, LF ou CR LF pair;
  2. la valeur interne, appelée "valeur API", où les sauts de ligne sont normalisés à LF (seulement));
  3. la valeur de soumission, où les sauts de ligne sont normalisés à CR LF paires), conformément aux conventions Internet.
90
Jukka K. Korpela

Parlant spécifiquement de textareas dans les formulaires Web, pour tous les textareas, sur toutes les plateformes, \r\n marchera.

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 lors de l'envoi du formulaire, mais si vous envoyez le formulaire au navigateur avec \n _ linebreaks, 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 textuels, notamment HTTP, SMTP, POP3, IMAP, etc., est toujours \r\n. Oui, cela n'a peut-être pas beaucoup de sens, mais c'est l'histoire et les normes en évolution pour vous!

11
Ben

- Line Feed and 
 Carriage Return

Ces entités HTML inséreront une nouvelle ligne ou un retour à la ligne dans une zone de texte.

7
Damodar Das

Il semble que, selon spécifications HTML5 , la propriété value de l'élément textarea devrait renvoyer '\ r\n' pour une nouvelle ligne:

La valeur valeur de l'élément est définie comme étant la valeur brute de l'élément avec la transformation suivante appliquée:

Remplacez chaque occurrence d'un caractère "CR" (U + 000D) non suivi d'un caractère "LF" (U + 000A) et chaque occurrence d'un caractère "LF" (U + 000A) non précédée d'un "CR" ( U + 000D), par une chaîne de deux caractères consistant en une paire de caractères U + 000D RETOUR TRANSPORT "CRLF" (U + 000A).

Suivre le lien vers 'valeur' ​​indique clairement qu'il fait référence à la propriété value consultée en javascript:

Les contrôles de formulaire ont une valeur et une vérification. (Ce dernier n'est utilisé que par les éléments en entrée.) Ceux-ci sont utilisés pour décrire la manière dont l'utilisateur interagit avec le contrôle.

Toutefois, dans les cinq principaux navigateurs (sous Windows, le 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 de IE depuis la version 9. Auparavant, IE retournait '\ r\n' et convertissait '\ r' et '\ n' en '\ r\n' (qui est la spécification HTML5). Donc ... je suis confus.

Pour être sûr, il suffit généralement d'utiliser '\ r?\N' dans les expressions rationnelles au lieu de '\ n', mais si la séquence de nouvelle ligne doit être connue, un test comme celui-ci peut être effectué dans l'application.

5
barncat