code

Array.join ( "\ n")은 개행 문자와 결합하는 방법이 아니십니까?

codestyles 2020. 12. 7. 08:09
반응형

Array.join ( "\ n")은 개행 문자와 결합하는 방법이 아니십니까?


나는 배열이 ..

[1,2,3,4]

줄 바꿈으로 구분 된 모든 요소를 ​​포함하는 문자열을 원합니다.

1

2

3

4

하지만 내가 시도 [1,2,3,4].join("\n")하면

1\n2\n3\n4

분명한 답이있는 것 같은데 찾을 수가 없어요!


예,하지만 해당 문자열을 인쇄하면 줄 바꿈이 있습니다.

irb(main):001:0> a = (1..4).to_a
=> [1, 2, 3, 4]
irb(main):002:0> a.join("\n")
=> "1\n2\n3\n4"
irb(main):003:0> puts a.join("\n")
1
2
3
4

그래서 그것은 당신이 원하는 것을 달성하는 것처럼 보입니다 (?)


여기서 발생할 수있는 미묘한 오류는 큰 따옴표 대신 작은 따옴표를 사용하는 것입니다. 또한 개행 문자를 \ n으로 렌더링하는 효과가 있습니다. 그래서

puts a.join("\n")   # correct

다음과 같지 않다

puts a.join('\n')   # incorrect

이것이 왜 여기 에 해당되는지에 대한 훌륭한 글이 있습니다 .


ERB 템플릿 에서이 기능을 검색하는 사람이 있다면 다음을 시도하십시오.

(1..5).to_a.join("<br>").html_safe

이것을 또한 시도하십시오 :

puts (1..4).to_a * "\n"

컨텍스트에 따라 ajay가 말한 것처럼 html_safe를 사용하지 않을 수 있습니다. Html 안전은 보안 문제가 될 수 있습니다. 이것은 원래 입력이 실제로 html 안전한지 여부에 따라 다릅니다 . HTML safe는 사용자가 직접 입력 할 때 호출되지 않아야하며 일반적으로보기 전에 호출되어야합니다.

https://bibwild.wordpress.com/2013/12/19/you-never-want-to-call-html_safe-in-a-rails-template/

[아래 댓글에 대한 답변으로 수정 됨]


각 요소를 새 줄에 인쇄하고 싶다면 ..

> a = [1, 2, 3, 4] 
> a.each{|e| puts e}
1
2
3
4
 => [1, 2, 3, 4] 

위의 다른 답변 중 일부가 암시 하듯이 Rails는 html로 렌더링하기 전에 코드를 이스케이프 할 수 있습니다. 다음은이 문제를 해결하는 샘플입니다 (먼저 입력을 삭제 html_safe하여 결과를 "안전하게"호출 할 수 있도록합니다 ).

my_array = [1, 2, 3, 4]
my_array.map{ |i| i.to_s.sanitize }.join("\n").html_safe

sanitize입력을 신뢰하지 않는 경우 에만 필요 합니다.


Use the Enter or Return key on your typing surface. .-.

[1,2,3,4].join("

")

참고URL : https://stackoverflow.com/questions/1448864/array-join-n-not-the-way-to-join-with-a-newline

반응형