1.文件格式

首先要遇到的问题肯定是文件格式,在作 web开发时,大家都是用的html或xhtml,到了wap开发时,就得用wml了.什么是wml?大家可以去查更详细的资料,我这里只是略微的提到. 在我看来wml类似于xml,有非常严格的格式,在作wap页面时,都得用wml来作为显示.

wml的语法非常简单,在用php作动态输出时,一定要发送一个头信息,标明本页面是wml,而不是别的什么*ml.

header("Content-type: text/vnd.wap.wml; charset="gb2312"");

?>

这里用的字符集是gb2312,在移动的平台上是没有任何问题的,但在联通的平台上就不行了,一定得用utf-8,为了更通用,还是用utf-8更安全.即

header("Content-type: text/vnd.wap.wml; charset="utf-8"");

?>

2.编码

上面说了字符集都应采用utf-8,这是一种容纳了多国语言的字符集,一个汉字是占双字节,utf-8占了4个字节,因此其容纳的信息量更大.在手机上编写的汉字,在将页面内码转成utf-8后,以后再打开就可能是一堆乱码.因此大家在作注释时,尽可能的用英文注释,省得以后看不懂.像editplus, ultraedit等工具都可以转文件内码.

3.适配

世界各大手机厂商真是有病,开发出的手机千奇百怪,可以支持的格式也是五花八门.比如铃声,有的可以支持,16,32,48和弦,支持mid,wmv,有的不完全支持;有的支持gif,png,bmp,有的也不完全支持.这虽然是把手机的档次和成本拉开了,但却苦了作手机开发的兄弟们了.因为不可避免的要对手机所能支持的图片,铃声等多媒体信息作出一个匹配,这个匹配的处理,我们一般叫做手机适配.

要作手机适配,我们一般得有如下资料.

1)一份详细的手机适配资料表,里面应详细的说明手机所能支持的铃声,图片格式,还得有手机型号等信息

2)要正确的获取手机的UA,什么是UA,就是(user agent),实际上就是用户的手机信息.

有了上面的东东我们才能做出适配.以下给出一个我写的在wap开发中用到的类,可以用来取手机号,手机UA.

/**

* 类名: mobile

* 描述: 手机信息类

* 其他: 偶然 编写

*/

class mobile

