Pregunta

Estoy intentando crear enlace permanente como el comportamiento de algunos títulos de los artículos y que no quiero añadir un nuevo campo para la db enlace permanente. Así que me decidí a escribir un ayudante que convertirá mi título artículo de:

" O "focoasa" un Cruciada pornit, împotriva barbatilor zgârciti " para  " o-focoasa-a-pornit-Cruciada-împotriva-barbatilor-zgarciti ".

Mientras me di cuenta de cómo sustituir los espacios con guiones y eliminar otros caracteres especiales (que no sea -) usando:

title.gsub(/\s/, "-").gsub(/[^\w-]/, '').downcase

Me gustaría saber si hay alguna otra manera de reemplazar un carácter con un otro carácter específico de la única llamada al método .gsub uno, por lo que no tendrá que title.gsub cadena de métodos ( "a", "A") para todos los caracteres UTF-8 especiales de mi localización.

Yo estaba pensando en la construcción de un hash con todos los caracteres especiales y sus homólogos, pero no he descubierto aún cómo utilizar las variables con las expresiones regulares.

Lo que estaba buscando es algo como:

title.gsub(/\s/, "-").gsub(*replace character goes here*).gsub(/[^\w-]/, '').downcase

Gracias!

¿Fue útil?

Solución

Me resuelto esto en mi aplicación utilizando el href="https://rubygems.org/gems/unidecoder" rel="nofollow noreferrer"> Unidecoder gema

require 'unidecode'

def uninternationalize(str)
  Unidecoder.decode(str).gsub("[?]", "").gsub(/`/, "'").strip
end

Otros consejos

Si desea solamente transliterate de un personaje a otro, puede utilizar el método String#tr que hace exactamente lo mismo que el comando tr Unix: reemplazar todos los personajes en la primera lista con el carácter en la misma posición en la segunda lista:

'Ünicöde'.tr('ÄäÖöÜüß', 'AaOoUus') # => "Unicode"

Sin embargo, estoy de acuerdo con @ Daniel Vandersluis: probablemente sería una buena idea de utilizar alguna biblioteca especializada. Cosas como esta puede ser muy tedioso, muy rápido. Además, muchos de esos personajes en realidad tienen transcripciones estandarizados (A ? AE, o ? oe, ..., ß ? ss), y los usuarios pueden estar esperando a tener las transcripciones sean correctas (Desde luego, no me gusta ser llamado Jorg - si realmente debe, puede llamarme Joerg pero mucho prefieren Jörg) y si usted tiene una biblioteca que le proporciona las transcripciones, por qué no usarlos? Tenga en cuenta que hay una gran cantidad de transcripciones que no son caracteres individuales y por lo tanto no se puede utilizar con String#tr de todos modos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top