Qual caractere representa uma nova linha em uma área de texto


87

Apenas um rápido, mas quero ter certeza de que estou capturando variações de plataforma cruzada.

Eu gosto de converter novas linhas inseridas em uma área de texto em uma [vírgula], para que a saída possa ser representada em uma única linha, minha pergunta ...

Atualmente, enviando do google chrome, quando vejo o valor, acho que usa \r\npara novas linhas. Se eu substituir \r\n, sei que funcionará com o Chrome no Windows 7, mas e em outras plataformas, há variações no que outros navegadores irão inserir como uma nova linha dentro de uma área de texto?


3
para simplificar: todos os navegadores sempre enviam '\ r \ n' para representar uma nova linha inserida em uma área de texto (não estou criando o valor programaticamente, ele só é criado pelo usuário em seu navegador)
Ninjanoel

Respostas:


105

Pelas especificações HTML, os navegadores são obrigados a canonizar as quebras de linha na entrada do usuário para CR LF ( \r\n), e não acho que nenhum navegador se engane. Referência: cláusula 17.13.4 Tipos de conteúdo do formulário na especificação HTML 4.01.

Em rascunhos HTML5, a situação é mais complicada, já que eles também lidam com os processos dentro de um navegador, não apenas com os dados que são enviados para um manipulador de formulários do lado do servidor quando o formulário é enviado. De acordo com eles (e a prática do navegador), o textareavalor do elemento existe em três variantes:

  1. o valor bruto inserido pelo usuário, não normalizado; pode conter o par CR, LF ou CR LF;
  2. o valor interno, denominado “valor API”, onde as quebras de linha são normalizadas para LF (apenas);
  3. o valor de envio, onde as quebras de linha são normalizadas para pares CR LF, de acordo com as convenções da Internet.

4
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 de

Obrigado, você fez meu dia! Eu estava confuso porque quando eu envio conteúdo de textarea no osx / chrome, o navegador o envia com CR LF ..
starikovs

3
Outra questão é por que quando você obtém ".length" de textarea, ele conta CR LF como apenas um caractere, mas quando você verifica no lado do servidor (por exemplo, com PHP strlen) serão dois caracteres ...
starikovs

2
O link de @ ComFreek acima está quebrado hoje, use: w3.org/TR/html5/forms.html#the-textarea-element
Glen Mazza

@starikovs, suponho que isso tenha sido respondido com o valor interno, chamado “valor API”, onde as quebras de linha são normalizadas para LF (apenas); parte. O que você vê como um caractere (a saber \n) é provavelmente o que é fornecido pela "API interna". Nenhuma referência, esta é apenas minha base de suposição no bom senso.
user907860

12

Falar especificamente sobre textareas em formulários da web, para todas as textareas, em todas as plataformas, \r\nfuncionará.

Se você usar qualquer outra coisa, poderá causar problemas com recortar e colar nas plataformas Windows.

As quebras de linha serão canonizadas pelos navegadores do Windows quando o formulário for enviado, mas se você enviar o formulário para o navegador com \nquebras de linha, verá que o texto não será copiado e colado corretamente entre, por exemplo, o bloco de notas e a área de texto.

Curiosamente, apesar de ser a convenção de fim de linha do Unix \n, o padrão na maioria dos protocolos de rede baseados em texto, incluindo HTTP, SMTP, POP3, IMAP e assim por diante, ainda é \r\n. Sim, pode não fazer muito sentido, mas isso é história e padrões em evolução para você!


6

Parece que, de acordo com as especificações do HTML5 , a propriedade value do elemento textarea deve retornar '\ r \ n' para uma nova linha:

O valor do elemento é definido como o valor bruto do elemento com a seguinte transformação aplicada:

Substitua todas as ocorrências de um caractere "CR" (U + 000D) não seguido por um caractere "LF" (U + 000A) e todas as ocorrências de um caractere "LF" (U + 000A) não precedido por um "CR" ( U + 000D) caractere, por uma cadeia de dois caracteres que consiste em um par de caracteres U + 000D CARRIAGE RETURN "CRLF" (U + 000A).

Seguir o link para 'valor' deixa claro que se refere à propriedade de valor acessada em javascript:

Os controles de formulário têm um valor e uma verificação. (O último é usado apenas por elementos de entrada.) Eles são usados ​​para descrever como o usuário interage com o controle.

No entanto, em todos os cinco navegadores principais (usando Windows, 27/11/2015), se '\ r \ n' for escrito em uma área de texto, o '\ r' será removido. (Para testar: var e = document.createElement ('textarea'); e.value = '\ r \ n'; alert (e.value == '\ n');) Isso é verdade para o IE desde a v9. Antes disso, o IE estava retornando '\ r \ n' e convertendo '\ r' e '\ n' em '\ r \ n' (que é a especificação HTML5). Então ... estou confuso.

Por segurança, geralmente é suficiente usar '\ r? \ N' em expressões regulares em vez de apenas '\ n', mas se a sequência de nova linha deve ser conhecida, um teste como o acima pode ser executado no aplicativo.


Na mesma página, o valor obtido por meio de JS não é chamado de valor de API?
Anshul

@Anshul - entendo o que você quer dizer. A pergunta original era "Atualmente, enviando do google chrome, quando vejo o valor, acho que usa \ r \ n para novas linhas ..." Portanto, como está sendo "enviado", acho que o valor está sendo lido o servidor. Presumi que fosse com JS. De qualquer forma, espero que os fatos que postei sejam de alguma utilidade. Obrigado por seu comentário.
barncat de

@brancat, acho que o idioma do servidor não deveria importar aqui. As especificações do HTML5 são muito claras em 2 coisas para a textarea. 1. O corpo da solicitação terá apenas \ r \ n 2. O valor JS terá apenas \ n, independentemente de você usar \ r, \ r \ n ou \ n ao digitar. Também corresponde à sua descoberta com o IE9 +.
Anshul

5

- Line Feed and 
 Carriage Return

Essas entidades HTML irão inserir uma nova linha ou retorno de carro dentro de uma área de texto.


11
realmente não responde à pergunta
cherouvim

2
@cherouvim, não consigo entender por que você votou nesta resposta? Você leu a pergunta acima? Por favor, não dê uma resposta errada de comentário sem entender nada!
Mahbub

3
@Mahbub: Esta resposta tem atualmente 3 votos negativos porque não responde à pergunta.
Cherouvim

Não responde à pergunta.
Mike Devenney

1
Bem, eu estava procurando o que & # 13; quis dizer e essa resposta me ajudou, então não se sinta mal, todas as informações são boas informações e ajudam as pessoas em momentos aleatórios :)
jackrabbithanna
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.