Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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
C# 将url转换为有效的文件名并返回到url_C#_Url_Filenames - Fatal编程技术网

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-查找表是最简单的。