C# 将url转换为有效的文件名并返回到url
我需要为我的用户访问的每个站点存储一些独特的信息。 (这实际上是他看过的网站的缩略图。)C# 将url转换为有效的文件名并返回到url,c#,url,filenames,C#,Url,Filenames,我需要为我的用户访问的每个站点存储一些独特的信息。 (这实际上是他看过的网站的缩略图。) 此缩略图(jpeg文件)需要有一个名称,指示它所代表的站点,以便以后可以查看 你能推荐一个从url到有效文件名的简单翻译吗 示例:www.ibm.com可以映射到www\u ibm\u com 我不确定这是否总是适用于所有有效的URL,在某些情况下,URL具有非常复杂的查询字符串。 有好的正则表达式或c#库可以使用吗 首先,值得指出的是,“.”在文件名中完全合法,但“/”不合法,因此,尽管您引用的示例不需要
此缩略图(jpeg文件)需要有一个名称,指示它所代表的站点,以便以后可以查看 你能推荐一个从url到有效文件名的简单翻译吗 示例:
www.ibm.com
可以映射到www\u ibm\u com
我不确定这是否总是适用于所有有效的URL,在某些情况下,URL具有非常复杂的查询字符串。有好的正则表达式或c#库可以使用吗
首先,值得指出的是,“.”在文件名中完全合法,但“/”不合法,因此,尽管您引用的示例不需要翻译,“www.ibm.com/path1/file1.jpg”可以 一个简单的
string.Replace
将是这里最好的解决方案——假设您可以在文件名中找到合法的字符,但在url中找到非法的字符
假设非法URL字符为“§”(在URL中可能是合法的),那么您得到:
string.Replace("/", "§");
要转换为文件名,请执行以下操作:
string.Replace("§", "/");
翻译回来
定义URL的有效、无效和不安全(有效但具有特殊含义)字符。ISO拉丁语集80-FF十六进制(128-255十进制)的“上半部分”中的字符不合法,但在文件名中可以使用
您需要对URL中无效文件名字符集中的每个字符执行此操作。你可以用这个
更新
假设找不到合适的字符对,那么另一种解决方案是使用查找表。一列保存URL,另一列保存生成的文件名。只要生成的名称是唯一的(GUID就可以了),就可以进行双向查找,从一个文件名到另一个文件名。www.ibm.com实际上是一个有效的文件名。更麻烦的是斜杠。因此,如果URL包含子目录,则需要翻译斜杠 那么主要的问题是可能的重复。例如,ibm.com/path1_path2和ibm.com/path1/path2都将转换为相同的值 我喜欢ChrisF的建议,即在文件名中找到一个合法的字符,而不是在url中,尽管我甚至不知道哪一个字符(如果有的话)会出现在我的脑海中
如果找不到这样的字符,则可能需要使用不太可能的字符。@ChrisF-您是否知道哪些合法URL字符在文件名中是非法的?如果我知道名单,我可以用你的方法。知道去哪里找吗?这个方法可能有问题。例如,如果url中仍然存在“.”字符,这是一个有效的文件名字符,那么这可能会导致歧义。最好是选择某种约定,类似于URL的特殊字符如何使用%转换为ASCII值。@Gunner-如果您阅读了我的答案,我指出您需要找到一个合法文件字符,但非法URL的字符。在这种情况下,它不能出现在URL中,因此可以安全地将“/”转换为。你需要对所有非法字符重复。我可以看出,直接翻译可能比我最初计划的要复杂。你对如何将URL与文件名关联并返回URL有什么其他想法吗?@Julian-查找表是最简单的。