不需要的字符 - \r \n 被插入到数据库中 - 我需要在我的视图页面上删除它们

Unwanted characters - \r \n getting inserted into db - i need to remove them on my view page

我用了 html_safe,生的,也消毒过。但我仍然使用 \r \n 这样的字符 — 这是因为当我在描述字段中输入数据时,我在 Mac 中使用 "return/enter" 键转到下一行 - 这是 textarea .在我的视图页面中有没有办法避免这些。

实际结果 -

\r\ntext text text text text text

\r\n\r\n

this place is famous for blah blah blah

预期结果-

text text text text text text

this place is famous for blah blah blah

您的选择是在将字符插入数据库之前去除字符,或者在视图中去除它们。

无论哪种方式,您都可以使用 gsub 执行此操作 - 您上面的评论表明您使用 gsub 不当(请记住 post 您在问题中尝试过的内容以及结果!)

示例:

@attraction.description.gsub(/\r\n/,'')

这只会替换回车符 return 后跟换行符,我建议替换任何 newline/carriage returns:

@attraction.description.gsub(/[\r\n]/,'')

如果要替换为:

@attraction.description.gsub(/[\r\n]+/,'<br />').html_safe

等等..

另一方面,如果您确实在输出中看到文本“\r\n”,那么您已经以某种方式将回车符 return 和换行符转换为它们的 "typable"对应物,可能在存储它们之前使用 str.inspect 之类的调用?

如果是这样,那么您要替换的不是回车 return 和换行符,而是字符串“\r”和“\n”,例如:

@attraction.description.gsub(/\[rn]/,'').html_safe

(您将正则表达式放在 gsub 的引号中,使其成为字符串比较而不是正则表达式)

希望对您有所帮助:

    %{ Multi-line
   string }.squish                   # => "Multi-line string"

" foo   bar    \n   \t   boo".squish # => "foo bar boo"

http://apidock.com/rails/String/squish

好吧,我已经在线测试了这个,而不是在我的 ruby 中,所以不知道它是否有效 %100。但是从我读到的。您的代码将 \r\n\ 保存为文本,您的预期答案不应显示它们,因此您必须 运行 以下命令:

x.gsub(/[\r\n]/,'')

因为\r&n一起使用来定义其他字符所以你首先需要先丢弃它\显示\字符.

  • \n表示“\n”字符串
  • \n表示换行