php作wap开发时遇到的问题

选择自 slamdunk3 的 blog

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 www.knowsky.com* 函数返回值: 成功返回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)标签,如果标签不成对,会提示错误,大家注意就是了,很容易修正.

http://www.bkjia.com/phpjc/508380.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/508380.htmltecharticle选择自 slamdunk3 的 blog 1.文件格式 首先要遇到的问题肯定是文件格式,在作web开发时,大家都是用的html或xhtml,到了wap开发时,就得用wml了.什么是…

Posted in 未分类