我的脚本从网上下载文件,然后将它们保存在从同一个Web服务器获取的名称下。对于Windows NTFS下的文件/文件夹名称,我需要过滤器 /卸载无效字符。
我也很乐意使用多平台过滤器。
注意:像htmlentities
这样的东西会很棒......
答案 0 :(得分:21)
就像Geo所说,通过使用gsub
,您可以轻松地将所有无效字符转换为有效字符。例如:
file_names.map! do |f|
f.gsub(/[<invalid characters>]/, '_')
end
您需要将<invalid characters>
替换为您的文件名可能包含在文件系统中不允许的所有可能字符。在上面的代码中,每个无效字符都替换为_
。
Wikipedia告诉我们NTFS上不允许使用以下字符:
(大于)
所以你的gsub
电话可能是这样的:
file_names.map! { |f| f.gsub(/[\x00\/\\:\*\?\"<>\|]/, '_') }
用下划线替换所有无效字符。
答案 1 :(得分:14)
filename_string.gsub(/[^\w\.]/, '_')
说明: 替换除字符 (字母,数字,下划线)和以外的所有内容点强>
答案 2 :(得分:0)
我认为您最好的选择是gsub
文件名。我知道你需要删除/替换的一件事是:
。
答案 3 :(得分:0)
我不知道您打算如何在以后使用这些文件,但最可靠的解决方案是将原始文件名保存在db表(或其他序列化哈希)中,并在唯一ID之后命名物理文件你(或数据库)生成的。
PS此方法的另一个优点是您不必担心具有相同名称的文件(或过滤到相同名称的不同名称)。