佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > XHTML標簽的自關(guān)閉寫法的壞處分析

XHTML標簽的自關(guān)閉寫法的壞處分析

熱門標簽:呼叫中心市場需求 鐵路電話系統(tǒng) 美圖手機 網(wǎng)站文章發(fā)布 銀行業(yè)務 檢查注冊表項 智能手機 服務器配置
如果你熟悉XML相關(guān)的開發(fā),可能也就習慣于這種寫法,想著XML中任何不含子節(jié)點的元素都可以這樣寫,那么XHTML中沒有內(nèi)容的標簽也都可以這樣寫。XHTML中理論上當然允許任何標簽以自關(guān)閉的方法來書寫,然而瀏覽器兼容性卻帶來了新問題,那就是IE無法正確識別某些標簽的自關(guān)閉寫法。

請嘗試輸入以下XHTML代碼并在IE中瀏覽:p>hello script type="text/javascript" /> world/p>,你會發(fā)現(xiàn)只能看到前面的hello而不見后面的world,這事情讓人挺無法解釋的吧??赡苡胁簧偃硕荚?jīng)遇到過這個問題,并且花了幾個小時在上面都找不到合理的解釋。

解釋源自另外一段類似的代碼:p>hello textarea /> world/p>,你在IE中看看其顯示效果,能夠得到合理的解釋了嗎?我們能夠看到前面的hello正常顯示了,而后面的world則顯示在textarea里面,這證明IE并沒有正確識別textarea標簽已經(jīng)自關(guān)閉了,而是當它沒有關(guān)閉,并將后面的內(nèi)容識別為textarea內(nèi)部的內(nèi)容。

這時候我們就明白前面那段代碼為什么看不到后面的world了,因為它被當作script的一部分來識別了。這就說明了,在我們使用XHTML時并不能好像XML那樣隨意的使用自關(guān)閉的寫法,只有少數(shù)原本不需要關(guān)閉的標簽可以用自關(guān)閉的寫法,其他標簽即使沒有任何內(nèi)容最好也用成對的關(guān)閉寫法。

最后需要提醒大家的是,其實弱智的parser不僅僅IE有,很多地方都可能碰到由于parser不嚴謹而引起的問題,所以我們在書寫XHTML的時候還是要遷就一些老HTML繼承下來的習慣,不能好像真的XML那樣自以為符合標準了就隨意寫。不信?那么再試一個吧:p>hello br>/br> world/p>,留意IE與Opera中的顯示效果。

Update: 有部分讀者認為我舉的例子是不符合XHTML規(guī)范的,那么請先閱讀XHTML規(guī)范。Empty Elements一節(jié)的中文翻譯如下:“空元素必須要么有一個結(jié)束標記,要么以/>結(jié)束,例如br/>或hr>/hr>。請參考HTML兼容性標準以獲取關(guān)于確保向后兼容HTML4瀏覽器的信息。”可以看得到,規(guī)范中也給出了hr>/hr>這樣的例子,說明br>/br>的寫法是符合XHTML規(guī)范的,只是沒有兼容HTML4標準。那么到底XHTML是否兼容HTML4呢?我們來看Compatibility Issues一節(jié),中文翻譯如下:“雖然并沒有要求XHTML1.0文檔兼容現(xiàn)有的瀏覽器,但在實踐中這并不難做到?!币虼?,XHTML是沒有規(guī)定文檔必須向下兼容,我給出的例子都是合法的XHTML文檔片斷,當出現(xiàn)在完整的XHTML里面時也全部能通過W3C Markup Validation Service的驗證。

Update again: 其實我寫這篇文章的目的不是為了強調(diào)只符合XHTML規(guī)范就行了,也不是強調(diào)符合XHTML同時兼容HTML4就夠了,而是應該考慮更多需要兼容的情況。例如你的CMS中允許用戶提交HTML,提交的HTML經(jīng)過SgmlReader或者其他方法格式化為XHTML,同時或許還做了其它XML處理,這時候就有可能將用戶提交的textarea>/textarea>轉(zhuǎn)換為textarea />,這種情況下你需要通過跟蹤調(diào)試找出問題并不容易,因為XML處理并沒有違反任何規(guī)范,每一步的處理都是符合語義的。另外最好不要把br />寫成br/>,因為確實有些弱智的parser僅僅因為少了一個空格就無法正確識別。

標簽:新疆 滄州 上海 樂山 河南 紅河 長治 沈陽

巨人網(wǎng)絡通訊聲明:本文標題《XHTML標簽的自關(guān)閉寫法的壞處分析》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    汕尾市| 固安县| 灵台县| 醴陵市| 阿坝| 大荔县| 印江| 天气| 毕节市| 康马县| 临高县| 安义县| 闻喜县| 桃园市| 廊坊市| 信宜市| 寿阳县| 沐川县| 开化县| 江城| 陇南市| 通榆县| 万载县| 通山县| 宜川县| 图木舒克市| 牟定县| 通榆县| 柳河县| 林口县| 普兰店市| 彩票| 咸阳市| 兴文县| 汝州市| 沅江市| 当阳市| 晋中市| 习水县| 交口县| 常宁市|