텍스트 영역에서 새 줄을 나타내는 문자


87

간단하지만 교차 플랫폼 변형을 포착하고 있는지 확인하고 싶습니다.

텍스트 영역에 입력 한 새 줄을 [쉼표]로 변환하여 출력을 한 줄로 표현할 수 있도록하고 싶습니다. 제 질문은 ...

현재 Google 크롬에서 보내는 값을 볼 때 \r\n새 줄에 사용 됩니다. 대체하면 \r\nWindows 7의 크롬에서 작동한다는 것을 알고 있지만 다른 플랫폼은 어떻습니까? 다른 브라우저가 텍스트 영역 안에 새 줄로 삽입하는 것에 대한 변형이 있습니까?


3
단순화 : 모든 브라우저는 텍스트 영역에 입력 된 새 줄을 나타 내기 위해 '\ r \ n'만 보내도록합니다 (프로그래밍 방식으로 값을 생성하는 것이 아니라 사용자가 브라우저에서 생성 한 값입니다)
Ninjanoel

답변:


105

HTML 사양에 따라 브라우저는 CR LF에 대한 사용자 입력에서 줄 바꿈을 표준화해야합니다 (\r\n ) , 어떤 브라우저에서도이 문제가 발생한다고 생각하지 않습니다. 참조 : 조항 17.13.4 HTML 4.01 사양의 양식 콘텐츠 유형 .

HTML5 초안에서는 양식이 제출 될 때 서버 측 양식 처리기로 전송되는 데이터뿐만 아니라 브라우저 내부의 프로세스도 처리하기 때문에 상황이 더 복잡합니다. 그들 (및 브라우저 관행)에 따르면textarea 요소 값은 세 가지 변형으로 존재합니다.

  1. 사용자가 입력 한 원시 값, 정규화되지 않음. CR, LF 또는 CR LF 쌍을 포함 할 수 있습니다.
  2. "API 값"이라고하는 내부 값. 여기서 줄 바꿈은 LF (전용)로 정규화됩니다.
  3. 인터넷 규약에 따라 줄 바꿈이 CR LF 쌍으로 정규화되는 제출 값.

4
HTML 5 사양 : 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

고마워, 당신은 내 하루를 만들었습니다! 내가 / 크롬, 브라우저가 CR LF로 보냅니다 .. OSX에 텍스트 영역에서 내용을 보낼 때 때문에 그냥 혼란스러워했다
starikovs

3
또 다른 질문은 왜 텍스트 영역의 ".length"를 얻을 때 CR LF를 한 문자로 계산하지만 서버 측에서 확인하면 (예 : PHP strlen) 두 문자가됩니다 ...
starikovs

2
ComFreek의 링크가 위의 고장 @ 오늘, 사용 : w3.org/TR/html5/forms.html#the-textarea-element
글렌 MAZZA

@starikovs, 나는 이것이 "API 값"이라는 내부 값 으로 응답되었다고 가정합니다 . 여기서 줄 바꿈은 LF (전용)로 정규화됩니다. 부품. 하나의 문자 (즉, \n)로 보는 것은 "내부 API"에서 제공하는 것일 수 있습니다. 참조가 없습니다. 이것은 상식에 대한 내 가정의 기초 일뿐입니다.
user907860

12

모든 플랫폼에서 모든 텍스트 영역에 대해 웹 양식의 텍스트 영역에 대해 구체적으로 이야기 \r\n하면 작동합니다.

다른 것을 사용하면 Windows 플랫폼에서 잘라 내기 및 붙여 넣기에 문제가 발생합니다.

줄 바꿈은 양식이 제출 될 때 Windows 브라우저에 의해 정규화되지만 다음을 사용하여 양식을 브라우저로 보내면 \n 예를 들어 메모장과 텍스트 영역 사이에 텍스트가 올바르게 복사 및 붙여 넣기되지 않음을 알 수 있습니다.

