Quale carattere rappresenta una nuova riga in un'area di testo


88

Solo uno veloce, ma voglio assicurarmi di catturare le variazioni multipiattaforma.

Mi piace convertire le nuove righe inserite in un'area di testo in una [virgola], in modo che l'output possa essere rappresentato su una singola riga, la mia domanda ...

Attualmente, inviando da Google Chrome, quando visualizzo il valore, trovo che venga utilizzato \r\nper le nuove righe. Se sostituisco \r\nso che funzionerà per Chrome su Windows 7, ma per quanto riguarda altre piattaforme, ci sono variazioni su ciò che altri browser inseriranno come una nuova riga all'interno di un'area di testo?


3
per semplificare: tutti i browser inviano solo "\ r \ n" per rappresentare una nuova riga inserita in un'area di testo (non sto creando il valore in modo programmatico, è sempre e solo creato dall'utente nel loro browser)
Ninjanoel

Risposte:


106

Secondo le specifiche HTML, i browser sono tenuti a canonizzare le interruzioni di riga nell'input dell'utente a CR LF ( \r\n), e non credo che nessun browser lo sbagli. Riferimento: clausola 17.13.4 Tipi di contenuto del modulo nella specifica HTML 4.01.

Nelle bozze HTML5, la situazione è più complicata, poiché si occupano anche dei processi all'interno di un browser, non solo dei dati che vengono inviati a un gestore di moduli lato server quando il modulo viene inviato. Secondo loro (e la pratica del browser), il textareavalore dell'elemento esiste in tre varianti:

  1. il valore grezzo come inserito dall'utente, non normalizzato; può contenere una coppia CR, LF o CR LF;
  2. il valore interno, chiamato “valore API”, dove le interruzioni di riga sono normalizzate in LF (solo);
  3. il valore di invio, dove le interruzioni di riga sono normalizzate in coppie CR LF, secondo le convenzioni di Internet.

5
HTML 5 spec: w3.org/html/wg/drafts/html/CR/forms.html#the-textarea-element : 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.
ComFreek

Grazie, hai reso la mia giornata! Ero solo confuso perché quando invio contenuti da textarea su osx / chrome, il browser li invia con CR LF ..
starikovs

3
Un'altra domanda è perché quando ottieni ".length" di textarea, conta CR LF come un solo carattere ma quando controlli sul lato server (ad esempio, con PHP strlen) saranno due caratteri ...
starikovs

2
Il link di @ ComFreek qui sopra è interrotto oggi, usa: w3.org/TR/html5/forms.html#the-textarea-element
Glen Mazza

@starikovs, suppongo che a questo sia stato risposto con il valore interno, chiamato "valore API", dove le interruzioni di riga sono normalizzate in LF (solo); parte. Quello che vedi come un carattere (vale a dire \n), è probabilmente ciò che viene fornito dalla "API interna". Nessun riferimento, questa è solo la mia supposizione basata sul buon senso.
Dmitry Koroliov

12

Parlare specificamente di aree di testo nei moduli web, per tutte le aree di testo, su tutte le piattaforme, \r\nfunzionerà.

Se usi qualcos'altro, causerai problemi con taglia e incolla su piattaforme Windows.

Le interruzioni di riga verranno canonizzate dai browser Windows quando il modulo viene inviato, ma se invii il modulo al browser con \ninterruzioni di riga, scoprirai che il testo non verrà copiato e incollato correttamente tra ad esempio il blocco note e la textarea.

È interessante notare che, nonostante la convenzione di fine linea Unix sia \n, lo standard nella maggior parte dei protocolli di rete basati su testo inclusi HTTP, SMTP, POP3, IMAP e così via è ancora \r\n. Sì, potrebbe non avere molto senso, ma per te questa è storia e standard in evoluzione!


7

- Line Feed and 
 Carriage Return

Queste entità HTML inseriranno una nuova riga o un ritorno a capo all'interno di un'area di testo.


11
non risponde davvero alla domanda
cherouvim

2
@cherouvim, non riesco a capire perché hai dato un voto a questa risposta? Hai letto la domanda sopra? Per favore non dare qualche errore di risposta al commento senza capire nulla!
Mahbub

3
@ Mahbub: questa risposta ha attualmente 3 voti negativi perché non risponde alla domanda.
cherouvim

Non risponde alla domanda.
Mike Devenney

1
Beh, stavo cercando cosa & # 13; significava e questa risposta mi ha aiutato, quindi non sentirti male, tutte le informazioni sono buone informazioni e aiutano le persone in momenti casuali :)
jackrabbithanna

6

Sembra che, secondo le specifiche HTML5 , la proprietà value dell'elemento textarea debba restituire '\ r \ n' per una nuova riga:

Il valore dell'elemento è definito come il valore grezzo dell'elemento con la seguente trasformazione applicata:

Sostituisci ogni occorrenza di un carattere "CR" (U + 000D) non seguito da un carattere "LF" (U + 000A) e ogni occorrenza di un carattere "LF" (U + 000A) non preceduto da "CR" ( U + 000D), da una stringa di due caratteri composta da una coppia di caratteri U + 000D CARRIAGE RETURN "CRLF" (U + 000A).

Seguendo il collegamento a "valore" è chiaro che si riferisce alla proprietà del valore a cui si accede in javascript:

I controlli del modulo hanno un valore e una verifica. (Quest'ultimo viene utilizzato solo dagli elementi di input.) Vengono utilizzati per descrivere il modo in cui l'utente interagisce con il controllo.

Tuttavia, in tutti e cinque i principali browser (utilizzando Windows, 27/11/2015), se "\ r \ n" viene scritto in un'area di testo, "\ r" viene rimosso. (Per testare: var e = document.createElement ('textarea'); e.value = '\ r \ n'; alert (e.value == '\ n');) Questo è vero per IE dalla v9. Prima di allora, IE restituiva "\ r \ n" e converteva "\ r" e "\ n" in "\ r \ n" (che è la specifica HTML5). Quindi ... sono confuso.

Per sicurezza, di solito è sufficiente utilizzare "\ r? \ N" nelle espressioni regolari anziché solo "\ n", ma se la sequenza di nuova riga deve essere nota, è possibile eseguire un test come quello sopra riportato nell'app.


Dalla stessa pagina, il valore ottenuto tramite JS non si chiama valore API?
Anshul

@ Anshul - Capisco cosa intendi. La domanda originale era "Attualmente, invio da google chrome, quando visualizzo il valore, trovo che utilizzi \ r \ n per le nuove righe ..." Quindi, poiché viene "inviato", immagino che il valore venga letto il server. Ho pensato che fosse con JS. Ad ogni modo, si spera che i fatti che ho postato siano di qualche utilità. Grazie per il tuo commento.
barncat

@brancat, penso che la lingua del server non dovrebbe avere importanza qui. Le specifiche HTML5 sono molto chiare su 2 cose per un file textarea. 1. Il corpo della richiesta avrà solo \ r \ n 2. Il valore JS avrà solo \ n indipendentemente dal fatto che si utilizzi \ r, \ r \ n o \ n durante la digitazione. Corrisponde anche alla tua scoperta con IE9 +.
Anshul
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.