2012-09-10 107 views
3

我想清除英文或阿拉伯字符串中的特殊字符。例如,下例中的“ - ”是一个特殊字符,显示“?”当转换为UTF-8时。Rails:CLEAN来自英文或阿拉伯文的特殊字符串

文件名:1-Mechanical Drawings – Part 1应该像1-Mechanical Drawings Part 1

السلطات العراقية تعلنé应该是السلطات العراقية تعلن,其中é是特殊字符,应从字符串中删除。

+0

你能更具体地说明你如何定义一个特殊字符吗?什么使'é'和'-'特别? – georgebrock

+0

当然。我需要在上传之前清理文件名称。我正在使用纸夹的transliterate_file_name。它的工作正常。问题是当我运行以下gsub来清理文件名时。它清理得很好,但不会清理特殊字符。 “1-Mechanical Drawings - Part 1 should like like 1-Mechanical Drawings Part 1”.squeeze(“”).gsub('','_')。gsub(/ \ W /,'')。downcase 我的应用程序支持不同语言的文件名 – Kashif

+0

请检查http://stackoverflow.com/questions/1268289/how-to-get-rid-of-non-ascii-characters-in-ruby –

回答

0

这在一定程度上重新发明轮子,但你可以做这样的事情,让你在这个问题想你说的输出:

def clean_file name 
    result = File.basename(name,".*") 
    result.gsub!(/[é–]\s?/,'') 
    result 
end 

与你感受到人物[]内更换位不在像电子等文件名合适的但要注意两点:

  • 使用黑名单方法和上面可能意味着你离开的字符,你不希望 - 这是比较正常的使用像\ W白名单的方式来捕获所有非字字符,至少在1.9以上的红宝石工作,但也许是什么意思在1.8上遇到问题
  • 在名称中留下空格可能会导致问题,因此至少应该删除“”和“小写”。
相关问题