{

/**

* 函数名称: getPhoneNumber

* 函数功能: 取手机号

* 输入参数: none

* 函数返回值: 成功返回号码,失败返回false

* 其它说明: 说明

*/

function getPhoneNumber()

{

if (isset($_SERVER['HTTP_X_NETWORK_INFO']))

{

$str1 = $_SERVER['HTTP_X_NETWORK_INFO'];

$getstr1 = preg_replace('/(.*,)(11[d])(,.*)/i','',$str1);

Return $getstr1;

}

elseif (isset($_SERVER['HTTP_X_UP_CALLING_LINE_ID']))

{

$getstr2 = $_SERVER['HTTP_X_UP_CALLING_LINE_ID'];

Return $getstr2;

}

elseif (isset($_SERVER['HTTP_X_UP_SUBNO']))

{

$str3 = $_SERVER['HTTP_X_UP_SUBNO'];

$getstr3 = preg_replace('/(.*)(11[d])(.*)/i','',$str3);

Return $getstr3;

}

elseif (isset($_SERVER['DEVICEID']))

{

Return $_SERVER['DEVICEID'];

}

else

{

Return false;

}

}

/**

* 函数名称: getHttpHeader

* 函数功能: 取头信息

* 输入参数: none

* 函数返回值: 成功返回号码,失败返回false

* 其它说明: 说明

*/

function getHttpHeader()

{

$str = ''

foreach ($_SERVER as $key=>$val)

{

$gstr = str_replace("&","&",$val);

$str.= "$key -> ".$gstr." ";

}

Return $str;

}

/**

* 函数名称: getUA

* 函数功能: 取UA

* 输入参数: none

* 函数返回值: 成功返回号码,失败返回false

* 其它说明: 说明

*/

function getUA()

{

if (isset($_SERVER['HTTP_USER_AGENT']))

{

Return $_SERVER['HTTP_USER_AGENT'];

}

else

{

Return false;

}

}

/**

* 函数名称: getPhoneType

* 函数功能: 取得手机类型

* 输入参数: none

* 函数返回值: 成功返回string,失败返回false

* 其它说明: 说明

*/

function getPhoneType()

{

$ua = $this->getUA();

if($ua!=false)

{

$str = explode(' ',$ua);

Return $str[0];

}

else

{

Return false;

}

}

/**

* 函数名称: isOpera

* 函数功能: 判断是否是opera

* 输入参数: none

* 函数返回值: 成功返回string,失败返回false

* 其它说明: 说明

*/

function isOpera()

{

$uainfo = $this->getUA();

if (preg_match('/.*Opera.*/i',$uainfo))

{

Return true;

}

else

{

Return false;

}

}

/**

* 函数名称: isM3gate

* 函数功能: 判断是否是m3gate

* 输入参数: none

* 函数返回值: 成功返回string,失败返回false

* 其它说明: 说明

*/

function isM3gate()

{

$uainfo = $this->getUA();

if (preg_match('/M3Gate/i',$uainfo))

{

Return true;

}

else

{

Return false;

}

}

/**

* 函数名称: getHttpAccept

* 函数功能: 取得HA

* 输入参数: none

* 函数返回值: 成功返回string,失败返回false

* 其它说明: 说明

*/

function getHttpAccept()

{

if (isset($_SERVER['HTTP_ACCEPT']))

{

Return $_SERVER['HTTP_ACCEPT'];

}

else

{

Return false;

}

}

/**

* 函数名称: getIP

* 函数功能: 取得手机IP

* 输入参数: none

* 函数返回值: 成功返回string

* 其它说明: 说明

*/

function getIP()

{

$ip=getenv('REMOTE_ADDR');

$ip_ = getenv('HTTP_X_FORWARDED_FOR');

if (($ip_ != "") && ($ip_ != "unknown"))

{

$ip=$ip_;

}

return $ip;

}

}

?>

4.页面设计

作wap开发时,wap页面是非常简单的.比html来说是简单到不能再简单了.在wap1.0里是没有表格之类的乱七八糟的东西的.所有的标签都是写在一个叫card的标签之内.可以用来分段.所以做页面的算是轻松了.

5.模拟器

作wap 开发免不了要用各式各样的模拟器来测试,比较好的有m3gate,openwave,opera,还有一个叫winwap的,大家最好别用他来作测试,他的兼容性太好了,即使页面有错误都能给忽略掉.测试时跟用浏览器测试web页面一样,输入网址就可以了.没有比这更容易的事了.

6.注意事项

1)空格,特别是在定义DTD时,

echo "";

?>

里面如果哪个地方少个空格,就有你受的了.以前写的时候用了页面重排之后,把一些空格给干掉了,整整找了两天才找出错误来,大家千万别步我的后尘.

2)标签,如果标签不成对,会提示错误,大家注意就是了,很容易修正.

