我的脚本从网络下载文件,然后将它们保存在与相同网站获取的名称相同的位置。我需要一个能够过滤或删除Windows NTFS下无效字符的文件/文件夹名称的过滤器。如果有多平台过滤器就更好了。
注:类似于
注:类似于
htmlentities
的东西会很棒...就像 Geo 说的那样,通过使用 gsub
函数,您可以轻松地将所有无效字符转换为有效字符。例如:
file_names.map! do |f|
f.gsub(/[<invalid characters>]/, '_')
end
您需要将文件名中不允许的所有可能字符替换为<invalid characters>
,这些字符在您的文件系统上是不允许的。在上面的代码中,每个无效字符都被替换为_
。
Wikipedia告诉我们,以下字符在NTFS上不允许使用:
(大于)
因此,您的gsub
调用可能像这样:
file_names.map! { |f| f.gsub(/[\x00\/\\:\*\?\"<>\|]/, '_') }
它将所有无效字符替换为下划线。
filename_string.gsub(/[^\w\.]/, '_')
说明:将除单词字符(字母、数字、下划线)和点号之外的所有内容替换掉。
gsub
函数。其中一件你需要删除/替换的内容是:
。我不知道你计划如何后续使用这些文件,但最可靠的解决方案是将原始文件名保存在数据库表中(或以其他方式序列化哈希),并根据您(或数据库)生成的唯一ID命名物理文件。
另外,此方法的另一个优点是您无需担心具有相同名称(或过滤为相同名称的不同名称)的文件。