0

我创建了一个,它为每个用户winforms application创建了一个小的。包含用户SQLite database的。database namee-mailaddress

设想:

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

test@test.com.sqlite

我知道有些情况是电子邮件地址转换为路径,不会转换为有效路径。

以下字符由路径保留:/ \ ? % * : | " < > . 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”,但我认为这不是一个“干净”的方法

有人能想出一个更“干净”的方法吗?

提前致谢!

4

1 回答 1

0

与其使用用户的电子邮件来命名数据库,不如通过数字 ID 识别每个用户,然后使用它来命名数据库。

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


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

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

例子:

两者%?都被列为对电子邮件有效而对路径无效。假设我们使用&转义(对两者都有效!),我们将创建如下映射:

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

您将遍历每个电子邮件地址,并将每次出现的无效字符替换为其转义的等效字符,使其既像电子邮件地址一样独特,又像路径名称一样安全。

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

于 2013-04-26T12:57:04.387 回答