Discuz教程网

PHP作WAP开发时遇到的问题

[复制链接]
authicon dly 发表于 2011-4-2 18:58:39 | 显示全部楼层 |阅读模式
1.文件格式
首先要遇到的问题肯定是文件格式,在作web开发时,大家都是用的html或xhtml,到了wap开发时,就得用wml了.什么是wml?大家可以去查更详细的资料,我这里只是略微的提到.在我看来wml类似于xml,有非常严格的格式,在作wap页面时,都得用wml来作为显示.
wml的语法非常简单,在用php作动态输出时,一定要发送一个头信息,标明本页面是wml,而不是别的什么*ml.

  1. header("Content-type: text/vnd.wap.wml; charset="gb2312"");
  2. ?>
复制代码

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

  1. header("Content-type: text/vnd.wap.wml; charset="utf-8"");
  2. ?>
复制代码

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.

  1. /**
  2. * 类名: mobile
  3. * 描述: 手机信息类
  4. * 其他: 偶然 编写
  5. */
  6. class mobile
  7. {
  8. /**
  9. * 函数名称: getPhoneNumber
  10. * 函数功能: 取手机号
  11. * 输入参数: none
  12. * 函数返回值: 成功返回号码,失败返回false
  13. * 其它说明: 说明
  14. */
  15. function getPhoneNumber()
  16. {
  17. if (isset($_SERVER['HTTP_X_NETWORK_INFO']))
  18. {
  19. $str1 = $_SERVER['HTTP_X_NETWORK_INFO'];
  20. $getstr1 = preg_replace('/(.*,)(11[d])(,.*)/i','',$str1);
  21. Return $getstr1;
  22. }
  23. elseif (isset($_SERVER['HTTP_X_UP_CALLING_LINE_ID']))
  24. {
  25. $getstr2 = $_SERVER['HTTP_X_UP_CALLING_LINE_ID'];
  26. Return $getstr2;
  27. }
  28. elseif (isset($_SERVER['HTTP_X_UP_SUBNO']))
  29. {
  30. $str3 = $_SERVER['HTTP_X_UP_SUBNO'];
  31. $getstr3 = preg_replace('/(.*)(11[d])(.*)/i','',$str3);
  32. Return $getstr3;
  33. }
  34. elseif (isset($_SERVER['DEVICEID']))
  35. {
  36. Return $_SERVER['DEVICEID'];
  37. }
  38. else
  39. {
  40. Return false;
  41. }
  42. } /**
  43. * 函数名称: getHttpHeader
  44. * 函数功能: 取头信息
  45. * 输入参数: none
  46. * 函数返回值: 成功返回号码,失败返回false
  47. * 其它说明: 说明
  48. */
  49. function getHttpHeader()
  50. {
  51. $str = '';
  52. foreach ($_SERVER as $key=>$val)
  53. {
  54. $gstr = str_replace("&","&",$val);
  55. $str.= "$key -> ".$gstr."\r\n";
  56. }
  57. Return $str;
  58. }
  59. /**
  60. * 函数名称: getUA
  61. * 函数功能: 取UA
  62. * 输入参数: none
  63. * 函数返回值: 成功返回号码,失败返回false
  64. * 其它说明: 说明
  65. */
  66. function getUA()
  67. {
  68. if (isset($_SERVER['HTTP_USER_AGENT']))
  69. {
  70. Return $_SERVER['HTTP_USER_AGENT'];
  71. }
  72. else
  73. {
  74. Return false;
  75. }
  76. }
  77. /**
  78. * 函数名称: getPhoneType
  79. * 函数功能: 取得手机类型
  80. * 输入参数: none
  81. * 函数返回值: 成功返回string,失败返回false
  82. * 其它说明: 说明
  83. */
  84. function getPhoneType()
  85. {
  86. $ua = $this->getUA();
  87. if($ua!=false)
  88. {
  89. $str = explode(' ',$ua);
  90. Return $str[0];
  91. }
  92. else
  93. {
  94. Return false;
  95. }
  96. }
  97. /**
  98. * 函数名称: isOpera
  99. * 函数功能: 判断是否是opera
  100. * 输入参数: none
  101. * 函数返回值: 成功返回string,失败返回false
  102. * 其它说明: 说明
  103. */
  104. function isOpera()
  105. {
  106. $uainfo = $this->getUA();
  107. if (preg_match('/.*Opera.*/i',$uainfo))
  108. {
  109. Return true;
  110. }
  111. else
  112. {
  113. Return false;
  114. }
  115. }
  116. /**
  117. * 函数名称: isM3gate
  118. * 函数功能: 判断是否是m3gate
  119. * 输入参数: none
  120. * 函数返回值: 成功返回string,失败返回false
  121. * 其它说明: 说明
  122. */
  123. function isM3gate()
  124. {
  125. $uainfo = $this->getUA();
  126. if (preg_match('/M3Gate/i',$uainfo))
  127. {
  128. Return true;
  129. }
  130. else
  131. {
  132. Return false;
  133. }
  134. }
  135. /**
  136. * 函数名称: getHttpAccept
  137. * 函数功能: 取得HA
  138. * 输入参数: none
  139. * 函数返回值: 成功返回string,失败返回false
  140. * 其它说明: 说明
  141. */
  142. function getHttpAccept()
  143. {
  144. if (isset($_SERVER['HTTP_ACCEPT']))
  145. {
  146. Return $_SERVER['HTTP_ACCEPT'];
  147. }
  148. else
  149. {
  150. Return false;
  151. }
  152. }
  153. /**
  154. * 函数名称: getIP
  155. * 函数功能: 取得手机IP
  156. * 输入参数: none
  157. * 函数返回值: 成功返回string
  158. * 其它说明: 说明
  159. */
  160. function getIP()
  161. {
  162. $ip=getenv('REMOTE_ADDR');
  163. $ip_ = getenv('HTTP_X_FORWARDED_FOR');
  164. if (($ip_ != "") && ($ip_ != "unknown"))
  165. {
  166. $ip=$ip_;
  167. }
  168. return $ip;
  169. }
  170. }
  171. ?>
