将电子邮件地址转换为有效路径
本文关键字:有效 路径 转换 电子邮件地址 | 更新日期: 2023-09-27 18:10:57
我创建了一个winforms application
,它为每个用户创建一个小的SQLite database
。database name
包含用户的e-mailaddress
。
场景:
一个e-mailaddress: test@test.com
的用户使用该应用程序,将创建以下database
:
test@test.com.sqlite
我知道在某些情况下,将电子邮件地址转换为路径,将不会转换为有效路径。
以下字符被path保留:/ ' ? % * : | " < > . and a space
我目前正在使用next方法来过滤电子邮件地址:
public string ReturnFilteredUsername(string username)
{
username = username.Replace("<", "x"); username = username.Replace(">", "x"); username = username.Replace(":", "x"); username = username.Replace("'"", "x");
username = username.Replace("/", "x"); username = username.Replace(@"'", "x"); username = username.Replace("|", "x"); username = username.Replace("?", "x");
username = username.Replace("*", "x");
return username;
}
所有保留字符都被"x"替换,我想将所有无效字符转换为"%20"。我可以把"x"替换为"%20",但我不认为这是一个"干净"的方法
有人能想出一个更"干净"的方法吗?
提前感谢!
与其使用用户的电子邮件来命名数据库,不如使用数字ID来标识每个用户,并使用该ID来命名数据库。
除了始终作为文件名有效之外,这允许用户更改他们的电子邮件地址,而不必担心仍然指向正确的数据库。
或者,如果您设置使用电子邮件地址作为名称,请参阅关于电子邮件地址中哪些字符有效的答案。只要所有的电子邮件地址都是有效的,您只需要担心转义那些对电子邮件有效而对路径无效的字符。
我建议使用对路径有效和对电子邮件无效的字符来开始转义序列(每个字符必须转义的序列不同),或者选择一个对两者都有效的不太常见的字符,并将其用作转义字符(记住也要转义!)。
的例子:
%
和?
都被列为对电子邮件有效,对路径无效。假设我们使用&
转义(对两者都有效!),我们将创建这样的映射:
"&" = &00;
"%" = &01;
"?" = &02;
您将遍历每个电子邮件地址,并将每个出现的无效字符替换为其转义的等效字符,使其既像电子邮件地址一样唯一,又像路径名一样安全。
"第一部;b ? 100% @example.com"becomee"第一部,00;b& 02年;100年,01;@example.com"。