Supprimer les accents / signes diacritiques de la chaîne tout en préservant les autres caractères spéciaux (essayé mb_chars.normalize et iconv)
Il y a une très question similaire déjà. L'une des solutions utilise un code comme celui-ci:
string.mb_chars.normalize(:kd).gsub(/[^x00-\x7F]/n, '').to_s
Qui fonctionne à merveille, jusqu'à ce qu'il supprime également des espaces, des points, des tirets, et qui sait quoi d'autre.
Je ne suis pas vraiment sûr de savoir comment le premier code fonctionne, mais pourrait-il en être faite à la bande seulement accents? Ou à tout le moins, être donné une liste de caractères à conserver? Ma connaissance des expressions régulières est petit, mais j'ai essayé (en vain):
/[^\-x00-\x7F]/n # So it would leave the dash alone
Je suis sur le point de faire quelque chose comme ceci:
string.mb_chars.normalize(:kd).gsub('-', '__DASH__').gsub
(/[^x00-\x7F]/n, '').gsub('__DASH__', '-').to_s
Atroce? Oui...
J'ai aussi essayé:
iconv = Iconv.new('UTF-8', 'US-ASCII//TRANSLIT') # Also tried ISO-8859-1
iconv.iconv 'Café' # Throws an error: Iconv::IllegalSequence: "é"
Aider s'il vous plaît?
source d'informationauteur Ivan
Vous devez vous connecter pour publier un commentaire.
Il ne devrait pas.
Vous avez fait une faute de frappe, il devrait y avoir une barre oblique inverse avant la x00, pour désigner le caractère NUL.
Vous ai mis le ‘-’ entre le ‘\’ et le ‘x’, ce qui va casser la référence au caractère nul, et ainsi briser la gamme.
J'utiliserais
transliterate
méthode. Voir http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-transliterateIl n'est pas aussi soigné que Iconv, mais est ce que je pense que vous voulez:
http://snippets.dzone.com/posts/show/2384