2010-05-19 82 views
0

在我的文件上传过程中,我发现非法字符被保存在表中。 zurück.pdfC _Word.doc是文件名。这里üC之间的空格_Word被发现为?表列中的。我通过用_(下划线)替换非字母数字值来验证客户端中的文件名,但它仍然转义并保留到数据库中。这些在客户端如何处理?文件名中的非法字符

回答

3

作为一个德语母语的人,我可以向你保证,'ü'和''都不是非法字符。

您的数据表使用哪种字符编码,以及您在客户端如何确保所有字符都落入有效范围内?

如果您的数据库仅支持ASCII字符(并且无法更改),那么您应该使用System.Text.ASCIIEncoding,它用'?'替换所有非ASCII字符。为你。

更好的是,转义Unicode字符并以与ASCII字符集兼容的某种方式表示它们(例如,使用'\ u9404')来表示Unicode字符9404,参见RFC5137以获取某些执行此操作的方法并阅读Convert a Unicode string to an escaped ASCII string的答案。

0

您可以使用CustomValidator,致电System.IO.Path.GetInvalidFileNameChars()或将其结果转换为正则表达式,以使用RegulaExpressionValidator进行客户端验证。

1

我同意Sebastian - 问题不在于这些文件名是非法字符,而是它们对于您正在使用的数据库不是有效字符。假设数据库是SQL Server,请尝试将列数据类型更改为nchar,nvarchar或ntext(如果它当前是char,varchar或text之一)。