为什么我的XHTML5页面会导致IE的怪癖模式?

时间:2011-08-08 15:03:21

标签: internet-explorer xhtml quirks-mode html5

为什么我的XHTML5页面会导致IE的怪癖模式?

这是doctype等,包括发送MIME类型的PHP和<?

<?php header('Content-Type: application/xml;charset=UTF-8'); ?>
<?php echo '<?';?>xml version="1.0" encoding="UTF-8"?>
<?php echo '<?';?>xml-stylesheet type="text/xsl" href="ie-xhtml-fix.xsl"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" dir="ltr">
<head><meta charset="UTF-8" />

然后来自http://www.w3.org/MarkUp/2004/xhtml-faq#ie的ie-xhtml-fix.xsl是:

<stylesheet version="1.0"
     xmlns="http://www.w3.org/1999/XSL/Transform">
    <template match="/">
        <copy-of select="."/>
    </template>
</stylesheet>

对不起我要问。我似乎无法弄清楚这一点,我找不到任何可能导致问题的信息。我希望它能在IE7及以上版本中运行。

1 个答案:

答案 0 :(得分:2)

问题似乎是你的XSLT模板正在将处理指令复制到输出,这意味着它们在doctype之前被IE解析,这导致IE进入Quirks模式。

请尝试使用此XSLT:

<stylesheet version="1.0"
     xmlns="http://www.w3.org/1999/XSL/Transform">
    <output method="html" version="1.0" encoding="UTF-8" doctype-system="about:legacy-compat" />

    <!-- Copy all the child nodes of the root -->
    <template match="/"> 
        <copy>
           <apply-templates select="node()|@*"/>
         </copy>
    </template>

    <!-- For any other node, just copy everything -->
    <template match="node()|@*"> 
       <copy-of select="."/>
    </template>

    <!-- For processing instructions directly under the root, discard -->
    <template match="/processing-instruction()" />
</stylesheet>

在IE6及以上版本中经过测试和工作。