developer tip

Rails — 텍스트 영역에 줄 바꿈 추가

copycodes 2020. 11. 22. 19:56
반응형

Rails — 텍스트 영역에 줄 바꿈 추가


모델에 몇 단락의 텍스트를 입력 할 수있는 레일스 앱이 있습니다. 문제는 줄 바꿈을 입력하는 방법을 모른다는 것입니다.

"{ln} {/ ln}; {& nbsp} 및 {br} {/ br}"을 추가하려고했지만 html 만 텍스트로 표시되고 중단없이 표시됩니다.

어쨌든 텍스트 영역 컨트롤이 모델 항목 내에 배치 한 html을 사용하도록 설정할 수 있습니까?

레일이 인식 할 수 있도록 입력 할 수있는 항목이 있습니까? 여기에 선을 넣으십시오.


문제는 나중에 렌더링하는 것만 큼 값을 편집하는 것이 아닙니다. 텍스트 영역에서 편집하는 동안 값에 개행 문자를 추가하려면 리턴 키를 누르십시오. 나중에 해당 값을 다시 편집 할 때 공백이 그대로 있어야합니다.

공백을 렌더링하는 것은 까다로운 부분입니다. HTML에서 공백은 일반적으로 중요하지 않습니다. 브라우저에서 사용하는 것과 같은 렌더러는 연속적인 공백 문자열에 대해 단일 공백을 표시합니다. 따라서 단순히 값을 페이지에 덤프하는 것만으로는 충분하지 않습니다.

<%= obj.description %>

귀하의 값이라고해도 "One \t \n \n Two"화면에는 "One Two".

새 줄 문자가 표시 될 때 실제로 줄을 구분하도록하려면 렌더링하기 전에 해당 줄을 HTML로 변환해야합니다.

<%= obj.description.gsub(/\n/, '<br/>') %>

물론 사용자가 HTML에 포함될 데이터를 입력하는 경우 값을 이스케이프하여 XSS 로부터 보호해야합니다 . 새 줄만 지원해야하는 경우 다음과 같이 간단해야합니다.

<%= h(obj.description).gsub(/\n/, '<br/>') %>

더 복잡한 포맷을 허용하려면 MarkdownTextile을 살펴보십시오 (둘 다 Rails가 도우미보기 방법을 제공함). XSS 예방을 위해 제공하는 지원이 있는지 조사하십시오.


텍스트 영역의 줄 바꿈은`\ n '으로 생성됩니다. 그러나 문제는 단순히 뷰에 덤프하면 HTML 소스에서 줄 바꿈이된다는 것입니다.

Rails simple_format도우미를 사용 하여이 중 일부를 처리해 볼 수 있습니다. http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#M002285

줄 바꿈을 HTML 태그로 자동 변환합니다. 와 같이 사용할 수 있습니다 <%= simple_format(my_text_field) %>.


사용자 입력을 수정하지 않고 CSS에 추가하십시오.

white-space: pre-line;

사용자 입력에 \ r 또는 \ n (입력)이 새 줄로 표시됩니다.


다음은 텍스트의 나머지 부분을 이스케이프하면서 문자열에 줄 바꿈을 표시하는 또 다른 방법입니다.

<%= safe_join(@object.textarea_input.split("\r\n"), "<br />".html_safe) %>

여기를 참조하십시오 http://code.byteblues.com/2012/03/23/preloading-a-text-input-area-text_area-with-data-that-contains-a-line-break/

<%=raw text_area_tag :keywords, keywords, :rows => 8 %>

문제 simple_format<b><i><hr><h1>... 와 같은 다른 태그도 추가한다는 것입니다. 다른 태그
없이 줄 바꿈을 원하면 부분적으로 빌드하는 것이 좋습니다 (line_break라고 부릅니다).

<% text.split("\n").each do |t| %>
  <%= t %><br>
<% end %>

그런 다음보기에서 호출하십시오.

<%= render partial: 'line_break', locals: {text: some_text} %>

어떤 버전의 레일을 사용하고 있습니까 ?? 이를 처리하는 방법이 레일 2와 3에서 다르기 때문입니다.

레코드의 가치가 "foo<br />bar"

Rails 3에서는 html을 평가하고 싶다면 할 수 있습니다. 그렇게 <%=raw "foo<br />bar" %>한다면 뷰를 볼 때 줄 바꿈이 생깁니다.

Rails 2에서는 그렇게 할 필요가 없습니다. <%= "foo<br />bar" %>

또한 HTML은 어쨌든 텍스트 영역에서 평가되지 않습니다.


\n 기억력이 좋다면 (오늘은 잘 안되네요 ... 스스로 위험을 감수 해보세요 ㅋㅋ)

편집 : textarea간단한 출력 인 경우 에 대해 이야기하고 있다고 가정하면 다음을 사용하십시오.<br>


위의 답변은 좋았습니다.

  • gsub(@Ian는) 잘 작동
  • simple_format@Aaron는, 포장의 모든 일을 지적 (@Karl는) 맨 위에 조금 있었다<p>

그래서 다음과 같이 조정했습니다.

simple_format(value, {}, wrapper_tag: 'div')

다른 답변은 잘못되었습니다.
TEXTAREA 요소의 innerHTML 값은 HTML을 렌더링하지 않으므로 텍스트 영역은 줄 바꿈으로 렌더링되지 않습니다.

라인 피드 HTML 엔티티를 추가해야합니다. &#10;

예:

<textarea><%= "LINE 1&#10;LINE 2&#10;LINE 3".html_safe %></textarea>

텍스트 영역의 새 줄 참조 -Stack Overflow


단순히보기에 문자열을 표시하는 경우. 그런 다음 시도해보십시오

< p >This is my text< / p >< br />

참고URL : https://stackoverflow.com/questions/3137393/rails-add-a-line-break-into-a-text-area

반응형