我需要存储一些对我的用户访问的每个站点唯一的信息。
(它实际上是他所看过的网站的缩略图。)
这个缩略图(jpeg文件)需要有一个名称,表明它代表了哪个网站,以便稍后查看。
您能推荐从网址到有效文件名的简单翻译吗?
示例:www.ibm.com
可以映射到www_ibm_com
。
在某些情况下,我不确定这是否始终适用于所有有效网址。网址具有非常复杂的查询字符串。
是否有可以使用的正则表达式或c#库?
提前致谢并感到高兴。
答案 0 :(得分:2)
首先值得指出的是“。”在文件名中是完全合法的,但“/”不是,所以虽然你引用的例子不需要翻译,“www.ibm.com/path1/file1.jpg”会。
简单的string.Replace
将是最好的解决方案 - 假设您可以找到一个在文件名中合法但在网址中非法的字符。
假设非法的URL字符是“§”(在URL中可能是合法的),那么你有:
string.Replace("/", "§");
转换为文件名并:
string.Replace("§", "/");
转回来。
This page on URL Encoding定义了URLS的有效,无效和不安全(有效但具有特殊含义)字符。 ISO-Latin集合80-FF十六进制(128-255十进制)的“上半部分”中的字符不合法,但文件名可能正常。
您需要对URL中的每个字符执行此操作,该字符位于无效文件名字符集中。您可以使用GetInvalidFileNameChars
来获取此内容。
<强>更新强>
假设您找不到合适的字符对,那么另一种解决方案就是使用查找表。一列保存URL,另一列保存生成的文件名。只要生成的名称是唯一的(GUID就可以),您可以进行双向查找以从一个查找到另一个。
答案 1 :(得分:1)
www.ibm.com实际上是一个有效的文件名。更有问题的是斜线。因此,如果URL包含子目录,则需要翻译斜杠。
那么主要问题是可能重复。例如,ibm.com/path1_path2和ibm.com/path1/path2都会转换为相同的值。
我喜欢ChrisF的建议,即找到一个在文件名中合法但在URL中不合法的字符,尽管我甚至不知道哪个字符(如果有的话)不在我的头脑中。
如果你没有找到这样的角色,那么你可能需要坚持使用不太可能的角色。