HTML將HTML轉換成在ROR文字
<p>Hello</p>
<p>this is <br></p>
<p>a <br></p>
<p>test message</p><br>
我已經嘗試 '帶標籤',這給了我下面的輸出: 「Hellothis是一封測試郵件」
輸出I想:
Hello
this is
a
test message
HTML將HTML轉換成在ROR文字
<p>Hello</p>
<p>this is <br></p>
<p>a <br></p>
<p>test message</p><br>
我已經嘗試 '帶標籤',這給了我下面的輸出: 「Hellothis是一封測試郵件」
輸出I想:
Hello
this is
a
test message
html = "<p>Hello</p>
<p>this is <br></p>
<p>a <br></p>
<p>test message</p><br>"
所
strip_tags
幫手似乎很好地工作:
puts ActionController::Base.helpers.strip_tags(html)
# =>
# Hello
# this is
# a
# test message
Nokogiri
默認情況下,在包括滑軌,所以你也可以使用:
doc = Nokogiri::HTML(html)
puts doc.xpath("//text()").to_s
它輸出:
Hello
this is
a
test message
個
如果你想刪除換行符:
ActionController::Base.helpers.strip_tags(html).gsub(/\s+/,' ')
#=> "Hello this is a test message"
準確的結果是什麼? –
請編輯您的問題。 –
的HTML由瀏覽器中呈現,如:
Hello
this is
a
test message
這是不太正確的,但因爲該HTML包含<br>
標籤中的<p>
標籤,該標籤應爲如下字符串:
this is \n\n\n
這通常被認爲是一段加上換行符。但是,瀏覽器在渲染文本時會玩遊戲,以使其更具可讀性,並捕捉空白行和空格。例如,該HTML:
<p>foo</p>
<p></p>
<p></p>
<p></p>
<p>bar</p>
呈現爲:
foo
bar
和:
<p>foo bar</p>
呈現爲:
foo bar
所以,你必須決定你想要使用Nokogiri來渲染文字瀏覽器的可讀性,還是準確地做到這一點?
這並不像瀏覽器:
require 'nokogiri'
doc = Nokogiri::HTML(<<EOT)
<p>Hello</p>
<p>this is <br></p>
<p>a <br></p>
<p>test message</p><br>
EOT
doc.search('br').remove
text = doc.search('p').map { |p| p.text + "\n\n" }
puts text
# >> Hello
# >>
# >> this is
# >>
# >> a
# >>
# >> test message
# >>
它消除了休息,然後轉換通過添加兩個新線的<p>
包含的文本。
準確地做,按標記顯示如何,有一點不同:
doc.search('br').map { |br| br.replace("\n") }
text = doc.search('p').map { |p| p.text + "\n\n" }
puts text
# >> Hello
# >>
# >> this is
# >>
# >>
# >> a
# >>
# >>
# >> test message
# >>
這是做它讓你開始的只是一種簡化的方式。 Rails在ActionView的simple_format
方法中與此相反。
瀏覽器有更多的規則用於確定何時以及如何顯示文本及其渲染可以受CSS和JavaScript影響,這些文本不一定會翻譯爲文本,尤其是純文本。
字符串後使用html_safe。 –
試圖讓它返回相同的字符串!我想要一個文本,同時去除HTML,並在新行上顯示段落 – Dom
你的問題是什麼? – sawa