相关文章
制作网页需要学习哪些技术?
网站建设HTML 标记一览
北京网站设计网页设计中HTML常范的五个错误
网站建设教程/dreamweaver/入门 Dreamweaver 4 简明教程10(网页的排版)
企通互联Dreamweaver3 图层应用技巧(三)
北京网页设计FLASH MX 2004视频教程: 《老鼠爱大米》一
www.qitongnet.com用Dreamweaver MX 2004制作ASP动态网站(投票系统篇)
www.qitongnet.comDreamweaver经典问题大搜罗(三)
北京网站设计Dreamweaver常用工具栏使用(上)
北京网站建设Xhtml第9天:第一个css布局实例
品牌理念
北京网站建设最佳合作伙伴
北京网站建设专家企通互联
竭诚为您提供网站建设服务!
友好连接
文章搜索
你的位置:首页 >> 网站制作 >> 北京网站制作网站设计正确使用XHTML的冒险以及解决办法
北京网站制作网站设计正确使用XHTML的冒险以及解决办法
作者: 北京网站建设 日期:2008-03-27 06:03:34 来源: http://www.qitongnet.com
使用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"?>网站设计
只有五个实体是安全的北京网站制作
网站制作
只有五个预定义的实体(<、 企通互联>、&、 北京网页设计 "和')的支持是有担保的。其他的可能完全被忽略或者直接输出。比如,如果XHTML文档包含如 或者”的实体,Safari会生成。直接地。Opera反而选择忽略未知的实体,同时Mozila家族会认得这些实体并且就像HTML中“如果文档引用公共的映射浏览器伪DTD目录中的标识符并且没有单独声明的文档” 来处理。网站设计
北京网站制作
使用 www.qitongnet.comUTF-8字符编码是备受推荐的最好实践,让你(几乎)可以使用你需要键入文档的任意字符,不需要实体或者字符编号。如果你不能或不愿使用UTF-8,数字式的字符编号是可以支持和安全使用的。 网页设计网站建设
SGML式注释的内容可能会被忽略网站建设
网站制作
SGML注释(HTML风格注释, <!-- 注释 -->)可能会(并且会)被浏览器当作注释,就算是在 网站设计script或者style元素内部使用。网站建设
网页设计
在HTML中,普遍地把sript和style块的内容装入注释中,为的是在不认识script或者style元素的浏览器中隐藏他们,并且在页面上把其内容生成平白文本。北京网站建设
北京网站设计
在XHTML中,这样做会引起浏览器忽略掉注释里的任何内容。北京网站设计
网站设计
在老旧的浏览器中隐藏script和style元素的实践是退回到1990年代中期的一个习惯。我的经验是,有如此表现的浏览器是十分罕见的,所以你可以安全地忽略它们,并且停止在脚本和样式中装入SGML式注释,就算你使用的是HTML。网站制作
脚本和样式元素的内容也被当作XML网站建设
北京网站建设
样式和脚本元素是PCDATA(parsed character data,解析字符数据)块,不是CDATA(character data,字符数据)块。因此,在其内看起来像XML的任何东西都会被当作XML来解析,并且会引发错误除非是良构的。北京网站设计
北京网站制作
为了在stylee或者script块中使用<、&或者--,你需要用CDATA部分来包裹其内容:网站设计
网站制作
1. <script type="text/javascript">网站制作
2. <![CDATA[北京网页设计
3. ...北京网站设计
4. ]]>北京网站设计
5. </script>北京网站制作
北京网页设计
在CDATA部分内,你可以任何顺序的字符,它们不会被当作XML来解析(除了结束CDATA部分]]>。)网站制作
北京网站设计
需要以text/html发送的文档中,CDATA部分的起始和结束标签需要注释掉,以便在不能处理CDATA部分的浏览器中隐藏:企通互联
网站设计
1. <script type="text/javascript">北京网站设计
2. // <![CDATA[北京网站建设
3. ...北京网页设计
4. // ]]>北京网站制作
5. </script>网页设计
网页设计
1. <style type="text/CSS">北京网站设计
2. /* <![CDATA[ */网站设计
3. ...网站制作
4. /* ]]> */网页设计
5. </style>网站设计
网站制作
如果要确保够老的浏览器隐藏CDATA部分,需要使用更为复杂的方法,像在Ian Hickson的Sending XHTML as text/html Considered Harmful中描述的那样:企通互联
网站制作
1. <script type="text/javascript">企通互联
2. <!--//--><![CDATA[//><!--北京网站设计
3. ...北京网站设计
4. //--><!]]>企通互联
5. </script>网页设计
网站设计
1. <style type="text/css">网站建设
2. <!--/*--><![CDATA[/*><!--*/网站建设
3. ...网站建设
4. /*]]>*/-->北京网站设计
5. </style>网站制作
北京网站制作
一个更好的办法可能是在发送text/html的文档前使用content negotiation脚本来删除任何CDATA部分。网页设计
北京网页设计
当然,最聪明和安全的途径是把所有的CSS和JavaScript都移动到外部文件中,但不总是现实的做法。企通互联
没有会自动补全的元素北京网站制作
网站建设
在HTML中,假如表格的tbody元素漏写的话浏览器会自动补全,而XHTML不会。如果你没有清楚地添加tbody,它就不会出现。在编写CSS选择器和JavaScript的时候请铭记在心。北京网站制作
用document.write编写的脚本不再工作网站建设
北京网站建设
在XHTML中使用JavaScript,document.write不会工作。Ian Hickson在Why document.write() doesn’t work in XML(本站早已翻译:为什么document.write在XML中不工作)解释了原因。你需要使用document.createElementNS()代替。关于更多可以在Experts Exchange中的论坛主题中找到。北京网页设计
北京网站建设
这也是Google AdSense 网站制作不在XHTML中工作的原因之一。那些希望以application/xhtml+xml伺服XHTML并且使用Google广告的人,这儿有一个解决办法:Simon Jessey的 Making AdSense work with XHTML(本站早有翻译:使Google广告AdSense在XHTML中工作)。尽管有点麻烦,但还是工作了(我在这里也使用了),同时被Google所认可。北京网站设计
引入样式元素网页设计
网页设计
在XHTML中,为了兼容定义CSS规则的XML方法,你应该使用XML样式表声明(访问 XHTML 1.0, Second Edition: Referencing Style Elements when serving as XML的XML样式表声明和Associating Style Sheets with XML documents的xml-stylesheet处理说明)。要载入外部CSS文件,我们需要使用style元素,同时应该使用XML样式表声明来引入样式元素。为此,使用id属性给style元素一个分解的标识符,然后在XML样式表声明中引入该标识符:北京网站建设
北京网页设计
1. <?xml-stylesheet href=”stylesheet1.css” type=”text/css”?>网页设计
2. <?xml-stylesheet href=”#stylesheet2” type=”text/css”?>网页设计
3. <!DOCTYPE html北京网站设计
4. PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN”北京网站制作
5. “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>北京网站建设
6. <html xmlns=”http://www.w3.org/1999/xhtml” xml:lang=”en” lang=”en”>北京网站设计
7. <head>北京网页设计
8. <title>XML stylesheet declaration</title>网站制作
9. <style type=”text/css” id=”stylesheet2”>企通互联
10. @import “stylesheet2.css”;网页设计
11. </style>企通互联
12. </head>网站建设
网站制作
我不知道在实际中究竟有多必要,比且不使用XML样式表声明的话会有什么问题。或许有人会指点我的。北京网站制作
CSS的应用规则有些不一样北京网页设计
北京网站建设
CSS应用到body的性质(property)并不应用到XHTML的整个文档。最值得注意的是应用背景颜色或者图片。在HTML中,应用到body元素的背景将会覆盖整个页面。在XHTML中,你必须同时样式化html。在Juicy Studio的 CSS body Element Test中有这个行为的演示。北京网页设计
网站制作
在XHTML中作为CSS规则的元素和属性名字是大小写敏感的(而且必须是小写的)。避免问题最简单的办法是,不管在HTML,XHTML还是CSS中所有东西都保持小写。北京网站制作
有挑战,但不是不可能网站制作
网页设计
当我开始为兼容的浏览器伺服XHTML为application/xhtml+xml时,在作出决定前假如我能读到想这篇一样的文章,或许我的头痛可以减轻不少。我甚至考虑使用HTML 4.01 Strict。虽然如此,我还是从经验中学到不少,而学习总是一个好东西。企通互联
网站建设
正确地使用真正的XHTML,十分希望这篇文章能为你提供一些更有用的信息,并且可以为是否需要走这条路提供更多有根据的决定。北京网页设计
企通互联
HTML和XHTML可能比我在这里提到的还有更多地不同,所以在这里把你在使用application/xhtml+xml的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"?>网站设计
只有五个实体是安全的北京网站制作
网站制作
只有五个预定义的实体(<、 企通互联>、&、 北京网页设计 "和')的支持是有担保的。其他的可能完全被忽略或者直接输出。比如,如果XHTML文档包含如 或者”的实体,Safari会生成。直接地。Opera反而选择忽略未知的实体,同时Mozila家族会认得这些实体并且就像HTML中“如果文档引用公共的映射浏览器伪DTD目录中的标识符并且没有单独声明的文档” 来处理。网站设计
北京网站制作
使用 www.qitongnet.comUTF-8字符编码是备受推荐的最好实践,让你(几乎)可以使用你需要键入文档的任意字符,不需要实体或者字符编号。如果你不能或不愿使用UTF-8,数字式的字符编号是可以支持和安全使用的。 网页设计网站建设
SGML式注释的内容可能会被忽略网站建设
网站制作
SGML注释(HTML风格注释, <!-- 注释 -->)可能会(并且会)被浏览器当作注释,就算是在 网站设计script或者style元素内部使用。网站建设
网页设计
在HTML中,普遍地把sript和style块的内容装入注释中,为的是在不认识script或者style元素的浏览器中隐藏他们,并且在页面上把其内容生成平白文本。北京网站建设
北京网站设计
在XHTML中,这样做会引起浏览器忽略掉注释里的任何内容。北京网站设计
网站设计
在老旧的浏览器中隐藏script和style元素的实践是退回到1990年代中期的一个习惯。我的经验是,有如此表现的浏览器是十分罕见的,所以你可以安全地忽略它们,并且停止在脚本和样式中装入SGML式注释,就算你使用的是HTML。网站制作
脚本和样式元素的内容也被当作XML网站建设
北京网站建设
样式和脚本元素是PCDATA(parsed character data,解析字符数据)块,不是CDATA(character data,字符数据)块。因此,在其内看起来像XML的任何东西都会被当作XML来解析,并且会引发错误除非是良构的。北京网站设计
北京网站制作
为了在stylee或者script块中使用<、&或者--,你需要用CDATA部分来包裹其内容:网站设计
网站制作
1. <script type="text/javascript">网站制作
2. <![CDATA[北京网页设计
3. ...北京网站设计
4. ]]>北京网站设计
5. </script>北京网站制作
北京网页设计
在CDATA部分内,你可以任何顺序的字符,它们不会被当作XML来解析(除了结束CDATA部分]]>。)网站制作
北京网站设计
需要以text/html发送的文档中,CDATA部分的起始和结束标签需要注释掉,以便在不能处理CDATA部分的浏览器中隐藏:企通互联
网站设计
1. <script type="text/javascript">北京网站设计
2. // <![CDATA[北京网站建设
3. ...北京网页设计
4. // ]]>北京网站制作
5. </script>网页设计
网页设计
1. <style type="text/CSS">北京网站设计
2. /* <![CDATA[ */网站设计
3. ...网站制作
4. /* ]]> */网页设计
5. </style>网站设计
网站制作
如果要确保够老的浏览器隐藏CDATA部分,需要使用更为复杂的方法,像在Ian Hickson的Sending XHTML as text/html Considered Harmful中描述的那样:企通互联
网站制作
1. <script type="text/javascript">企通互联
2. <!--//--><![CDATA[//><!--北京网站设计
3. ...北京网站设计
4. //--><!]]>企通互联
5. </script>网页设计
网站设计
1. <style type="text/css">网站建设
2. <!--/*--><![CDATA[/*><!--*/网站建设
3. ...网站建设
4. /*]]>*/-->北京网站设计
5. </style>网站制作
北京网站制作
一个更好的办法可能是在发送text/html的文档前使用content negotiation脚本来删除任何CDATA部分。网页设计
北京网页设计
当然,最聪明和安全的途径是把所有的CSS和JavaScript都移动到外部文件中,但不总是现实的做法。企通互联
没有会自动补全的元素北京网站制作
网站建设
在HTML中,假如表格的tbody元素漏写的话浏览器会自动补全,而XHTML不会。如果你没有清楚地添加tbody,它就不会出现。在编写CSS选择器和JavaScript的时候请铭记在心。北京网站制作
用document.write编写的脚本不再工作网站建设
北京网站建设
在XHTML中使用JavaScript,document.write不会工作。Ian Hickson在Why document.write() doesn’t work in XML(本站早已翻译:为什么document.write在XML中不工作)解释了原因。你需要使用document.createElementNS()代替。关于更多可以在Experts Exchange中的论坛主题中找到。北京网页设计
北京网站建设
这也是Google AdSense 网站制作不在XHTML中工作的原因之一。那些希望以application/xhtml+xml伺服XHTML并且使用Google广告的人,这儿有一个解决办法:Simon Jessey的 Making AdSense work with XHTML(本站早有翻译:使Google广告AdSense在XHTML中工作)。尽管有点麻烦,但还是工作了(我在这里也使用了),同时被Google所认可。北京网站设计
引入样式元素网页设计
网页设计
在XHTML中,为了兼容定义CSS规则的XML方法,你应该使用XML样式表声明(访问 XHTML 1.0, Second Edition: Referencing Style Elements when serving as XML的XML样式表声明和Associating Style Sheets with XML documents的xml-stylesheet处理说明)。要载入外部CSS文件,我们需要使用style元素,同时应该使用XML样式表声明来引入样式元素。为此,使用id属性给style元素一个分解的标识符,然后在XML样式表声明中引入该标识符:北京网站建设
北京网页设计
1. <?xml-stylesheet href=”stylesheet1.css” type=”text/css”?>网页设计
2. <?xml-stylesheet href=”#stylesheet2” type=”text/css”?>网页设计
3. <!DOCTYPE html北京网站设计
4. PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN”北京网站制作
5. “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>北京网站建设
6. <html xmlns=”http://www.w3.org/1999/xhtml” xml:lang=”en” lang=”en”>北京网站设计
7. <head>北京网页设计
8. <title>XML stylesheet declaration</title>网站制作
9. <style type=”text/css” id=”stylesheet2”>企通互联
10. @import “stylesheet2.css”;网页设计
11. </style>企通互联
12. </head>网站建设
网站制作
我不知道在实际中究竟有多必要,比且不使用XML样式表声明的话会有什么问题。或许有人会指点我的。北京网站制作
CSS的应用规则有些不一样北京网页设计
北京网站建设
CSS应用到body的性质(property)并不应用到XHTML的整个文档。最值得注意的是应用背景颜色或者图片。在HTML中,应用到body元素的背景将会覆盖整个页面。在XHTML中,你必须同时样式化html。在Juicy Studio的 CSS body Element Test中有这个行为的演示。北京网页设计
网站制作
在XHTML中作为CSS规则的元素和属性名字是大小写敏感的(而且必须是小写的)。避免问题最简单的办法是,不管在HTML,XHTML还是CSS中所有东西都保持小写。北京网站制作
有挑战,但不是不可能网站制作
网页设计
当我开始为兼容的浏览器伺服XHTML为application/xhtml+xml时,在作出决定前假如我能读到想这篇一样的文章,或许我的头痛可以减轻不少。我甚至考虑使用HTML 4.01 Strict。虽然如此,我还是从经验中学到不少,而学习总是一个好东西。企通互联
网站建设
正确地使用真正的XHTML,十分希望这篇文章能为你提供一些更有用的信息,并且可以为是否需要走这条路提供更多有根据的决定。北京网页设计
企通互联
HTML和XHTML可能比我在这里提到的还有更多地不同,所以在这里把你在使用application/xhtml+xml的XHTML时遇到的问题提出来,如果你知道任何的错误或者忽略,务必告诉我。北京网站设计
北京网站制作
上一篇:北京网页设计制作三维表格效果
下一篇:网站设计在IE中为abbr标签加样式