2010-05-19 98 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之一)。