正确使用XHTML的冒险以及解决办法

2016-01-29 11:52 4 1 收藏

正确使用XHTML的冒险以及解决办法,正确使用XHTML的冒险以及解决办法

【 tulaoshi.com - Html 】

  我使用XHTML有些年了,但直至去年夏天我才着眼于如何正确使用,那就是说,以application/xhtml+xml的MIME类型来伺服(server)它。我知道我碰到问题的一些,但问题远非如此。就如你即将发现的一样,当你开始使用真正的XHTML,你会遭遇很多似乎细小但让人困惑的问题。

请注意这不是一篇讨论支持或反对使用XHTML的文章。我只是写下我所知道的潜在的易犯错误,并且让你自己来决定自己的选择:HTML 4.01,为所有浏览器伺服为text/html的XHTML 1.0或者为能够处理其的浏览器伺服为application/xhtml+xml而其他浏览器则伺服为text/html的XHTML 1.0。否则有些东西会完全不一样。

每当我遭遇到它们发生的场合,我开始了解一个又一个的问题。有些情况下我必须花很多时间来查找问题并且在找到解决办法之前求助于其他人。但我在其中学到不少东西,我将把我已经使用XHTML后应该知道的都告诉你。

注意我这里提及的问题只会发生在能正确处理application/xhtml+xml MIME类型的用户代理中,而因此XHTML被作为XML。这也可能是这里不提及XHTML的早期使用的原因——很少有人使用这样的浏览器,所以几乎不会有人因只伺服为text/html的XHTML所烦忧。

今天,实际上把XHTML伺服为application/xhtml+xml正慢慢变得平常。我所知道的理由有两个:

1. 使用Firefox,Mozilla,Opera。Safari和其他兼容XHTML浏览器的人数增加了很多,所以你不再仅仅为自己和伙伴这样做。嗯。或许你就这样做,当将影响更多人。
2. 在web开发者之间,对XHTML的真正面目是什么的觉醒越来越多了。使用XHTML已经有多次多时的热烈的讨论,尤其是伺服为text/html的时候。如果你参与了任何一次讨论,你知道我在说什么。

假如你,像我,决定实现某些类型的content negotiation和在传送XHTML的时候使用正确的媒体类型,你需要知道什么能(和将)在你发布的文档中发生,并且知道怎样避免问题的发生。对于对content negotiation同进行content negotiation的脚本例子有兴趣的读者,我推荐你阅读Content Negotiation和Serving up XHTML with the correct MIME type(本站早有翻译:使用正确的MIME类型伺服XHTML)。还有很多这种类型的文章,但这是我读到的最精彩的两篇。

每一个基本的教程都有一些HTML和XHTML的明显区别:元素和属性名字使用小写,属性值总要用引号。不要使用简化属性,确保所有的元素都有结束标签和没有不正确的嵌套等等。但是,当XHTML伺服为application/xhtml+xml时还需要知道更多东西。
良构是必须的

文档必须是良构(well-formed)的XML(跟合法的(valid)XHTML不必然相同)。对错误没有妥协,没有机会。如果文档不良构,符合标准的浏览器(当前我知道Mozilla,Firefox,Netscape,Camino,Opera,Safari和OmniWeb——相当多的浏览器除了IE)将会显示一条错误信息和在某种方式或其他方式上中止处理文档。

此外,这还意味着不再未编码的“&”号。
XML声明可能是必须的

如果要使用除了UTF-8或者UTF-16字符编码,XML声明是必须的除非HTTP头已经提供编码。

在HTTP头中是否要指定字符编码有些模糊,Architecture of the World Wide Web, Volume One: Media Types for XML如此陈述

总体上,不应该在协议头为XML数据指定字符编码因为数据本身已描述。

另一方面,XHTML 1.0, Second Edition: Character Encoding说:

为了让文档使用指定的字符编码,最好的办法是保证web服务器发送正确的头。

就是说,在XML声明中指定字符编码是好的习惯:

