如何从包含HTML内容的字符串中删除空格

时间:2015-05-19 06:54:54

标签: ruby-on-rails ruby

我可以轻松地在正常字符串的左侧剥去空白区域,如下所示:

"     Remove whitespace".lstrip #=> "Remove whitespace"

但如果字符串包含HTML,我无法做到:

@html_str = "<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Remove whitespace &nbsp;</p>"
@html_safe_str = @html_str.html_safe #=> "     Remove whitespace"
@html_safe_str.lstrip #=> "<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Remove whitespace</p>"

@html_str.html_safe.lstrip无效。

我不想删除字符串中的所有&nbsp;。我想在打开&nbsp;代码

后立即删除所有<p>

预期结果:"Remove whitespace &nbsp;"

怎么可能?

5 个答案:

答案 0 :(得分:2)

在Rails 4中,strip_tags已与gsub合并。您可以使用gsub删除&nbsp;。然后,您需要使用sanitizer提供的ActionView方法:

@html_str = "<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Remove whitespace &nbsp;</p>"
str = @html_str.gsub(/<p>\s*(&nbsp;\s*)+/, "<p>")
ActionView::Base.full_sanitizer.sanitize(str).lstrip # => "Remove whitespace &nbsp;"

它适用于Rails 3以及Rails 4。

答案 1 :(得分:1)

你可以这样做:

@html_str = "<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Remove whitespace</p>"

@html_str = @html_str.gsub("&nbsp;", "") => "<p>    Remove whitespace</p>"

@html_str1 = ActionController::Base.helpers.strip_tags(@html_str) => "    Remove whitespace" #if you are doing this at controller level

@html_str1 = strip_tags(@html_str) => "    Remove whitespace"  #if you are doing this at view level

#now at the last 

@html_str2 = @html_str1.strip => "Remove whitespace"

不久:

@html_str = "<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Remove whitespace</p>"

@html_str1 = ActionController::Base.helpers.strip_tags(@html_str.gsub("&nbsp;", "")).strip => "Remove whitespace"

希望这对你有用

答案 2 :(得分:0)

如果html_safe&nbsp;转换为空格,您可以尝试:

@html_str.html_safe.lstrip

希望有所帮助!

答案 3 :(得分:0)

您可以gsub使用

@html_str = "<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Remove whitespace</p>"
@html_str = @html_str.gsub("&nbsp;", "")
@html_safe_str = @html_str.html_safe

如果您完全想删除标签,那么就像Andrey建议的那样,您可以使用strip_tags,但要在控制器中使用它,您需要使用ActionController::Base

进行调用
@html_str = ActionController::Base.helpers.strip_tags("<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Remove whitespace</p>").gsub("&nbsp;", "").lstrip

将输出:Remove whitespace

希望这有帮助!

答案 4 :(得分:-1)

你可以这样做:

ActionController::Base.helpers.strip_tags(@html_str.html_safe).gsub("&nbsp;","").lstrip
# => "Remove whitespace"