[html] 브라우저는 “\ r \ n”또는 “\ n”을 전송합니까? 아니면 브라우저에 따라 달라 집니까?

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

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

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



답변

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

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

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

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


답변

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

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

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


답변