Essa questão me incomoda há um milhão de anos ... sempre que crio um site com uma área de texto que permite várias linhas (como uma "Biografia" para o perfil de um usuário), sempre acabo escrevendo o seguinte código paranóico:
// C# code sample...
bio = bio.Replace("\r\n", "\n").Replace("\r", "\n");
bio = Regex.Replace(@"\n{2,}", "\n\n");
Então, o que os navegadores enviam para um <textarea name="Bio"></textarea>
se ele tiver várias linhas?
html
browser
web-standards
line-breaks
Timothy Khouri
fonte
fonte
<p>
tag.Respostas:
As especificações HTTP e MIME especificam que as linhas de cabeçalho devem terminar com \ r \ n, mas não são claras (alguns diriam que não é claro se forem claras) sobre o que fazer com o conteúdo de uma TEXTAREA. (Veja, por exemplo, este tópico de um grupo de trabalho de HTML sobre o assunto.)
Aqui está uma citação da especificação HTTP / 1.1 sobre cabeçalhos de mensagens:
Acho que é uma boa estratégia em geral: seja rigoroso com o que você produz, mas liberal no que você aceita. Você deve assumir que receberá todos os tipos de terminadores de linha. (Observe que, além de CRLF e LF, o Mac OS-9 usava CR sozinho e ainda existem alguns por aí. O padrão Unicode (seção 5.8) especifica uma ampla gama de sequências de caracteres que devem ser reconhecidas como terminadores de linha; há uma lista deles aqui .)
fonte
textarea
(que é algo que a especificação, ou pelo menos a seção citada de Ted, não restringe).textarea
s não são enviados como campos de cabeçalho de mensagem.textarea
s são codificados no corpo da mensagem, que é diferente.Todos os navegadores modernos enviam CRLF (
\r\n
). No entanto, isso não é algo que foi padronizado de forma satisfatória, então eu definitivamente consideraria que vale a pena normalizar as novas linhas de todos os textos de entrada de várias linhas.Quando o valor é lido por meio de JavaScript em vez de ser enviado diretamente de um formulário, o comportamento do navegador difere. O IE e o Opera retornam strings com CRLFs; Firefox e WebKit retornam LF. Portanto, qualquer formulário enviado com a ajuda de JavaScript / XMLHttpRequest provavelmente virá em qualquer um dos formatos.
fonte