<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    鐵手劍譜

    上善若水
    數(shù)據(jù)加載中……
    Struts秘籍之第2段:第3.10式:過濾文本輸入

    第3.10式. 過濾文本輸入

    問題

    你想要渲染包含HTML標(biāo)記的數(shù)據(jù),并且希望該數(shù)據(jù)被瀏覽器當(dāng)作HTML標(biāo)記解釋和處理。

    動作要

    很簡單,可以使用:

    <bean:write name="myForm" property="freeText" filtered="false"/>

     

    在使用JSTL時,你也可以使用未過濾的值:

    <c:out value="${myForm.freeText}" escapeXml="false"/>

     

    動作變化

    在你使用Struts bean:write標(biāo)簽來產(chǎn)生文本時,默認(rèn)情況下任何對HTML處理敏感的字符都要被它們的對等實(shí)體代替。例如,大于號字符(>) 將被替代為&gt;字符實(shí)體。這種特征稱為是響應(yīng)過濾( response filtering),默認(rèn)情況下是激活的。在大多數(shù)情況下,過濾正是希望的行為,因?yàn)槲唇?jīng)過濾的文本可能被瀏覽器誤解釋。Table 3-4 列出了被bean:write標(biāo)簽過濾的字符和它們的對應(yīng)實(shí)體。

    Table 3-4. 被過濾的字符

    字符名稱

    字符值

    替代實(shí)體

    大于

    &lt;

    小于

    &gt;

    &符號

    &

    &amp;

    雙引號

    "

    &quot;

    反斜杠

    \

    &#39;

     

    但是有時候,你希望被渲染的文本中包括HTML 標(biāo)簽。假設(shè)你有一個在線日志應(yīng)用,允許用戶輸入將要顯示在一個頁面中的文本。允許使用HTML 標(biāo)簽將使得用戶可以那些可以格式化文本的標(biāo)記。文本中可能包含超鏈接,不同的字體,以及圖像等等。在其他情形下,你的應(yīng)用可能可能還會從其他來源,比如另一個URL,一個XML文件,一個Web Service或者數(shù)據(jù)庫中,獲得HTML模板文本。

    通過將bean:write標(biāo)簽的filtered屬性設(shè)置為false,你就可以告訴Struts標(biāo)簽不要使用相應(yīng)的實(shí)體替換 tag not to 特殊字符。首先,我們來看一下過濾是如何工作的。假設(shè)一個用戶在表單中輸入了下面的文本:

    Apache Struts Web Framework <b>rocks</b>!

     

    現(xiàn)在這個文本將被bean:write標(biāo)簽來渲染顯示。當(dāng)filtered 屬性設(shè)施為true時,特殊字符將被其對等物替換,這樣文本看起來就會是:

    Apache Struts Web Framework &lt;b&gt;rocks&lt;/b&gt;!

    這很有可能不是用戶所想要的。他想要的是"Apache Struts Web Framework rocks!"。但是,因?yàn)橐鈭D是想要允許用戶輸入裝飾文本的HTML標(biāo)簽,那么將filtered屬性設(shè)置為false 就會得到正確的渲染:

    Apache Struts Web Framework <b>rocks</b>!

     

    瀏覽器將認(rèn)識這個標(biāo)簽,并且按其所愿正確的應(yīng)用HTML 標(biāo)記。

    這在渲染一個Web頁面時式一個有用的機(jī)制。但是,在使用這個方法時必須足夠小心。如果數(shù)據(jù)是沒有過濾的,那么就可能會危及渲染后的 HTML頁面的布局,整個頁面可能會看起來遭到破壞。例如,假定下面的文本被輸入:

    Apache Struts Web Framework <b>rocks<b>!

     

    咋看起來,這沒什么問題。但是,注意到b元素的后面一個關(guān)閉標(biāo)簽的斜杠缺失了。這個錯誤很容易發(fā)生,而且這可能會使得頁面中后面的所有文本都是粗體。

    不幸的是,要避免這類錯誤是很困難的。最好還是試圖確保輸入的數(shù)據(jù)都是正確有效的HTML。還有個選擇就是通過XML 解析器來處理輸出。它會檢測諸如標(biāo)記不匹配之類的問題。你還可以通過一些能夠試圖糾正問題的解析器來完成,比如Jtidy。最后,如果數(shù)據(jù)是來自于非受控的來源,你可以選擇完全不允許HTML。如果你還想使用一些文本裝飾功能的話,還可以考慮使用WikiText 或者UBB Code之類的格式表示來替代。

    相關(guān)動作

    JTidy 提供了一個命令行接口和Java API 來解析和整理HTML。關(guān)于JTidy 的細(xì)節(jié)請訪問http://jtidy.sourceforge.net

    UBBCode 是PHP本身支持的一種標(biāo)記格式。也可以在Java中處理UBBCode。一個解析UBBCode 的PHP函數(shù),有人在Java中重寫了,地址可見:http://www.firegemsoftware.com/other/tutorials/ubb.php.

    posted on 2005-07-01 09:57 鐵手 閱讀(2343) 評論(2)  編輯  收藏 所屬分類: JavaStruts系列

    評論

    # Struts 秘籍(CookBook)[TrackBack] 2005-11-12 18:29 阿泠

    本系列源改編自O(shè)'Reily的Strus Cookbook
    [引用提示]阿泠引用了該文章, 地址: http://blog.donews.com/inclear/archive/2005/11/12/624363.aspx
      回復(fù)  更多評論    

    # re: Struts秘籍之第2段:第3.10式:過濾文本輸入 2006-03-02 14:55 adam

    呵呵,不知道你用的那個版本,我是用的是1.2.7。

    在這個版本中應(yīng)該寫“filter”,而不是"filtered"。
      回復(fù)  更多評論    
    主站蜘蛛池模板: 国产精品亚洲综合一区| 国产免费资源高清小视频在线观看| 亚洲精品无码久久毛片| 精品国产日韩亚洲一区在线| 女人18毛片a级毛片免费视频| 性xxxx黑人与亚洲| 午夜视频免费观看| 亚洲AV成人精品一区二区三区| 国产又黄又爽又刺激的免费网址| 亚洲AV无码AV男人的天堂不卡| 国产伦精品一区二区三区免费迷| 日韩亚洲综合精品国产| 亚洲av无码不卡私人影院| 国产精品免费大片一区二区| 亚洲精品乱码久久久久久久久久久久 | 无码永久免费AV网站| 亚洲日本中文字幕天天更新| 国产男女猛烈无遮档免费视频网站| 猫咪免费人成网站在线观看入口| 久久精品亚洲福利| 久久国产精品免费视频| 亚洲校园春色另类激情| 国产一精品一aⅴ一免费| 久久精品免费网站网| 亚洲资源在线观看| 成年人视频在线观看免费| 欧洲乱码伦视频免费国产| 国精无码欧精品亚洲一区 | 三年片在线观看免费观看大全动漫 | 另类小说亚洲色图| 亚洲av午夜福利精品一区人妖| 免费国产成人高清在线观看网站| 精品韩国亚洲av无码不卡区| 久久国产亚洲精品麻豆| 妞干网免费观看视频| 一区二区三区免费在线观看| 亚洲黄色网站视频| 免费中文字幕在线观看| 一个人免费日韩不卡视频| 色窝窝亚洲av网| 亚洲精品中文字幕麻豆|