首页 »PHP教程 » phpwap开发教程:PHP作WAP开发时遇到的问题 »正文
phpwap开发教程:PHP作WAP开发时遇到的问题
来源: 发布时间:星期一, 2009年1月12日 浏览:7次 评论:0
1.文件格式 首先要遇到 ![](/icons/80953de.gif) 问题肯定是文件格式,在作web开发时,大家都是用 ![](/icons/80953de.gif) html或xhtml,到了wap开发时,就得用wml了.什么是wml?大家可以去查更详细 ![](/icons/80953de.gif) 资料,我这里只是略微 ![](/icons/80953de.gif) 提到.在我看来wml类似于xml,有非常严格 ![](/icons/80953de.gif) 格式,在作wap页面时,都得用wml来作为显示. wml ![](/icons/80953de.gif) 语法非常简单,在用php作动态输出时, ![](/icons/80953yi.gif) 定要发送 ![](/icons/80953yi.gif) 个头信息,标明本页面是wml,而不是别 ![](/icons/80953de.gif) 什么*ml. header("Content-type: text/vnd.wap.wml; char ="gb2312""); ?> 这里用 ![](/icons/80953de.gif) ![](/icons/80953zifu.gif) 集是gb2312,在移动 ![](/icons/80953de.gif) 平台上是没有任何问题 ![](/icons/80953de.gif) ,但在联通 ![](/icons/80953de.gif) 平台上就不行了, ![](/icons/80953yi.gif) 定得用utf-8,为了更通用,还是用utf-8更安全.即 header("Content-type: text/vnd.wap.wml; char ="utf-8""); ?> 2.编码 上面说了 ![](/icons/80953zifu.gif) 集都应采用utf-8,这是 ![](/icons/80953yi.gif) 种容纳了多国语言 ![](/icons/80953de.gif) ![](/icons/80953zifu.gif) 集, ![](/icons/80953yi.gif) 个汉字是占双字节,utf-8占了4个字节,因此其容纳 ![](/icons/80953de.gif) 信息量更大.在手机上编写 ![](/icons/80953de.gif) 汉字,在将页面内码转成utf-8后,以后再打开就可能是 ![](/icons/80953yi.gif) 堆乱码.因此大家在作注释时,尽可能 ![](/icons/80953de.gif) 用英文注释,省得以后看不懂.像 editplus,ultraedit等工具都可以转文件内码. 3.适配 世界各大手机厂商真是有病,开发出 ![](/icons/80953de.gif) 手机千奇百怪,可以支持 ![](/icons/80953de.gif) 格式也是 5花 8门.比如铃声,有 ![](/icons/80953de.gif) 可以支持,16,32,48和弦,支持mid, wmv,有 ![](/icons/80953de.gif) 不完全支持;有 ![](/icons/80953de.gif) 支持g ![](/icons/80953if.gif) ,png,bmp,有 ![](/icons/80953de.gif) 也不完全支持.这虽然是把手机 ![](/icons/80953de.gif) 档次和成本拉开了,但却苦了作手机开发 ![](/icons/80953de.gif) 兄弟们了. ![](/icons/80953yinwei.gif) 不可避免 ![](/icons/80953de.gif) 要对手机所能支持 ![](/icons/80953de.gif) 图片,铃声等多媒体信息作出 ![](/icons/80953yi.gif) 个匹配,这个匹配 ![](/icons/80953de.gif) 处理,我们 ![](/icons/80953yi.gif) 般叫做手机适配. 要作手机适配,我们 ![](/icons/80953yi.gif) 般得有如下资料. 1) ![](/icons/80953yi.gif) 份详细 ![](/icons/80953de.gif) 手机适配资料表,里面应详细 ![](/icons/80953de.gif) 介绍说明手机所能支持 ![](/icons/80953de.gif) 铃声,图片格式,还得有手机型号等信息
2)要正确 ![](/icons/80953de.gif) 获取手机 ![](/icons/80953de.gif) UA,什么是UA,就是(user agent),实际上就是用户 ![](/icons/80953de.gif) 手机信息. 有了上面 ![](/icons/80953de.gif) 东东我们才能做出适配.以下给出 ![](/icons/80953yi.gif) 个我写 ![](/icons/80953de.gif) 在wap开发中用到 ![](/icons/80953de.gif) 类,可以用来取手机号,手机UA. /** * 类名: mobile * 描述: 手机信息类 * 其他: 偶然 编写 */
mobile { /** * 名称: getPhoneNumber * 功能: 取手机号 * 输入参数: none * 返回值: 成功返回号码 失败返回false * 其它介绍说明: 介绍说明 */ function getPhoneNumber![](/icons/80953kh.gif) {
(is ($_SERVER['HTTP_X_NETWORK_INFO'])) { $str1 = $_SERVER['HTTP_X_NETWORK_INFO']; $getstr1 = preg_replace('/(.*,)(11[d])(,.*)/i','',$str1); Return $getstr1; }
![](/icons/80953else.gif) (is ($_SERVER['HTTP_X_UP_CALLING_LINE_ID'])) { $getstr2 = $_SERVER['HTTP_X_UP_CALLING_LINE_ID']; Return $getstr2; }
![](/icons/80953else.gif) (is ($_SERVER['HTTP_X_UP_SUBNO'])) { $str3 = $_SERVER['HTTP_X_UP_SUBNO']; $getstr3 = preg_replace('/(.*)(11[d])(.*)/i','',$str3); Return $getstr3; }
![](/icons/80953else.gif) (is ($_SERVER['DEVICEID'])) { Return $_SERVER['DEVICEID']; }
![](/icons/80953else.gif) { Return false; } } /** * 名称: getHttpHeader * 功能: 取头信息 * 输入参数: none * 返回值: 成功返回号码 失败返回false * 其它介绍说明: 介绍说明 */ function getHttpHeader![](/icons/80953kh.gif) { $str = ''; foreach ($_SERVER as $key=>$val) { $gstr = str_replace("&","&",$val); $str.= "$key -> ".$gstr."rn"; } Return $str; } /** * 名称: getUA * 功能: 取UA * 输入参数: none * 返回值: 成功返回号码 失败返回false * 其它介绍说明: 介绍说明 */ function getUA![](/icons/80953kh.gif) {
(is ($_SERVER['HTTP_USER_AGENT'])) { Return $_SERVER['HTTP_USER_AGENT']; }
![](/icons/80953else.gif) { Return false; } } /** * 名称: getPhoneType * 功能: 取得手机类型 * 输入参数: none * 返回值: 成功返回![](/icons/80953string.gif) 失败返回false * 其它介绍说明: 介绍说明 */ function getPhoneType![](/icons/80953kh.gif) { $ua = $this->getUA ;
($ua!=false) { $str = explode(' ',$ua); Return $str[0]; }
![](/icons/80953else.gif) { Return false; } } /** * 名称: isOpera * 功能: 判断是否是opera * 输入参数: none * 返回值: 成功返回![](/icons/80953string.gif) 失败返回false * 其它介绍说明: 介绍说明 */ function isOpera![](/icons/80953kh.gif) { $uainfo = $this->getUA ;
(preg_match('/.*Opera.*/i',$uainfo)) { Return true; }
![](/icons/80953else.gif) { Return false; } } /** * 名称: isM3gate * 功能: 判断是否是m3gate * 输入参数: none * 返回值: 成功返回![](/icons/80953string.gif) 失败返回false * 其它介绍说明: 介绍说明 */ function isM3gate![](/icons/80953kh.gif) { $uainfo = $this->getUA ;
(preg_match('/M3Gate/i',$uainfo)) { Return true; }
![](/icons/80953else.gif) { Return false; } } /** * 名称: getHttpAccept * 功能: 取得HA * 输入参数: none * 返回值: 成功返回![](/icons/80953string.gif) 失败返回false * 其它介绍说明: 介绍说明 */ function getHttpAccept![](/icons/80953kh.gif) {
(is ($_SERVER['HTTP_ACCEPT'])) { Return $_SERVER['HTTP_ACCEPT']; }
![](/icons/80953else.gif) { Return false; } } /** * 名称: getIP * 功能: 取得手机IP * 输入参数: none * 返回值: 成功返回![](/icons/80953string.gif) * 其它介绍说明: 介绍说明 */ function getIP![](/icons/80953kh.gif) { $ip=getenv('REMOTE_ADDR'); $ip_ = getenv('HTTP_X_FORWARDED_FOR');
(($ip_ != "") && ($ip_ != "unknown")) { $ip=$ip_; }
$ip; } } ?> 4.页面设计 作wap开发时,wap页面是非常简单 ![](/icons/80953de.gif) .比html来说是简单到不能再简单了.在wap1.0里是没有表格的类 ![](/icons/80953de.gif) 乱 7 8糟 ![](/icons/80953de.gif) 东西 ![](/icons/80953de.gif) .所有 ![](/icons/80953de.gif) 标签都是写在 ![](/icons/80953yi.gif) 个叫card ![](/icons/80953de.gif) 标签的内.可以用来分段.所以做页面 ![](/icons/80953de.gif) 算是轻松了. 5.模拟器 作wap开发免不了要用各式各样 ![](/icons/80953de.gif) 模拟器来测试,比较好 ![](/icons/80953de.gif) 有m3gate,openwave,opera,还有 ![](/icons/80953yi.gif) 个叫winwap ![](/icons/80953de.gif) ,大家最好别用他来作测试,他 ![](/icons/80953de.gif) 兼容性太好了,即使页面有 ![](/icons/80953cuowu.gif) 都能给忽略掉.测试时跟用浏览器测试web页面 ![](/icons/80953yi.gif) 样,输入网址就可以了.没有比这更容易 ![](/icons/80953de.gif) 事了. 6.注意事项 1)空格,特别是在定义DTD时, echo ""; ?> 里面如果哪个地方少个空格,就有你受 ![](/icons/80953de.gif) 了.以前写 ![](/icons/80953de.gif) 时候用了页面重排的后,把 ![](/icons/80953yi.gif) 些空格给干掉了,整整找了两天才找出 ![](/icons/80953cuowu.gif) 来,大家千万别步我 ![](/icons/80953de.gif) 后尘. 2)标签,如果标签不成对,会提示 ![](/icons/80953cuowu.gif) ,大家注意就是了,很容易修正.
相关文章
读者评论
发表评论
|
|