将url转换为有效的文件名并返回到url

我需要存储一些对我的用户访问的每个站点唯一的信息。 (它实际上是他查看过的网站的缩略图。)
此缩略图(jpeg文件)需要有一个名称,指明它代表的网站,以便稍后查看。

你能推荐从url到有效文件名的简单翻译吗?

示例: www.ibm.com可以映射到www_ibm_com

在某些情况下,我不确定这将始终适用于所有有效url。url具有非常复杂的查询字符串。

是否有可以使用的正则表达式或c#库?

提前谢谢,并感到高兴。

首先,值得指出的是“。” 在文件名中是完全合法的,但“/”不是,所以虽然你引用的例子不需要翻译,“www.ibm.com/path1/file1.jpg”会。

一个简单的string.Replace在这里是最好的解决方案 – 假设您可以找到一个在文件名中合法但在URL中非法的字符。

假设非法URL字符是“§”(在URL中可能是合法的),那么您已经:

 string.Replace("/", "§"); 

转换为文件名和:

 string.Replace("§", "/"); 

翻译回来。

URL编码上的此页面定义了URLS的有效,无效和不安全(有效但具有特殊含义)字符。 ISO-Latin集合80-FFhex(128-255十进制)的“上半部分”中的字符不合法,但文件名中可能没有问题。

您需要对URL中的每个字符执行此操作,该字符位于无效文件名字符集中。 您可以使用GetInvalidFileNameChars获取此GetInvalidFileNameChars

UPDATE

假设您找不到合适的字符对,那么另一种解决方案就是使用查找表。 一列保存URL,另一列保存生成的文件名。 只要生成的名称是唯一的(GUID就可以),您可以执行双向查找以从一个到另一个。

http://www.ibm.com实际上是一个有效的文件名。 更有问题的是斜线。 因此,如果URL包含子目录,则需要翻译斜杠。

那么主要的问题是可能重复。 例如,ibm.com/path1_path2和ibm.com/path1/path2都会转换为相同的值。

我喜欢ChrisF的建议,即找到一个在文件名中合法但在URL中不合法的字符,尽管我甚至不知道哪个字符(如果有的话)不在我的头脑中。

如果你没有找到这样的角色,那么你可能需要坚持使用一个不太可能的角色。