Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 文件/文件夹名的字符筛选器无效?(红宝石)_Ruby_Filenames - Fatal编程技术网

Ruby 文件/文件夹名的字符筛选器无效?(红宝石)

Ruby 文件/文件夹名的字符筛选器无效?(红宝石),ruby,filenames,Ruby,Filenames,我的脚本从网络上下载文件,然后以从同一web服务器获取的名称保存它们。我需要一个过滤器/删除Windows NTFS下文件/文件夹名的无效字符 我也很乐意使用多平台过滤器 注意:类似于htmlentities的东西会很好……我认为您最好的选择是文件名上的gsub。我知道您需要删除/替换的内容之一是:正如Geo所说,通过使用gsub,您可以轻松地将所有无效字符转换为有效字符。例如: file_names.map! do |f| f.gsub(/[<invalid characters&g

我的脚本从网络上下载文件,然后以从同一web服务器获取的名称保存它们。我需要一个过滤器/删除Windows NTFS下文件/文件夹名的无效字符

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


注意:类似于
htmlentities
的东西会很好……

我认为您最好的选择是文件名上的
gsub
。我知道您需要删除/替换的内容之一是

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

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

它将所有无效字符替换为下划线。

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

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


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

我猜人类需要查看这些文件。即使他删除了不需要的字符,文件名仍然可能对某人有意义,而ID可能不是。好吧,那么。例如,如果您只打算通过HTTP进一步提供这些文件,则ID是可以的。@liwp:这绝对是一个解决方案。我知道gsub,但不知道是否有任何宝石,甚至跨平台可用。通常情况下,他们中很少有人做任何事情;-)谢谢你的代码。可能是重复的
file_names.map! { |f| f.gsub(/[\x00\/\\:\*\?\"<>\|]/, '_') }
filename_string.gsub(/[^\w\.]/, '_')