中華網校

系列網站: 中華網校 | www.網校.com | 3D模型 | 中華網校教育

電腦網校 | 業界新聞 | 職業網校 | 網校寶典 | 軟件下載 | 網校論壇 | 網校聯盟

電腦入門 | 網頁設計 | 網絡編程 | 圖形圖象 | 三維空間 | 多媒體 | 程序語言 | 操作系統 | 系統專題 | 辦公應用 | 軟件寶典 | 硬件天下 | 

 

您的位置:首頁 >> 網絡編程 >> ASP.NET >> 新聞正文

ASP.NET中輸入文本的HTML解析辦法  

作者:zhlmmc  時間:2004-12-27 21:35:02  來自:PConline  責任編輯:www.kxazyv.tw  閱讀次數:

網頁中用TextBox讓用戶輸入文本,然后存入數據庫,再從數據庫中讀出顯示在頁面上。常常這樣做會遇到不少問題,因為TextBox實際上是一個Windows組件,和網頁顯示標記如:<p>,<td>,<div>等,對字符的解析方法是不同的。比如前者的換行標記為“\r\n”,而后者為“<br>”。這就帶來一個轉換的問題。

  在做轉換之前,先來考慮幾個問題:

  1、 TextBox用“\r\n”來標記換行而網頁中以“<br>”標記

  2、 網頁中連續的空格當做一個空格處理,比如“a b    c”將會顯示“a b c”

  3、 用戶輸入特殊字符比如:“<”,“&”,“&nbsp;”,“&lt;”,這些都是網頁中有特殊意義的字符,會被解析,而用戶輸入的目的當然遣幌M喚馕觥?/P>

  現在來解決這幾個問題,有一種解決辦法是在顯示的時候仍然用TextBox去顯示,這樣就不用做任何轉換,只要把TextBox.ReadOnly設為true,這樣在一定程度上能滿足要求。但是往往為了網頁的美觀,這樣做是不可取的。比較好的辦法是去解析用戶輸入的字符串,可以做這樣的轉換:

  第一步:


  “<”      à“&lt;”

  “&”      à“&amp;”

  “&nbsp;”à“&amp;nbsp;”

  ……(此處的省略號后文有說明)

  第二步:


  “ ”      à“&nbsp;”

  “\r\n”  à“<br>”

  這里必須分兩步轉換,因為如果你先做第二步轉換的話混把用戶輸入的特殊字符串和由轉換而的的特殊字符串混淆,比如:

  用戶輸入:a b   c&nbsp;d

  第二步轉換:a&nbsp;b&nbsp;&nbsp;&nbsp;c&nbsp;d

  第一步轉換:a&amp;nbsp;b&amp;nbsp;&amp;nbsp;&amp;nbsp;c&amp;nbsp;d

  可以看到,經過第一次轉換后已經無法分辨用戶輸入的“&nbsp;”和轉換而來的“&nbsp;”,在做第二次轉換的時候就會統一處理就會出錯。結果顯示:a&nbsp;b&nbsp;&nbsp;&nbsp;c&nbsp;d

  如果嚴格按照第一步,第二步的轉換順序來轉換就不會出現這個問題。

  把轉換后的字符串存入數據庫,在顯示的時候直接把從數據庫讀出的字符串給HTML組件賦值,比如:


  //這里假設temp是從數據庫中讀出來的,這里演示Table和HtmlTable其他的控件類似

  //顯示的效果是:<a b

  //Table1是Web控件

  String temp = “&lt;a&nbsp;b”;

  Table1.Rows[0].Cells[0].Text = temp;

  //Table2是HTML控件

  Table2.Rows[0].Cells[0].InnerHtml = temp;

HtmlTable有兩個相似的屬性“InnerHtml”,“InnerText”,介紹一下這兩個屬性的區別:

  InnerHtml:顯示的時候會對傳入的值進行HTML解析,就像上面的例子。

  InnerText:顯示的時候不會對傳入的值新型解析,直接把傳入的值顯示出來。比如把上面的例子改成:Table2.Rows[0].Cells[0].InnerText = temp;那么顯示的效果將會變成:&lt;a&nbsp;b

  雖然這兩個屬性用起來很方便,似乎可以滿足平時的使用需求,但是InnerText有兩個問題:

  1、 無法標記換行,不管是“\r\n”還是“<br>”都不是換行標記

  2、 連續的空格仍然只顯示一個空格。

  所以想不轉換字符串而直接用InnerText是不可取的。但是皇歉齜淺7彼齙墓蹋蛭狧TML的特殊標記非常多。值得慶幸的是ASP.NET提供了HttpServerUtil類,該類提供了HtmlEncode()和HtmlDecode()方法,這里我們只用到HtmlEncode()方法。我們就可以這樣來轉換:


  //“\r\n”在TextBox中硬回車的時候會自動添上

  string temp = “a b   c&nbsp;d\r\ne<”;

  //Server是Page類的一個屬性,也就是說任何aspx頁面的codebehind中都是可以使用的

  //因為aspx頁面都是繼承Page類的。

  temp = Server.HtmlEncode(temp);

  temp = temp.Replace(" ","&nbsp;");

  temp = temp.Replace("\r\n","<br>");

  Table1.Rows[0].Cells[0].Text = temp;

  Table2.Rows[0].Cells[0].InnerHtml = temp;

  //顯示效果:a b   c&nbsp;d

  //        e<


  到這里你也許會想一個問題,萬一用戶輸入“\r\n”怎么辦?不用擔心,網頁組件的設計者已經考慮到了這個問題,因為用戶輸入的“\r\n”會被自動轉換成“\\r\\n”(當然在我們做轉換之前)。

  大功告成:)


相關文章 最新文章 推薦文章
ASP.NET中輸入文本的HTML解析辦法
一個簡單的ASP+留言板程序
從一個輿論調查的制作談面向對象的編程思路(五)
ASP.NET中的隨機密碼生成
ASP.NET中根據XML動態創建使用WEB組件

  中華網校依法保護知識產權,如果我們的文章有涉及或侵犯您的有關權益,請即時與我們 聯系, 注明網址及文章,我們會即時處理或刪除,感謝您的合作!中華網校email
  中華網校由廣州市中六電腦城智銳計算機專業培訓學院及中華網校技術中心提供網絡支持未經本站許可任何個人網站、書刊報社一律不得私自復制,轉載本站內容!

關于中華網校 | 廣告服務 | 版權聲明 | 投稿指南 | 網站合作 | 友情鏈接 | 網站地圖

 

版權所有 中華網校 & 智銳網校 1999-2004 COPYRIGHT (C) 1999-2004 www.kxazyv.tw ALL RIGHTS RESERVED

 
河北快3