<?xml version="1.0" encoding="UTF-8"?
只有五个实体是安全的

只有五个预定义的实体(&lt;、&gt;、&amp;、 &quot;和&apos;)的支持是有担保的。其他的可能完全被忽略或者直接输出。比如,如果XHTML文档包含如 或者”的实体,Safari会生成。直接地。Opera反而选择忽略未知的实体,同时Mozila家族会认得这些实体并且就像HTML中“如果文档引用公共的映射浏览器伪DTD目录中的标识符并且没有单独声明的文档” 来处理。

使用UTF-8字符编码是备受推荐的最好实践,让你(几乎)可以使用你需要键入文档的任意字符,不需要实体或者字符编号。如果你不能或不愿使用UTF-8,数字式的字符编号是可以支持和安全使用的。
SGML式注释的内容可能会被忽略

SGML注释(HTML风格注释, <!-- 注释 --)可能会(并且会)被浏览器当作注释,就算是在script或者style元素内部使用。

在HTML中,普遍地把sript和style块的内容装入注释中,为的是在不认识script或者style元素的浏览器中隐藏他们,并且在页面上把其内容生成平白文本。

在XHTML中,这样做会引起浏览器忽略掉注释里的任何内容。

在老旧的浏览器中隐藏script和style元素的实践是退回到1990年代中期的一个习惯。我的经验是,有如此表现的浏览器是十分罕见的,所以你可以安全地忽略它们,并且停止在脚本和样式中装入SGML式注释,就算你使用的是HTML。

来源:https://www.tulaoshi.com/n/20160129/1483664.html

延伸阅读
手机电池使用过度 如果是因为过度使用手机导致电量不足而自动关机,再次开机时无反应或不能进入桌面的情况,那么可以确定的是手机电池由于过度放电导致进入休眠状态。此时我们需要将红米Note手机电池取出。 正确使用万能充电器 然后利用“万能充电器”进行充电,从而再次强制性的激活电池,使其恢复正常使用。在使用万能充时,要确保电...
标签: windows10
Win10下IE无法使用的解决办法   可能有些朋友习惯使用或者因为某些特殊需要离不开IE浏览器,在Win10中有时候可能会遇到IE无法正常使用的问题,此时可尝试参考微软帮助和支持提供的方法来解决,共三个方案。 方案一: 重置Winsock目录: 1、按Win+X,打开命令提示符(管理员) 2、输入命令netsh winsock reset并...
标签: 电脑入门
一、电源信号灯是否恒亮 倘若电源信号灯不亮,首先要排查电源方面的问题。如是否因市电供电不稳定造成掉线,ADSL Modem本身的电源是否存在问题等。 用手触摸ADSL Modem外壳,感觉非常烫手,此时不妨将ADSL Modem暂时关机待到冷却后再开机使用,或者把它放置到比较通风的位置,这样也可以消除掉线故障。 二、检查网线是否松动 对于大多数宽...
夏季控油:合理使用护肤品 夏季脸上出油的原因很可能是没有选对护肤产品。很多人无论春夏秋冬都是用的同种类型的护肤品,这种做法是错误的。因为夏季天气炎热,而人体油脂分泌比其他季节要旺盛,所以要选对夏季护肤产品。同时,因为多数人脸上出油的部位都是在T区鼻翼两边。而很多人在使用护肤品时全脸都使用一样的产品,这种做法也是错...
标签: 头发 护发
营养性头发稀疏 消化吸收机能障碍造成营养不良导致脱发,形成的头发稀少。 解决方法: 加强营养,多吃蔬果、海带、桑葚、核桃仁,也可以使用辅助生发产品。 肥胖性头发稀疏 大量的饱和脂肪酸在体内代谢后产生废物,堵塞毛囊导致脱发 解决方法 : 少吃油腻重的食物,加强体育锻炼。 病理性头发稀疏 主要由...

经验教程

805

收藏

31
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部