[英]Removing accents/diacritics from string while preserving other special chars (tried mb_chars.normalize and iconv)
[英]Standardize a String for Filename, remove accents and special chars
我正在尝试找到一种方法来规范化字符串以将其作为文件名传递。
到目前为止我有这个:
my_string.mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n, '').downcase.gsub(/[^a-z]/, '_')
但第一个问题: - 字符。 我想这种方法存在更多问题。
我不控制名称,名称字符串可以有重音、空格和特殊字符。 我想删除所有这些,用相应的字母('é' => 'e')替换重音,然后用'_'字符替换其余部分。
名字是这样的:
我希望它们像一个没有空格/特殊字符的文件名:
谢谢您的帮助 :)
看一下ActiveSupport::Inflector.transliterate
,处理这种字符问题非常有用。 在那里阅读: ActiveSupport::Inflector
然后,你可以这样做:
ActiveSupport::Inflector.transliterate my_string.downcase.gsub(/\s/,"_")
ActiveStorage::Filename#sanitized
。 如果空格没问题(我建议保留),如果这是用户提供和/或用户可下载的文件,那么您可以使用适用于这种情况的ActiveStorage::Filename#sanitized
方法。
它删除了文件名中不允许的特殊字符,同时保留了用户通常用来很好地组织和描述其文件的所有好字符,如空格和 & 符号 (&)。
ActiveStorage::Filename.new( "Prélèvements - Routine" ).sanitized
#=> "Prélèvements - Routine"
ActiveStorage::Filename.new( "Carnet de santé" ).sanitized
#=> "Carnet de santé"
ActiveStorage::Filename.new( "Foo:Bar / Baz.jpg" ).sanitized
#=> "Foo-Bar - Baz.jpg"
String#parameterize
。 如果您真的想删除所有内容,请尝试String#parameterize
:
"Prélèvements - Routine".parameterize
#=> "prelevements-routine"
"Carnet de santé".parameterize
#=> "carnet-de-sante"
"Foo:Bar / Baz.jpg".parameterize
#=> "foo-bar-baz-jpg"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.