在我的文件上传过程中,我发现非法字符被保存在表中。zurück.pdf , C _Word.doc是文件名。在这里ü ,发现C和_Word之间的空格为? 在表列中。我已经通过用_(下划线)替换非字母数值来验证客户端的文件名,但它仍然会转义并保留到数据库中。这些如何在客户端处理?
3 回答
作为以德语为母语的人,我可以向您保证,'ü' 和 '' 都不是非法字符。
您的数据表使用哪种字符编码,您在客户端做了什么来保证所有字符都在有效范围内?
如果您的数据库仅支持 ASCII 字符(并且无法更改),那么您应该使用System.Text.ASCIIEncoding将所有非 ASCII 字符替换为“?” 为你。
更好的是,转义 Unicode 字符并以某种与 ASCII 字符集兼容的方式表示它们,例如,使用 '\u9404' 来表示 Unicode 字符 9404,有关执行此操作的一些方法,请参阅RFC5137并阅读转换的答案一个 Unicode 字符串到一个转义的 ASCII 字符串。
I agree with Sebastian -- the problem isn't that these are illegal characters for a file name, but that they aren't valid characters for the database you are using. Assuming that the database is SQL Server, try changing the column datatype to nchar, nvarchar or ntext if it's currently one of char, varchar, or text.
您可以使用CustomValidator
with 调用System.IO.Path.GetInvalidFileNameChars()
或将其结果转换为正则表达式,以使用RegulaExpressionValidator
.