从字符串中删除重音/音调符号,同时保留其他特殊字符(尝试mb_chars.normalize和iconv)

StackOverflow https://stackoverflow.com/questions/522715

有一个非常类似的问题已经 。解决的办法之一使用这样的代码之一:

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”,这将打破参照空字符,并由此打破范围

其他提示

这并不是因为语言Iconv整洁,但是做什么,我想你想要的:

http://snippets.dzone.com/posts/show/2384

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top