已创建记录,例如
Company "Life"
如何对物种进行记录
сompany-life
我使用了参数化,但它变成了:
company-quot-life-quot
据我了解,.gsub(""", "")
不适合实现,因为要创建过多的异常列表
是否有办法以原始格式录制? (以便稍后参数化)
提前感谢!
答案 0 :(得分: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
答案 1 :(得分: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实体进入那里。你的行动/形式是什么样的?
答案 2 :(得分:-1)
"Company "Life"".html_safe.parameterize
答案 3 :(得分:-1)
"Company "Life"".gsub(/&[^;]+;/, "-").parameterize.downcase
# => "company-life"
首先,gsub摆脱了html实体,然后参数化除了Ascii字母数字(并用短划线替换它们)之外的所有部分,然后是downcase。请注意,“_”也会保留,如果您不喜欢,则需要另外gsub('_', '-')
。