已经创建了记录,比如
Company "Life"
如何为物种制作这个记录
сompany-life
我使用了参数化,但它变成了:
company-quot-life-quot
据我了解,.gsub(""", "")
不适合实施,因为要创建太大的异常列表
有没有办法以原始格式记录?(稍后参数化)
提前致谢!
已经创建了记录,比如
Company "Life"
如何为物种制作这个记录
сompany-life
我使用了参数化,但它变成了:
company-quot-life-quot
据我了解,.gsub(""", "")
不适合实施,因为要创建太大的异常列表
有没有办法以原始格式记录?(稍后参数化)
提前致谢!
这是一种非 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
正如@meager 所说,您一开始不应该将 html 编码的实体存储在数据库中,它是如何进入数据库的"
?理论上这会起作用:
class Page < ActiveRecord::Base
before_validation :unescape_entities
private
def unescape_entities
self.name = CGI.unescape_html(name)
end
end
但是我仍然很好奇如何name
首先使用 html 实体到达那里。你的动作/形式是什么样的?
"Company "Life"".html_safe.parameterize
"Company "Life"".gsub(/&[^;]+;/, "-").parameterize.downcase
# => "company-life"
首先,gsub 摆脱了 html 实体,然后 parameterize 摆脱了除 Ascii 字母数字之外的所有实体(并用破折号替换它们),然后是小写。请注意,“_”也将被保留,如果您不喜欢它们,gsub('_', '-')
则需要另一个。