复制代码

4.页面设计
作wap开发时,wap页面是非常简单的.比html来说是简单到不能再简单了.在wap1.0里是没有表格之类的乱七八糟的东西的.所有的标签都是写在一个叫card的标签之内.可以用来分段.所以做页面的算是轻松了.
5.模拟器
作wap开发免不了要用各式各样的模拟器来测试,比较好的有m3gate,openwave,opera,还有一个叫winwap的,大家最好别用他来作测试,他的兼容性太好了,即使页面有错误都能给忽略掉.测试时跟用浏览器测试web页面一样,输入网址就可以了.没有比这更容易的事了.
6.注意事项
1)空格,特别是在定义DTD时,
echo "";
?>
里面如果哪个地方少个空格,就有你受的了.以前写的时候用了页面重排之后,把一些空格给干掉了,整整找了两天才找出错误来,大家千万别步我的后尘.
2)标签,如果标签不成对,会提示错误,大家注意就是了,很容易修正.





上一篇:暴力流量精灵V1.26无限制版
下一篇:PHP调用java类的两种方法
authicon 纤陌陌 发表于 2011-5-7 22:59:51 | 显示全部楼层
顶的就是你
authicon D_hong 发表于 2011-5-11 07:59:55 | 显示全部楼层
回贴下载呀
authicon huanglv80 发表于 2011-5-21 14:59:53 | 显示全部楼层
好东东下下来看看
authicon 暗夜的烟火 发表于 2011-5-24 16:59:58 | 显示全部楼层
这个不错呀
authicon huanglv80 发表于 2011-6-19 20:59:47 | 显示全部楼层
不错不错,我喜欢
authicon forever21 发表于 2011-6-20 23:59:57 | 显示全部楼层
这个不错呀
authicon soul2511 发表于 2011-6-23 08:00:30 | 显示全部楼层
感谢分享  收下了·····
authicon fantuanzi 发表于 2011-6-27 05:00:09 | 显示全部楼层
这个贴不错!!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-3 09:33

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表