日期:2014-05-17  浏览次数:20691 次

XHTML MP MIME 类型与文件扩展
MIME 类型
下面三个 MIME 类型可用于 XHTML MP 文档:

   application/vnd.wap.xhtml+xml   application/xhtml+xml   text/html
   开放移动联盟 (Open Mobile Alliance, OMA) 为 XHTML MP 文档指定的 MIME 类型为 "application/vnd.wap.xhtml+xml".
   该 MIME 类型对于要正确显示 XHTML MP 文档的一些 WAP 浏览器 (比如, 一些诺基亚60系列浏览器) 来说是必须的.

   另一个可选择的 MIME 类型是 "application/xhtml+xml".
   该类型是 XHTML 系列文档的 MIME 类型.

   "text/html" MIME 类型也是一个可用的选择. 它是 HTML 文档的 MIME 类型. XHTML MP 文档使用 "text/html" 有一个好处是你的 XHTML MP 页面在普通 Web 浏览器是显示也是没有任何问题的. (一些像 IE6 之类的 Web 浏览器并不能显示带有

   "application/vnd.wap.xhtml+xml" 或 "application/xhtml+xml" MIME 类型的文档, 而是会弹出对话框让你用外部程序打开或找个地方保存文件.) 缺点是用户代理 (User Agent) 将不会把你的 XHTML MP 页面视为 XML 文档, 也就意味着即使标记代码没有严格遵守 XML 规则, 用户代理也不会抱怨什么.

  动态选择 MIME 类型

   另一个选项是探测某用户代理可处理的 MIME 类型从而动态地选择.
   例如,  你的服务器发现某用户代理能处理 "application/vnd.wap.xhtml+xml" MIME 类型, 然后你的所有 XHTML MP 文档都会用 "application/vnd.wap.xhtml+xml" 传输给该用户代理.

   要想动态选择 MIME 类型, 你需要用服务器端语言 (如 PHP, ASP, JSP, Perl) 写几行代码. 伪代码如下:

   1. 获取收到的 HTTP 请求的 Accept Header 值. Accept Header 包含了发送请求的客户端用户代理所能处理的所有的 MIME 类型.

   2. 如果 Accept Header 值包含 "application/vnd.wap.xhtml+xml", 将 XHTML MP 文档的 MIME 类型设为 "application/vnd.wap.xhtml+xml".
     否则如果 Accept Header 值包含 "application/xhtml+xml", 将 XHTML MP 文档的 MIME 类型设为 "application/xhtml+xml".
     否则将 XHTML MP 文档的 MIME 类型设为 "text/html".

下面的例子演示了怎样用 PHP 编写上述代码. 如果你用的服务器端技术不是 PHP, 代码将稍有不同, 但基本思想没有变化.


<?php
    $acceptHeader = $_SERVER['HTTP_ACCEPT']; 
    if (false !== strpos($acceptHeader, 'application/vnd.wap.xhtml+xml'))  
        header('Content-type: application/vnd.wap.xhtml+xml');
    else if (false !== strpos($acceptHeader, 'application/xhtml+xml'))   
        header('Content-type: application/xhtml+xml');
    else  
        header('Content-type: text/html');
?> 
 


这里是上述 PHP 代码的一些描述:

1. Accept Header 的值是从 HTTP 请求中获取的. 然后将其存放于 acceptHeader 中.
   $acceptHeader = $_SERVER['HTTP_ACCEPT'];

2. 接下来, 检查变量 $acceptHeader, 看其是否包含关键字 "application/vnd.wap.xhtml+xml" 或 "application/xhtml+xml". 字符串函数 strpos(string $haystack, string $needle) 返回 $needle 第一次出现的位置. 如果没有找到 $needle, strpos(string $haystack, string $needle) 将返回 false. 也就是说, 如果找到 $needle 了的话, 返回值将不会是 false.

if (false !== strpos($acceptHeader, 'application/vnd.wap.xhtml+xml'))...else if (false !== strpos($acceptHeader, 'application/xhtml+xml'))...

3. 方法

header('Content-type: ...');
用于设置文档的 MIME 类型.



下面的例子演示了如何在实际的 XHTML MP 文档中使用 PHP 代码. 你要做的非常简单 -- 复制 PHP 代码并粘贴到 XHTML MP 文档中 并用 ".php" 作为文件扩展名. (我们将在后面的章节中作深入讨论此例中的 XHTML MP 标记.)

hello_world.php

<?php
    $acceptHeader = $_SERVER['HTTP_ACCEPT']; 
    if (false !== strpos($acceptHeader, 'application/vnd.wap.xhtml+xml'))  
        header('Content-type: application/vnd.wap.xhtml+xml');
    else if (false !== strpos($acceptHeader, 'application/xhtml+xml'))  
        header('Content-type: application/xhtml+xml');
    else  
        header('Content-type: text/html');
?>
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">  
<head>    
  <title>XHTML MP 教程</title>  
</head>   
<body>    
   <p>大家好. 欢迎大家来学习 XHTML MP 教程.</p>  
</body>
</html>   


静态 XHTML MP 文档的典型扩展名为 ".xhtml", ".html" and ".htm".
只要在 WAP 服务器的配置文件里正确设置了和文件扩展相关联的 MIME 类型, 你就可以使用你喜欢的