【问题标题】:Unwanted characters - \r \n getting inserted into db - i need to remove them on my view page不需要的字符 - \r \n 被插入到数据库中 - 我需要在我的视图页面上删除它们
【发布时间】:2016-07-11 06:10:43
【问题描述】:

我使用了 html_safe、raw 和 sanitize。但我仍然像\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

【问题讨论】:

  • 这个问题含糊不清。过滤掉\r\n 后,您将永远不会在另一行得到“这个地方废话”。
  • 我可以删除它并用
    替换它。我尝试使用 gsub,但它不适用于 \r 和 \n。
  • 在您的 gsub 评论中定义“不起作用”
  • 您真的在 HTML 页面中看到“\r\n”吗?还是您在 HTML 页面中看到换行符和回车符?
  • 你的数据库中到底有什么?您是否使用数据库查看器/编辑器查看已保存的条目?

标签: ruby-on-rails ruby sanitize html-safe


【解决方案1】:

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

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

例子:

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

这只会替换后跟换行符的回车符,我建议改为替换任何换行符/回车符:

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

如果你想替换为:

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

等等..

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

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

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

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

【讨论】:

  • 描述是一个多行字段,这就是它不起作用的原因。您所说的方式在更小的上下文中运行良好 - 当我只有 2 个字符串由换行符分隔时。
  • 它应该与包含多个换行符的字符串一起使用。如果是,请将答案标记为已接受,如果不是,请说明它是如何失败的。
  • 我的文本区域中有数据,即 @attraction.description = "

    没有比这更好的方式来完成在公园度过美好的一天

    \r\n\r\n

    一个关于友谊和勇气的故事编织在一起,在您离开我们的神奇岛屿后仍将久久萦绕。

    \r\n\r\n

    故事情节:


    \r\n探索新的维度 男孩和女孩会找到真正的友谊吗?\r\n\r\n

    故事还在继续

    " 然后我做@attraction.description.gsub(/ [\r\n]+/,'
    ').html_safe 但它无法显示确切的结果 -
  • 它显示了什么结果?您确实需要了解如何正确获得帮助和/或编写错误报告,您需要准确说明您尝试了什么以及结果是什么,而不仅仅是“失败”或“它不起作用”
  • 非常感谢大卫,它运作良好 :) 非常感谢您的时间和帮助。我会接受你的回答。
【解决方案2】:

希望对您有所帮助:

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

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

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

【讨论】:

  • 抱歉,这不起作用。请参考接受的答案。但是感谢您的时间:)
【解决方案3】:

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

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

因为\rn 一起使用来定义其他字符,所以您首先需要先丢弃它\\ 显示\ 字符。

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

【讨论】:

  • 已修复。谢谢:)
猜你喜欢
  • 1970-01-01
  • 2021-07-13
  • 1970-01-01
  • 2015-02-07
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
相关资源
最近更新 更多