文件/文件夹名称的无效字符过滤器? (红宝石)

时间:2010-02-16 04:28:43

标签: ruby filenames

我的脚本从网上下载文件,然后将它们保存在从同一个Web服务器获取的名称下。对于Windows NTFS下的文件/文件夹名称,我需要过滤器 /卸载无效字符

我也很乐意使用多平台过滤器。

注意:像htmlentities这样的东西会很棒......

4 个答案:

答案 0 :(得分:21)

就像Geo所说,通过使用gsub,您可以轻松地将所有无效字符转换为有效字符。例如:

file_names.map! do |f|
  f.gsub(/[<invalid characters>]/, '_')
end

您需要将<invalid characters>替换为您的文件名可能包含在文件系统中不允许的所有可能字符。在上面的代码中,每个无效字符都替换为_

Wikipedia告诉我们NTFS上不允许使用以下字符:

  • U + 0000(NUL)
  • /(斜杠)
  • \(反斜杠)
  • :(冒号)
  • *(星号)
  • ? (问号)
  • “(引用)
  • &LT; (小于)
  •   

    (大于)

  • | (管道)

所以你的gsub电话可能是这样的:

file_names.map! { |f| f.gsub(/[\x00\/\\:\*\?\"<>\|]/, '_') }

用下划线替换所有无效字符。

答案 1 :(得分:14)

filename_string.gsub(/[^\w\.]/, '_')

说明: 替换除字符 (字母,数字,下划线)以外的所有内容点

答案 2 :(得分:0)

我认为您最好的选择是gsub文件名。我知道你需要删除/替换的一件事是:

答案 3 :(得分:0)

我不知道您打算如何在以后使用这些文件,但最可靠的解决方案是将原始文件名保存在db表(或其他序列化哈希)中,并在唯一ID之后命名物理文件你(或数据库)生成的。

PS此方法的另一个优点是您不必担心具有相同名称的文件(或过滤到相同名称的不同名称)。