2017-11-17 2 views
1

Ich bekomme einige Zeichenfolgen auf menschlich lesbaren Format, und das werden Titel meiner Wordpress Posts sein. Also, um die URL für diesen Beitrag zu generieren, würde ich gerne wissen, ob es eine Methode gibt, um eine Zeichenkette in Ruby zu "urlisieren". Zum Beispiel, wenn ich die Zeichenfolge "Doing einige Tests auf meine кcented string" habe, würde ich gerne "tun-einige-Test-auf-meine-Akzent-Zeichenfolge" oder muss ich meine eigenen schreiben? Danke im Voraus!"URLize" -String in Ruby

+0

Reiner Rubin oder RoR gibt? In jedem Fall lautet das Schlüsselwort zu Google "slug". – mudasobwa

+0

Wenn Sie ActiveSupport verwenden, wird String # parameterize bereitgestellt. Andernfalls müssen Sie Ihre eigenen schreiben, obwohl es nicht zu schwer sein sollte (oder Sie könnten nur ActiveSupport die Implementierung rippen - es ist nur ein paar Zeilen). –

+0

Es ist purer Rubin ... ja, der nervige Teil ist Akzente zu behandeln: /. Danke trotzdem! –

Antwort

1

benutzte ich i18n mich gelegentlich (zB here), aber wenn Sie ein anderes Juwel benötigen möchten Sie nicht noch auch .tr

string_with_special_chars.tr( 
"ÀÁÂÃÄÅàáâãäåĀāĂ㥹ÇçĆćĈĉĊċČčÐðĎďĐđÈÉÊËèéêëĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħÌÍÎÏìíîïĨĩĪīĬĭĮįİıĴĵĶķĸĹĺĻļĽľĿŀŁłÑñŃńŅņŇňʼnŊŋÒÓÔÕÖØòóôõöøŌōŎŏŐőŔŕŖŗŘřŚśŜŝŞşŠšſŢţŤťŦŧÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųŴŵÝýÿŶŷŸŹźŻżŽž", 
"AAAAAAaaaaaaAaAaAaCcCcCcCcCcDdDdDdEEEEeeeeEeEeEeEeEeGgGgGgGgHhHhIIIIiiiiIiIiIiIiIiJjKkkLlLlLlLlLlNnNnNnNnnNnOOOOOOooooooOoOoOoRrRrRrSsSsSsSssTtTtTtUUUUuuuuUuUuUuUuUuUuWwYyyYyYZzZzZz") 
1

Nach einigen Vorschlägen umgesetzt meine eigene Methode:

require 'i18n' 

I18n.config.available_locales = :en 

def urlize(string) 
    I18n.transliterate(string).squeeze.gsub(" ", "-").downcase 
end 

Hope this jemand hilft, vielen Dank für die Hilfe!

+0

Wofür ist der Squeeze? Und für diesen speziellen Anwendungsfall sollten Sie tr anstelle von gsub verwenden. – mwp

+0

@mwp zum Entfernen mehrerer Whitespaces, in nur eine –

+1

umwandeln. Es sieht so aus, als ob ActiveSupport :: Inflector.parameterime das Gleiche tut. Sie können Ihre '.squeeze.gsub ('', '-')' zu einem einzigen '.tr_s ('', '-')' kombinieren, wenn Sie ein paar Zeichen/Operationen rasieren wollen. :) – mwp

1

nicht geben Sie als ziemlich Ergebnisse nutzen könnten, aber

require 'uri' 
URI.escape(string.gsub(/\s+/, ?-) 

Für Ihr Beispiel, das

"Doing-some-test-on-my-%C3%A1ccented-string"