網頁中用TextBox讓用戶輸入文本,然后存入數據庫,再從數據庫中讀出顯示在頁面上。常常這樣做會遇到不少問題,因為TextBox實際上是一個Windows組件,和網頁顯示標記如:<p>,<td>,<div>等,對字符的解析方法是不同的。比如前者的換行標記為“\r\n”,而后者為“<br>”。這就帶來一個轉換的問題。 在做轉換之前,先來考慮幾個問題: 1、 TextBox用“\r\n”來標記換行而網頁中以“<br>”標記 2、 網頁中連續的空格當做一個空格處理,比如“a b c”將會顯示“a b c” 3、 用戶輸入特殊字符比如:“<”,“&”,“ ”,“<”,這些都是網頁中有特殊意義的字符,會被解析,而用戶輸入的目的當然是不希望被解析。 現在來解決這幾個問題,有一種解決辦法是在顯示的時候仍然用TextBox去顯示,這樣就不用做任何轉換,只要把TextBox.ReadOnly設為true,這樣在一定程度上能滿足要求。但是往往為了網頁的美觀,這樣做是不可取的。比較好的辦法是去解析用戶輸入的字符串,可以做這樣的轉換: 第一步: “<” à“<” “&” à“&” “ ”à“&nbsp;” ……(此處的省略號后文有說明) 第二步: “ ” à“ ” “\r\n” à“<br>” 這里必須分兩步轉換,因為如果你先做第二步轉換的話混把用戶輸入的特殊字符串和由轉換而的的特殊字符串混淆,比如: 用戶輸入:a b c d 第二步轉換:a b c d 第一步轉換:a&nbsp;b&nbsp;&nbsp;&nbsp;c&nbsp;d 可以看到,經過第一次轉換后已經無法分辨用戶輸入的“ ”和轉換而來的“ ”,在做第二次轉換的時候就會統一處理就會出錯。結果顯示:a b c d 如果嚴格按照第一步,第二步的轉換順序來轉換就不會出現這個問題。 把轉換后的字符串存入數據庫,在顯示的時候直接把從數據庫讀出的字符串給HTML組件賦值,比如: //這里假設temp是從數據庫中讀出來的,這里演示Table和HtmlTable其他的控件類似 //顯示的效果是:<a b //Table1是Web控件 String temp = “<a b”; Table1.Rows[0].Cells[0].Text = temp; //Table2是HTML控件 Table2.Rows[0].Cells[0].InnerHtml = temp; [1] [2] 下一頁 |
溫馨提示:喜歡本站的話,請收藏一下本站!