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

时间:2013-04-26 12:52:22

标签: c# winforms filtering

我创建了winforms application,为每个用户创建一个小SQLite databasedatabase name包含用户的e-mailaddress

情境:

拥有电子邮件地址的用户:test@test.com 使用该应用程序,将创建以下database

test@test.com.sqlite

我知道有一种情况是e-mailaddress转换为路径,不会转换为有效路径。

路径保留以下字符:/ \ ? % * : | " < > . and a space

我目前正在使用下一种方法来过滤电子邮件:

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”,但我不认为这是一种“干净”的方法

有人可以提出更“干净”的方法吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

不是使用用户的电子邮件来命名数据库,而是使用数字ID标识每个用户,并使用它来命名数据库。

除了始终作为文件名有效之外,这还允许用户更改其电子邮件地址,而无需担心仍指向正确的数据库。


或者,如果您已开始使用电子邮件地址作为名称,请参阅this answer,了解哪些字符在电子邮件地址中有效。只要所有电子邮件地址都有效,您只需担心转义那些对电子邮件有效且对路径无效的字符。

我建议使用有效路径和无效电子邮件字符来启动转义序列(每个字符的不同序列,您必须转义),或者选择一个对两者都有效的不太常见的字符,并将其用作转义字符(记住也要逃避它!)。

示例:

%?都列为对电子邮件有效,对路径无效。假设我们使用&来转义(对两者都有效!),我们将创建一个这样的映射:

"&" = &00;
"%" = &01;
"?" = &02;

您将浏览每个电子邮件地址,并将每个无效字符替换为其转义的等效字符,使其既与电子邮件地址一样唯一,也可以作为路径动画安全。

“a&amp; b?100%@ example.com”将成为“a&amp; 00; b&amp; 02; 100&amp; 01; @ example.com”。