文件名中的非法字符

时间:2010-05-19 12:55:32

标签: c# asp.net javascript validation illegal-characters

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

3 个答案:

答案 0 :(得分:3)

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

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

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

更好的是,转义Unicode字符并以某种与ASCII字符集兼容的方式表示它们,例如,使用'\ u9404'来表示Unicode字符9404,有关某些方法,请参阅RFC5137这个并阅读Convert a Unicode string to an escaped ASCII string的答案。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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