日期:2014-05-17 浏览次数:20703 次
下面三个 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 类型从而动态地选择. 例如,? 你的服务器发现某用户代理能处理 "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 类型, 你就可以使用你喜欢的其它文件扩展. 如果你要用 ASP, JSP, Perl, PHP 或 SSI (服务器端包含) 之类的服务器端语言往 XHTML MP 文档中动态添加内容, 你或许要将你的 XHTML MP 文档的文件扩展修改为服务器端所用的技术. 例如, PHP 所用的典型扩展为 ".php", 而 SSI 所用的典型扩展为 ".shtml".
?
多普达S1 IE:??