0

已经创建了记录,比如

Company "Life"

如何为物种制作这个记录

сompany-life

我使用了参数化,但它变成了:

company-quot-life-quot 

据我了解,.gsub(""", "")不适合实施,因为要创建太大的异常列表

有没有办法以原始格式记录?(稍后参数化)

提前致谢!

4

4 回答 4

1

这是一种非 Rails 方法:

require 'cgi'

str = 'Company "Life"'

puts CGI.unescape_html(str).gsub(/"/, '').gsub(/\s+/, '-').downcase

# => company-life

和一个纯正则表达式解决方案:

puts str.gsub(/&\w+;/, '').gsub(/\s+/, '-').downcase
# => company-life

如果你在 Rails 中(感谢@nzifnab):

str.gsub(/&\w+;/, '').parameterize
于 2012-12-12T21:02:08.630 回答
0

正如@meager 所说,您一开始不应该将 html 编码的实体存储在数据库中,它是如何进入数据库的"?理论上这会起作用:

class Page < ActiveRecord::Base
  before_validation :unescape_entities

  private
  def unescape_entities
    self.name = CGI.unescape_html(name)
  end
end

但是我仍然很好奇如何name首先使用 html 实体到达那里。你的动作/形式是什么样的?

于 2012-12-12T21:14:24.160 回答
-1
"Company &quot;Life&quot;".html_safe.parameterize
于 2012-12-12T21:00:03.113 回答
-1
"Company &quot;Life&quot;".gsub(/&[^;]+;/, "-").parameterize.downcase
# => "company-life"

首先,gsub 摆脱了 html 实体,然后 parameterize 摆脱了除 Ascii 字母数字之外的所有实体(并用破折号替换它们),然后是小写。请注意,“_”也将被保留,如果您不喜欢它们,gsub('_', '-')则需要另一个。

于 2012-12-12T21:06:04.460 回答