ASP.NET中輸入文本的HTML解析方法
發(fā)表時間:2024-06-14 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]網(wǎng)頁中用TextBox讓用戶輸入文本,然后存入數(shù)據(jù)庫,再從數(shù)據(jù)庫中讀出顯示在頁面上。常常這樣做會遇到不少問題,因為TextBox實際上是一個Windows組件,和網(wǎng)頁顯示標記如:<p>,<td>,<div>等,對字符的解析方法是不同的。比如前者的換行標記為“\r...
網(wǎng)頁中用TextBox讓用戶輸入文本,然后存入數(shù)據(jù)庫,再從數(shù)據(jù)庫中讀出顯示在頁面上。常常這樣做會遇到不少問題,因為TextBox實際上是一個Windows組件,和網(wǎng)頁顯示標記如:<p>,<td>,<div>等,對字符的解析方法是不同的。比如前者的換行標記為“\r\n”,而后者為“<br>”。這就帶來一個轉(zhuǎn)換的問題。
在做轉(zhuǎn)換之前,先來考慮幾個問題:
1、 TextBox用“\r\n”來標記換行而網(wǎng)頁中以“<br>”標記
2、 網(wǎng)頁中連續(xù)的空格當做一個空格處理,比如“a b c”將會顯示“a b c”
3、 用戶輸入特殊字符比如:“<”,“&”,“ ”,“<”,這些都是網(wǎng)頁中有特殊意義的字符,會被解析,而用戶輸入的目的當然是不希望被解析。
現(xiàn)在來解決這幾個問題,有一種解決辦法是在顯示的時候仍然用TextBox去顯示,這樣就不用做任何轉(zhuǎn)換,只要把TextBox.ReadOnly設(shè)為true,這樣在一定程度上能滿足要求。但是往往為了網(wǎng)頁的美觀,這樣做是不可取的。比較好的辦法是去解析用戶輸入的字符串,可以做這樣的轉(zhuǎn)換:
第一步:
“<” à“<”
“&” à“&”
“ ”à“&nbsp;”
……(此處的省略號后文有說明)
第二步:
“ ” à“ ”
“\r\n” à“<br>”
這里必須分兩步轉(zhuǎn)換,因為如果你先做第二步轉(zhuǎn)換的話混把用戶輸入的特殊字符串和由轉(zhuǎn)換而的的特殊字符串混淆,比如:
用戶輸入:a b c d
第二步轉(zhuǎn)換:a b c d
第一步轉(zhuǎn)換:a&nbsp;b&nbsp;&nbsp;&nbsp;c&nbsp;d
可以看到,經(jīng)過第一次轉(zhuǎn)換后已經(jīng)無法分辨用戶輸入的“ ”和轉(zhuǎn)換而來的“ ”,在做第二次轉(zhuǎn)換的時候就會統(tǒng)一處理就會出錯。結(jié)果顯示:a b c d
如果嚴格按照第一步,第二步的轉(zhuǎn)換順序來轉(zhuǎn)換就不會出現(xiàn)這個問題。
把轉(zhuǎn)換后的字符串存入數(shù)據(jù)庫,在顯示的時候直接把從數(shù)據(jù)庫讀出的字符串給HTML組件賦值,比如:
//這里假設(shè)temp是從數(shù)據(jù)庫中讀出來的,這里演示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] 下一頁