흥미롭게도 Unix 라인 종료 규칙에도 불구하고 \nHTTP, SMTP, POP3, IMAP 등을 포함한 대부분의 텍스트 기반 네트워크 프로토콜의 표준은 여전히 \r\n. 예, 그다지 말이되지 않을 수도 있지만 그것은 여러분을위한 역사이자 진화하는 표준입니다!


6

HTML5 사양 에 따르면 textarea 요소의 value 속성은 개행 문자에 대해 '\ r \ n'을 반환해야합니다.

요소의 은 다음 변환이 적용된 요소의 원시 값으로 정의됩니다.

"LF"(U + 000A) 문자가 뒤 따르지 않는 "CR"(U + 000D) 문자와 "CR"(U + 000A) 문자가 앞에 나오지 않는 모든 "CR"(U + 000A) 문자를 교체합니다. U + 000D) 문자, U + 000D CARRIAGE RETURN "CRLF"(U + 000A) 문자 쌍으로 구성된 2 자 문자열로.

'value'에 대한 링크를 따라 가면 자바 스크립트에서 액세스 한 값 속성을 참조 함을 분명히 알 수 있습니다.

양식 컨트롤에는 값과 검사가 있습니다. (후자는 입력 요소에서만 사용됩니다.) 이들은 사용자가 컨트롤과 상호 작용하는 방법을 설명하는 데 사용됩니다.

그러나 다섯 가지 주요 브라우저 (Windows 사용, 2015 년 11 월 27 일 사용)에서 '\ r \ n'이 텍스트 영역에 기록되면 '\ r'이 제거됩니다. (테스트하려면 : var e = document.createElement ( 'textarea'); e.value = '\ r \ n'; alert (e.value == '\ n');) v9부터 IE에 해당됩니다. 그 전에 IE는 '\ r \ n'을 반환하고 '\ r'과 '\ n'을 모두 '\ r \ n'(HTML5 사양)으로 변환했습니다. 그래서 ... 혼란 스러워요.

안전을 위해 일반적으로 정규 표현식에서 '\ n'대신 '\ r? \ n'을 사용하는 것으로 충분하지만 개행 시퀀스를 알아야하는 경우 앱에서 위와 같은 테스트를 수행 할 수 있습니다.


같은 페이지에서 JS를 통해 얻은 값을 API 값이라고하지 않나요?
Anshul

@Anshul-무슨 뜻인지 알겠습니다. 원래 질문은 "현재, Google 크롬에서 보내는 중입니다. 값을 볼 때 새 줄에 \ r \ n을 사용합니다 ..."이므로 "보냄"이므로 값을 읽은 것 같습니다. 서버. 나는 그것이 JS와 함께 있다고 생각했다. 어쨌든 내가 게시 한 사실이 유용하기를 바랍니다. 귀하의 의견에 감사드립니다.
barncat

@brancat, 여기에서 서버 언어가 중요하지 않다고 생각합니다. HTML5 사양은 textarea. 1. 요청 본문에는 \ r \ n 만 있습니다. 2. JS 값은 입력하는 동안 \ r, \ r \ n 또는 \ n 사용 여부에 관계없이 \ n 만 포함합니다. 또한 IE9 +에서 찾은 결과와 일치합니다.
Anshul 2016-04-23

5

- Line Feed and 
 Carriage Return

이러한 HTML 엔티티 는 텍스트 영역 내부에 새 줄 또는 캐리지 리턴을 삽입합니다.


11
정말 질문에 대답하지 않습니다
cherouvim

2
@cherouvim, 왜이 답변에 투표했는지 이해할 수 없습니까? 위의 질문을 읽었습니까? 아무 것도 이해하지 못한 채 댓글에 대해 실수하지 마세요!
Mahbub 2014

3
@Mahbub :이 답변은 질문에 대한 답변이 아니기 때문에 현재 3 개의 반대표를 받았습니다.
cherouvim

질문에 대답하지 않습니다.
Mike Devenney 2015

1
무엇을 찾고 있었는지 & # 13; 의미하고이 답변이 도움이 되었으니 기분 나쁘지 마세요. 모든 정보는 좋은 정보이며 무작위로 사람들을 도와줍니다. :)
jackrabbithanna
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.