是否可以使用NSString并将其转换为安全版本,可以将其用作文件名以保存到iPhone上的用户文档目录。
我现在正在做这样的事情:
NSString *inputString = @"This is sample text which may have funny chars and spaces in.";
NSInteger len = [inputString length];
NSString *newFilename = [[inputString substringToIndex:MIN(20, len)] stringByAppendingPathExtension:@"txt"];
这让我有了类似的东西:
This is sample text .txt
需要确保文件名中不允许使用的字符并将其删除。
答案 0 :(得分:5)
你可能会得到一些正则表达式或其他东西。仅仅因为使用except
- 过滤器太危险了(你可能会错过一些非法的字符)。
因此我建议您使用RegexKitLite(http://regexkit.sourceforge.net/RegexKitLite/),并结合以下代码行:
inputString = [inputString stringByReplacingOccurencesOfRegex:@"([^A-Za-z0-9]*)" withString:@""];
这将替换除A-Z,a-z和0-9 =)之外的所有字符!
答案 1 :(得分:3)
你也可以用老式的方式来做,而不是使用正则表达式:
NSString* SanitizeFilename(NSString* filename)
{
NSMutableString* stripped = [NSMutableString stringWithCapacity:filename.length];
for (int t = 0; t < filename.length; ++t)
{
unichar c = [filename characterAtIndex:t];
// Only allow a-z, A-Z, 0-9, space, -
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')
|| (c >= '0' && c <= '9') || c == ' ' || c == '-')
[stripped appendFormat:@"%c", c];
else
[stripped appendString:@"_"];
}
// No empty spaces at the beginning or end of the path name (also no dots
// at the end); that messes up the Windows file system.
return [stripped stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}
答案 2 :(得分:-1)
如果您真正需要的是一个安全随机的文件名,那么只需使用SecRandomCopyBytes到您想要的长度并对其进行base64编码。