브라우저는 "\ r \ n"또는 "\ n"을 전송합니까? 아니면 브라우저에 따라 달라 집니까?


102

이 질문은 수백만 년 동안 저를 괴롭 혔습니다. 여러 줄을 허용하는 텍스트 영역 (예 : 사용자 프로필의 "Bio")이있는 웹 사이트를 만들 때마다 항상 다음과 같은 편집증 코드를 작성합니다.

// C# code sample...
bio = bio.Replace("\r\n", "\n").Replace("\r", "\n");
bio = Regex.Replace(@"\n{2,}", "\n\n");

그렇다면 브라우저 <textarea name="Bio"></textarea>는 여러 줄이 있는 경우 무엇을 보낼 까요?


와우,이 질문은 전혀 관심을 끌지 못할 이상한 질문이라고 생각했습니다.하지만 1 시간에 16 표를 얻었습니다.
Timothy Khouri 2011 년

그것에 대해 생각 해보니 이것과 관련된 문제를 본 적이 없습니다. 누군가가 줄 바꿈을 입력하면 모든 OS, MySQL 클라이언트, 브라우저 등에서 줄 바꿈으로 표시됩니다. 이는 대부분의 소프트웨어가 문제에 대해 어느 정도 일관되게 적용된다는 것을 의미합니다. 물론 중요한 일을하려면 항상 정상화합니다.
Halil Özgür 2011-06-13

"\ r \ n"에 의존하고 사용자의 Bio의 "HTML 형식"버전을 빌드하고 "\ r \ n"을 실행하지 않았기 때문에 문제가 발생했습니다. 하나의 <p>태그.
Timothy Khouri 2011-06-13

답변:


50

HTTPMIME 사양은 헤더 행은 \ 연구 \ n로 끝나야합니다 지정,하지만 그들은 TEXTAREA의 내용으로 수행 할 작업에 대한 (일부는 그들이 명확한 경우는 취소되지 않는다는 주장) 명확하지 않다. (예를 들어 문제에 대한 HTML 작업 그룹 의이 스레드 를 참조하십시오 .)

다음은 메시지 헤더에 대한 HTTP / 1.1 사양의 인용문입니다.

메시지 헤더 필드의 행 종결자는 시퀀스 CRLF입니다. 그러나 애플리케이션은 이러한 헤더를 구문 분석 할 때 단일 LF를 줄 종결 자로 인식하고 선행 CR을 무시하는 것이 좋습니다.

나는 그것이 일반적으로 좋은 전략이라고 생각합니다. 당신이 생산하는 것에 대해서는 엄격하지만 받아들이는 것에 대해서는 자유로 워야합니다. 모든 종류의 줄 종결자를받을 것이라고 가정해야합니다. (CRLF 및 LF 외에도 Mac OS-9는 CR 만 사용했으며 여전히 일부가 있습니다. 유니 코드 표준 (섹션 5.8)은 줄 종결 자로 인식되어야하는 광범위한 문자 시퀀스를 지정합니다. 여기 에 그 목록이 있습니다 .)


6
사양이 텍스트 영역이 생성하는 내용을 지정한다고 생각하지 않습니다.
Mark Thomas

2
@Will : 원래 질문을 다시 읽으십시오. 구체적으로 브라우저가 a의 내용을 인코딩하는 방법에 대해 묻습니다 textarea(사양 또는 적어도 Ted의 인용 섹션이 제한하지 않는 것).
John Bartholomew

2
@ 마크-당신 말이 맞아요. 다양한 포럼에서 그 문제에 대한 끝없는 논쟁이 있습니다. (참조 1995 년부터이 스레드를 하는 HTML 워킹 그룹에서.
테드 Hopp

2
이 답변은 수정해야합니다. HTTP 사양을 인용하는 것으로 시작하지만 텍스트 영역과 관련이 없습니다.
DuckMaestro 2011-06-12

2
나는 그랬지만 대답은 여전히 ​​HTTP를 인용하는 것으로 시작하는데, 이것은 언급한다면 강조하기에는 잘못된 사양이다. 포함 된 인용문은 "메시지 헤더 필드"를 구체적으로 다루지 만 textarea메시지 헤더 필드로 전송되지 않습니다. textareas는 다른 메시지 본문으로 인코딩됩니다.
DuckMaestro 2011 년

30

<textarea></textarea>여러 줄이 있는 경우 브라우저는 무엇을 전송 합니까?

모든 최신 브라우저는 CRLF ( \r\n)를 보냅니다 . 그러나 이것은 만족스럽게 표준화 된 것이 아니므로 모든 여러 줄 입력 텍스트의 줄 바꿈을 정규화하는 것이 가치가 있다고 생각합니다.

값을 양식에서 직접 제출하지 않고 JavaScript를 통해 읽을 때 브라우저 동작이 다릅니다. IE와 Opera는 CRLF가있는 문자열을 반환합니다. Firefox 및 WebKit은 LF를 반환합니다. 따라서 JavaScript / XMLHttpRequest 도움말과 함께 제출되는 모든 양식은 두 가지 양식으로 제공 될 수 있습니다.


JavaScript는 플랫폼의 특정 브라우저에서 일관되게 작동합니까? (예를 들어, Windows에서 LF, 맥, 모바일 플랫폼과 파이어 폭스 반환 문자열을합니까?)
테드 Hopp

1
@Ted :이 동작은 Firefox, Opera 및 WebKit의 플랫폼간에 일관됩니다. IE5 / Mac 지금은 오래 전에 테스트하지 않았지만 그 브라우저는 IE5 / Win과 많은 차이점이 있습니다.
bobince 2011-06-14
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.