XHTML 1.0을 유효하게 유지하면서 Textarea 필드에서 라인 브레이크를 추가 할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/755944

문제

편집하다: 내 게시물을 다시 읽은 후 나는 문제가 무엇인지 조금 불분명하다고 생각합니다. 다시 제가 다시 시도하겠습니다.

사용자는 양식의 TextArea 필드를 사용하여 내 사이트에 의견을 남길 수 있습니다. 주석에 라인 브레이크를 추가 할 수 있어야합니다. <br />. 그런 다음 주석은 MySQL-Database (안전하기 위해 탈출)에 문자열로 저장되고 나중에 데이터베이스에서 검색되어 사이트에 표시됩니다. 주석이 표시되면 일반 라인 브레이크가 인식되지 않습니다.

사용자는 자신의 의견을 편집 할 수 있으며,이 경우 원본 주석이 TextArea 필드에 표시 될 수정됩니다 (아래 이미지 참조). 문제는 어떤 것이 있다면 <br /> 현재, 코드는 XHTML 1.0으로 유효하지 않습니다 (아래 오류 메시지 참조).

다른 유형의 라인 브레이크를 사용하여 코드를 유효하게 만들 수 있습니까? 주석에 명시된 바와 같이, XML : Space = "Preserve"와 함께 정기적 인 라인 브레이크가 작동하지 않습니다 (Textarea 필드에는 줄 브레이크가 표시되지만 주석이 사이트의 일반 텍스트로 표시 될 때는 그렇지 않습니다).


원래 질문 :

댓글을 남기기위한 TextArea 필드가 포함 된 웹 형식이 있으며 사용 사용 라인 브레이크를 추가 할 수 있기를 원합니다. <br />. 아래는 간단한 예입니다.

screen dump
(원천: Shipit.se)

의도 된대로 작동하지만 W3C 유효성 검사 서비스를 사용할 때 XHTML 1.0 과도기로 유효성이 없습니다. 이것은 내가 얻는 오류입니다.

  1. 오류 줄 90, 열 1587 : 문서 유형은 여기에서 요소 "br"을 허용하지 않습니다.

…ription" rows="0" cols="0">Test<br />line break</textarea></dd><dt class="cha

위에서 지명 된 요소는 허용되지 않는 상황에서 발견되었습니다. 이는 내부 "헤드"대신 "바디"섹션의 "스타일"요소와 같은 중첩 요소 또는 겹치는 두 가지 요소 (허용되지 않음)를 잘못 중첩 한 요소를 의미 할 수 있습니다.

이 오류의 일반적인 원인 중 하나는 HTML 문서에서 XHTML 구문을 사용하기 때문입니다. HTML의 암시 적으로 폐쇄 된 요소 규칙으로 인해이 오류로 인해 계단식 효과가 발생할 수 있습니다. 예를 들어, HTML 문서의 "헤드"섹션에서 "메타"및 "링크"에 대한 XHTML의 "자체 폐쇄"태그를 사용하면 구문 분석기가 "헤드"섹션의 끝과 "본문의 시작을 유추 할 수 있습니다. "섹션 ("링크 "및"메타 "가 허용되지 않으며보고 된 오류).

라인이 유효한 코드를 유효한 코드로 만들 수있는 방법이 있습니까, 아니면 해결 방법을 찾아야합니까 (예 : Textarea 필드에서 라인 브레이크에 특정 태그를 사용한 다음 대체하는 것과 같은 방법이 있습니까? <br /> 나중에 주석을 표시 할 때)?

도움이 되었습니까?

해결책

로부터 DTD:

<!ELEMENT TEXTAREA - - (#PCDATA) -- multi-line text field -->

귀하의 페이지의 XHTML 코드에서 a <textarea> 텍스트 만 포함 할 수 있습니다 (#PCDATA), 그리고 당신은 <textarea>.

당신의 질문은 두 가지 다른 것을 보여주는 것 같습니다. 이미지가 "<br />"a <textarea>, W3C Validator의 메시지가 <br /> 페이지 내에서 귀하의 페이지의 XHTML에 작성된 요소 <textarea> 요소.

첫 번째 경우에는 "Test<br />line break"텍스트 영역의 사용자에게 나타나는 것은 적절한 엔티티를 사용하여 수행됩니다. Altcognito 썼다 :

<textarea>Test&lt;br /&gt;line break</textarea>

사용자가 입력 한 모든 것은 <textarea> 새 페이지에서 인코딩해야합니다 (즉, 엔티티를 사용하십시오. &, ", ', <, 그리고 >).

사용자의 항목을 표시하려면 :

테스트<br />줄 바꿈

...처럼...

테스트
줄 바꿈

... 다른 텍스트 영역 내에서 원본에 입력 한 것을 구문 분석해야합니다. <textarea> 그리고 사용자 입력을 교체하십시오 <br />정상적인 선이 끊어진 s. Lucero의 대답을 참조하십시오.

다른 팁

추가 해 보셨습니까? xml:space="preserve" 속성과 일반 정상 선 파단 만 사용합니까?

일반 라인 브레이크를 사용하지 않는 이유는 무엇입니까? 그게 잘 작동합니다.

네가 원한다면 <br /> 나타나려면 해당 엔티티를 인코딩해야합니다.

&lt;br /&gt;

나는 방금 이것을했다.

<textarea name="contenidoMensaje" id="contenidoMensaje" cols="80" rows="10">
-----Mensaje Original-----
{blank space}
<?php echo str_replace("<br />", "\n", $contenidoMensaje); ?>
</textarea>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top