2012-04-26 42 views
2

我有一個網站,並有幾個文本框。如果用戶填寫的東西,包含字母「E」,然後它變得像:字母變成「ë」

ë 

我怎麼能存儲它ê喜歡這個數據庫? 我的網站使用C#語言構建於.NET和Iam上。

+0

你的特殊字符會變成ascii,在大多數情況下這不是什麼大問題,除非它引起你的錯誤。 – 2012-04-26 17:16:10

回答

4

ASP.Net(您的服務器端應用程序)和SQL Server都支持Unicode。他們可以處理不同的語言,不同的字符集:

http://msdn.microsoft.com/en-us/library/39d1w2xf.aspx

內部,背後ASP.NET Web頁面的代碼處理所有字符串數據 爲Unicode。您可以設置頁面如何對其響應進行編碼,這會在HTTP標頭的Content-Type部分設置CharSet屬性。 這使瀏覽器能夠確定沒有元標記或 必須從內容中推導出正確的編碼的編碼。您也可以使用 設置頁面解釋請求中發送的信息的方式。

最後,您可以設置ASP.NET如何解釋頁面 本身的內容 - 換句話說,就是在 磁盤上編碼物理.aspx文件。如果您設置文件編碼,則所有的ASP頁面都必須使用該 編碼。 Notepad.exe可以保存在當前的系統ANSI代碼頁,UTF-8或UTF-16(也稱爲Unicode)中編碼的文件。 ASP.NET運行時可以區分這三種編碼。物理ASP.NET文件的 編碼必須與@ Page encoding屬性中文件中指定的編碼 匹配。

這篇文章也是有幫助的:

http://support.microsoft.com/kb/893663

這種 「喬爾 - 上 - 軟件」 的文章是一個絕對必讀

請閱讀所有三篇文章,並告訴我們是否有幫助。

0

您需要HtmlEncodeHtmlDecode功能。

SQL Server與ë和任何其他本地或「不尋常」字符都很好,但HTML不是。這是因爲有些字符在HTML中有特殊含義。最好的例子是<>這對HTML語法來說很重要,但還有很多。由於某種原因,ë也是特殊的。爲了能夠顯示像這樣的字符,它們在傳輸之前需要被編碼爲HTML。傳輸意味着也發送到瀏覽器。

因此,雖然您在瀏覽器中看到ë,但您的應用正在使用編碼版本處理它,該編碼版本爲&#235;,並且它始終以包括數據庫的此格式顯示。如果你想把&#235;作爲ë保存在SQL Server中,你需要先解碼它。請記住在您的網頁上顯示之前將其重新編碼爲&#235;

分別在保存/顯示之前使用這些函數對所有文本進行解碼/編碼。他們只會轉換特殊字符,而不會留下一切:

string encoded = HttpUtility.HtmlEncode("Noël") 
string decoded = HttpUtility.HtmlDecode("No&#235;l") 

對編碼文本進行操作還有另一個重要原因 - JavaScript注入。這是對您的網站的一種攻擊,意圖通過將JavaScript塊放入編輯/備忘框來破壞它,希望它們能夠在別人的瀏覽器上的某個點執行。如果您對從UI獲得的所有文本進行編碼,那麼這些JavaScript永遠不會運行,因爲它們將被視爲文本而不是可執行代碼。