Ruby post title to slug
to_slug is a great Rails plugin that handles pretty much everything, including funky characters, but its implementation is very simple. Chuck it onto String and you'll be sorted. Here's the source condensed down:
String.class_eval do
def to_slug
value = self.mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n, '').to_s
value.gsub!(/[']+/, '')
value.gsub!(/\W+/, ' ')
value.strip!
value.downcase!
value.gsub!(' ', '-')
value
end
end
Is this Rails? (works in Sinatra)
string.parameterize
That's it. For even more sophisticated slugging, see ActsAsUrl. It can do the following:
"rock & roll".to_url => "rock-and-roll"
"$12 worth of Ruby power".to_url => "12-dollars-worth-of-ruby-power"
"10% off if you act now".to_url => "10-percent-off-if-you-act-now"
"kick it en Français".to_url => "kick-it-en-francais"
"rock it Español style".to_url => "rock-it-espanol-style"
"tell your readers 你好".to_url => "tell-your-readers-ni-hao"
slug = title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')
downcase
makes it lowercase. The strip
makes sure there is no leading or trailing whitespace. The first gsub
replaces spaces with hyphens. The second gsub
removes all non-alpha non-dash non-underscore characters (note that this set is very close to \W
but includes the dash as well, which is why it's spelled out here).
I've used this gem.It's simple but helpful.
https://rubygems.org/gems/string_helpers