国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > HTML > 正文

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

2020-10-23 18:31:56
字體:
供稿:網(wǎng)友
如果你熟悉XML相關(guān)的開發(fā),可能也就習(xí)慣于這種寫法,想著XML中任何不含子節(jié)點(diǎn)的元素都可以這樣寫,那么XHTML中沒有內(nèi)容的標(biāo)簽也都可以這樣寫。XHTML中理論上當(dāng)然允許任何標(biāo)簽以自關(guān)閉的方法來書寫,然而瀏覽器兼容性卻帶來了新問題,那就是IE無法正確識別某些標(biāo)簽的自關(guān)閉寫法。

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

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

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

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

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

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 夏津县| 阿克陶县| 深水埗区| 汉源县| 阳原县| 华坪县| 四会市| 洛浦县| 柳州市| 清镇市| 大安市| 桂阳县| 贡觉县| 远安县| 昌江| 武胜县| 广昌县| 邵武市| 宝山区| 喀喇沁旗| 高邑县| 育儿| 淮北市| 平利县| 江源县| 黑河市| 海晏县| 紫云| 三原县| 惠安县| 卢湾区| 青州市| 渑池县| 河源市| 闸北区| 登封市| 册亨县| 岐山县| 寿阳县| 松潘县| 濮阳县|