将电子邮件地址转换为有效路径

本文关键字:有效 路径 转换 电子邮件地址 | 更新日期: 2023-09-27 18:10:57

我创建了一个winforms application,它为每个用户创建一个小的SQLite databasedatabase 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"。