从字符串中删除重音/音调符号,同时保留其他特殊字符(尝试mb_chars.normalize和iconv)
-
22-08-2019 - |
题
有一个非常类似的问题已经 。解决的办法之一使用这样的代码之一:
string.mb_chars.normalize(:kd).gsub(/[^x00-\x7F]/n, '').to_s
,直到你发现它也会删除空格,点,划,谁知道还有什么。
这能创造奇迹,我真的不知道第一个代码是如何工作的,但可以把它进行剥离的只有的口音?或者至少是被赋予字符的列表保存?我的正则表达式的知识是小,但我试图(没有效果):
/[^\-x00-\x7F]/n # So it would leave the dash alone
我即将做这样的事情:
string.mb_chars.normalize(:kd).gsub('-', '__DASH__').gsub
(/[^x00-\x7F]/n, '').gsub('__DASH__', '-').to_s
残暴?是...
我也试着:
iconv = Iconv.new('UTF-8', 'US-ASCII//TRANSLIT') # Also tried ISO-8859-1
iconv.iconv 'Café' # Throws an error: Iconv::IllegalSequence: "é"
帮助吗?
解决方案
这也消除空间,点,划,谁知道还有什么。
它不应该
string.mb_chars.normalize(:kd).gsub(/[^x00-\x7F]/n, '').to_s
您输入了错误,应该有一个反斜杠X00之前,指的NULL字符。
/[^\-x00-\x7F]/n # So it would leave the dash alone
您已经把“ - ”。在“\”之间的“x”,这将打破参照空字符,并由此打破范围
其他提示
我使用transliterate
方法。请参见 http://api.rubyonrails.org/classes/ActiveSupport/ Inflector.html#方法-I-音译
这并不是因为语言Iconv整洁,但是做什么,我想你想要的:
不隶属于 StackOverflow