php没开启wap功能,php作wap开发时遇到的问题相关推荐

  1. android开启加速功能,Android硬件加速开发简介

    从 Android 3.0(API Level 11)开始,Android 2D 渲染管线被设计为能更好地支持硬件加速功能. 硬件加速功能将所有在 View 组件的 Canvas 上执行的绘制操作都交 ...

  2. 让你的浏览器具备Wap功能

    让IE支持WAP浏览,导入注册表 WAP注册表文件内容就是: Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER/Software/Clas ...

  3. Redis集群CentOS系统配置企业级数据备份方案以及数据恢复的操作(在开启AOF功能下恢复冷备RDB文件数据,保持AOF和RDB双开情况下恢复数据及错误的数据恢复步骤详解)

    1. 设置每小时保存一份 /var/redis/6379/dump.rdb 文件至指定目录(我这边存放在 /usr/local/redis_backup 目录下),并删除48小时前的文件.     为 ...

  4. 应用系统怎么开启审计功能_win10系统开启分屏功能的设置方法

    使用深度win10纯净版系统的用户,都知道win10系统里面都内置有分屏功能,分屏可以一台电脑使用两个桌面,可以让多个网页或者任务同时在一个窗口下显示,这样能够使我们提高工作效率.你还能在同一屏幕下一 ...

  5. 如何在源码包编译安装的 LEMP 环境下开启 OpenSSL 功能

    如何在源码包编译安装的 LEMP 环境下开启 OpenSSL 功能 Hello,大家好!我是--邪恶君子! 今天,给大家分享一下解决源码包编译安装 LEMP 环境下开启 OpenSSL 功能问题的过程 ...

  6. WAP网站流量分析 WAP流量统计 wap网站流量统计

    随着3G在中国的发展以及手机上网用户的增长,免费wap做为手机广告的载体,业内人士预测在未来的中国无线网络营销将大放异彩. WAP的兴盛标志着市场已经走向成熟,WAP站长迫切需要如何了解用户,把握用户 ...

  7. 如何开启APP2SD功能

    开启APP2SD功能 当我们把Nexus One升级到Android 2.2后会发现该系统原生支持的APP2SD功能并没被激活,即应用程序菜单中"移动至SD卡"按钮是灰色不能按的. ...

  8. WEB和WAP有什么区别前端开发的趋势

    WEB和WAP有什么区别前端开发的趋势-随着移动互联网的发展,移动端的占比已经越来越高,移动设备已经越来越占用消费者设备的时间,以前电脑才能拥有的功能,现在手机基本都可以实现.预计在未来的几年时间里, ...

  9. 【技巧】Edge浏览器更换chrome主题、选项卡悬浮预览(开启实验功能)

    [2020.12.06更新]微软新版edge的最新版本更新已经支持直接安装第三方商店的主题了,所以不用开启实验功能了!(不过其他实验功能了解下也是极好滴~)    自从微软推出了新版以Chromium ...

最新文章

  1. Silverlight 4 WebBrowser的使用及调用 WebBrowser 中的 javascript 方法
  2. object-c语言的nonatomic,assign,copy,retain的区别
  3. 10 words and phrases that shouldn’t be on your résumé
  4. weblogic部署ssh2应用出现异常
  5. JZOJ 4437. 【HNOI2016模拟4.10】线性代数与逻辑
  6. Android 中文 API ——对话框 AlertDialog.Builder
  7. python基础——变量
  8. 计算机网络网际协议实验报告,计算机网络课程网际协议IP地址实验报告.doc
  9. 基于SSM的新闻管理系统
  10. ADB投屏_手机无需安装客户端的【安卓投屏】
  11. python正则取反,一文搞定Python正则表达式
  12. android keystore 查看、修改密码和别名等
  13. 阿里王坚眼中的互联网、数据和AI
  14. matlab仿真的英文文献,matlab 外文翻译 外文文献 英文文献 MATALAB 混合仿真平台控制算法的概述...
  15. Spring5:p命名和c命名空间注入
  16. 计算机网络机房自查报告,银行机房自查报告
  17. 学术-物理-维空间:二维空间
  18. Appium用xpath定位掌阅APP导航页的跳过按钮(只有class和index)
  19. 内鬼黑客狂卖个人信息 “年产值”飙上千亿
  20. Excel-VBA操作文件四大方法

热门文章

  1. Excel保护加密、解密、忘记密码该怎么办?
  2. java连接accdb,尝试通过Java 8中的JDBC-ODBC连接到.accdb文件时,出现ClassNotFoundException...
  3. USB、串口、422、485、CAN接口互转模块
  4. python抓取网页数据并截图_网络爬虫-使用Python抓取网页数据
  5. 【VRP问题】基于节约算法CW求解带硬时间窗的车辆路径规划问题(VRPTW)matlab源码
  6. oracle锁表后,系统能否自动解锁?
  7. 七牛云招聘~视频云产品经理
  8. HR给新员工的前期入职工作
  9. 大学校友会校友卡小程序功能与UI设计
  10. 算法初级_Question7_最佳存款方案(java实现)