热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用PHP编程语言开发动态WAP页面

WAP(无线通讯协议)是在数字移动电话、个人手持设备(PDA等)及计算机之间进行通讯的开放性全球标准协议。随着无线通讯的不断发展,静态的WAP页面在很多方面已经不能满足用户个性化的要求,因此开发者可以在WAP服务器端使用诸如PHP等语言产生动态的WML页面,来满足
WAP (无线通讯协议)是在数字移动电话、个人手持设备( PDA 等)及计算机之间进行通讯的开放性全球标准协议。随着无线通讯的不断发展,静态的WAP页面在很多方面已经不能满足用户个性化的要求,因此开发者可以在WAP服务器端使用诸如 PHP 等语言产生动态的 WML 页面,来满足用户的需要。


   WAP 的应用结构非常类似于 Internet,一个典型的 WAP 应用请求步骤描述如下:

   1. 具有 WAP 用户代理功能的移动终端(如 WAP 手机),通过内部运行的微浏览器向某一网站发送 WAP 服务请求。该请求先由 WAP 网关截获,对信息内容进行编码压缩,以减少网络数据流量,同时根据需要将 WAP 协议转换成 HTTP 协议。

   2. 协议将处理后的请求转送到相应 WAP 服务器。在 WAP 服务器端,根据页面扩展名等属性,被请求的页面直接或由服务器端脚本解释后输出,再经过网关传回给用户。

  从上述的 WAP 应用流程可以发现,生成动态 WAP 页面与动态产生 Web 网页的过程非常相似。但是由于 WAP 应用使用的 WML 语言来源于语法严格的 XML,因此要求输出的格式必须按 WAP 网页的规范输出。同时,由于 WAP 协议的应用范围及移动客户端的软、硬件配置等局限性,对每次输出的页面的大小、图像的格式及容量都有一定限制。本文笔者将以 PHP 语言为例,和广大网络程序开发爱好者共同探讨动态输出WAP页面的方法和应用。

  输出简单的动态 WAP 页面

  由于生成 WAP 页面的过程和生成一般的 Web 页面非常类似,笔者通过一个最简单的 WAP 页面的例子来介绍。不过提醒一句:由于需要 PHP 解释器来解释该程序并输出WAP页面,因此所有类似的程序应以“php”为扩展名哦。

  
  header("Content-type: text/vnd.wap.wml"); //定义输出文档为 WML 类型

  echo (" ");

  echo ( "Hello WAP" );

  echo ("");

  ?>

  该实例可以在 WAP 手机模拟器中浏览,输出一句经典的“Hello WAP”语句,但是在普通的网络浏览器中是无法识别的,原因很简单,在程序开头声明了该输出文档为WML类型,只有 WAP 设备能够识别并解释。不过又要提醒一句:常见的 HTML 语言对规范性要求不严,大多数浏览器能“宽容”地接受其中的编写错误,但是WML的规范相当严格,任何的错误都可能导致无法输出所需的页面。

   实例1 动态生成图像

  WAP 使用的图像是一种特殊的黑白图像格式:WBMP。开发者可以使用一些现有的工具将一般图像转换成WBMP格式,然后在 WML 文档中使用。但是如果在WAP程序中能动态地生成所需图像(如股市的K线图),将会使程序有极其广阔的应用前景。PHP 提供了强大的图形绘制功能,下面的实例将将在WAP模拟器中显示一个黑色的矩形框。

   (注意:要使用 GD 的图像函数库,必须在 PHP 配置中加载“PHP_GD.DLL”库文件。)

  
  Header("Content-type: image/vnd.wap.wbmp"); //定义输出的图像格式为 WBMP

  Sim = ImageCreate(50, 50);

  Swhite = ImageColorAllocate(Sim,255,255,255);

  Sblack = ImageColorAllocate(Sim,0,0,0);

  ImageRectangle(Sim, 5, 5, 20, 20, Sblack);

  ImageWBMP(Sim);

  ImageDestroy(Sim);

  ?>

  实例2 处理汉字

  作为一种全球应用的协议,WAP 选择了 UNICODE 2.0 作为其标准字符集编码,能够同时处理英、中、日、法等多种文字。但是开发者日常处理的汉字是 GB2312 编码,不同的内码标准必定不能通用,因此,如果不在两种编码之间通过码制的转换,就会出现汉字乱码的现象。目前的大多数 WAP 手机 (Nokia7110、爱立信 R320S 等等)都使用 UTF-8(即 UNICODE) 来编码的。如果直接在WML使用中文字符(GB2312 编码),将会产生乱码,导致手机用户无法识别,因此在输出中文之前,必须使用程序或函数(关于此类的 PHP 函数库,网络上已有非常多技术上成熟的产品可以下载)对中文进行 UNICODE 的编码。而在少数支持 GB2312 编码的手机或 WAP 终端设备中,开发者只需在程序中定义文档的内码类型后,即可直接正确显示汉字,看一个实例:

  
  header("Content-type: text/vnd.wap.wml; charset=gb2312"); //定义字符的编码为 GB2312

  echo ("");

  echo ("你好");

  echo ("");

  ?>

   在程序的“header”语句中,定义了文字的编码为 GB2312,如果用户的手机支持 GB2312 编码,将会显示“你好”的字样。

  作为未来网络通讯的主导,WAP 程序的开发已日趋热门。相信通过本文的阅读,能使开发者对使用 PHP 进行 WAP 开发有一个初步的印象,希望广大读者能在本文的基础上,参考WML语言,开发出更加强大的 WAP 应用程序。



摘自:新浪科技
推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
author-avatar
kg9854997
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有