-- 作者:wangxinxin
-- 发布时间:2010-12-6 11:08:34
-- php作wap开发时遇到的问题
.文件格式IT我最牛-程序员的技术讨论与分享园地B#B+t B1Y(G-tRN8P 首先要遇到的问题肯定是文件格式,在作web开发时,大家都是用的html或xhtml,到了wap开发时,就得用wml了.什么是wml?大家可以去查更详细的资料,我这里只是略微的提到.在我看来wml类似于xml,有非常严格的格式,在作wap页面时,都得用wml来作为显示.IT我最牛-程序员的技术讨论与分享园地D-I6nQL9^)M
1z%K4S I \\h}9s0wml的语法非常简单,在用php作动态输出时,一定要发送一个头信息,标明本页面是wml,而不是别的什么*ml.IT我最牛-程序员的技术讨论与分享园地#Xeu` b[AF L IT我最牛-程序员的技术讨论与分享园地4ch8@C$X%t3usHh6G
header("Content-type: text/vnd.wap.wml; charset=\\"gb2312\\""); &Qq_Y vhcu0?5A!l1Ek0?>IT我最牛-程序员的技术讨论与分享园地} K:E$~S4}c IT我最牛-程序员的技术讨论与分享园地 X G*h%] e.Qa&H
这里用的字符集是gb2312,在移动的平台上是没有任何问题的,但在联通的平台上就不行了,一定得用utf-8,为了更通用,还是用utf-8更安全.即IT我最牛-程序员的技术讨论与分享园地9Ycuv W6p)i8Gi IT我最牛-程序员的技术讨论与分享园地ov(v h!E}y Y
header("Content-type: text/vnd.wap.wml; charset=\\"utf-8\\""); 0yR8~ I2F_:q0?> |n3b5?}+Y:gH0
%Ih Pre\'t$RQ02.编码IT我最牛-程序员的技术讨论与分享园地"|,Rlb3_$np IT我最牛-程序员的技术讨论与分享园地2? C D/X)eiV
上面说了字符集都应采用utf-8,这是一种容纳了多国语言的字符集,一个汉字是占双字节,utf-8占了4个字节,因此其容纳的信息量更大.在手机上编写的汉字,在将页面内码转成utf-8后,以后再打开就可能是一堆乱码.因此大家在作注释时,尽可能的用英文注释,省得以后看不懂.像editplus,ultraedit等工具都可以转文件内码.IT我最牛-程序员的技术讨论与分享园地_7A*Ill|Py
hv"i8}%Rp03.适配 ,{F+kTW@@{0 IT我最牛-程序员的技术讨论与分享园地:WXdHZvYD
世界各大手机厂商真是有病,开发出的手机千奇百怪,可以支持的格式也是五花八门.比如铃声,有的可以支持,16,32,48和弦,支持mid,wmv,有的不完全支持;有的支持gif,png,bmp,有的也不完全支持.这虽然是把手机的档次和成本拉开了,但却苦了作手机开发的兄弟们了.因为不可避免的要对手机所能支持的图片,铃声等多媒体信息作出一个匹配,这个匹配的处理,我们一般叫做手机适配.IT我最牛-程序员的技术讨论与分享园地1D3fctS 要作手机适配,我们一般得有如下资料.IT我最牛-程序员的技术讨论与分享园地Oo*Ay?0g-\\2C
)f5s+m\\Il F)Y01)一份详细的手机适配资料表,里面应详细的说明手机所能支持的铃声,图片格式,还得有手机型号等信息 &eFc.tgT$z%d{02)要正确的获取手机的UA,什么是UA,就是(user agent),实际上就是用户的手机信息.IT我最牛-程序员的技术讨论与分享园地L{hUvg4n#Q-A\'H
#v-y#@ Ga0有了上面的东东我们才能做出适配.以下给出一个我写的在wap开发中用到的类,可以用来取手机号,手机UA.IT我最牛-程序员的技术讨论与分享园地7A*J^ SO
TOvo:Bi(~0 /**IT我最牛-程序员的技术讨论与分享园地;E&{(T5ROQcl?3F * 类名: mobile sh;FMa0* 描述: 手机信息类IT我最牛-程序员的技术讨论与分享园地/a(GCL5s*ou x_ * 其他: 偶然 编写 6q+jK/e9l"a1XR%l}*j0*/ ;N\'x~P:N2s0class mobileIT我最牛-程序员的技术讨论与分享园地&B&fgo2y8E {IT我最牛-程序员的技术讨论与分享园地\'b\'l^H(a Pa /**IT我最牛-程序员的技术讨论与分享园地k8S7Z)y Ps * 函数名称: getPhoneNumberIT我最牛-程序员的技术讨论与分享园地K.u$OOLJU2~ * 函数功能: 取手机号IT我最牛-程序员的技术讨论与分享园地I|c:z[Aj%cX * 输入参数: noneIT我最牛-程序员的技术讨论与分享园地 M M Q%Z-G t_\'wX * 函数返回值: 成功返回号码,失败返回falseIT我最牛-程序员的技术讨论与分享园地PtYmlM9@"v#P * 其它说明: 说明IT我最牛-程序员的技术讨论与分享园地.s]iBj#SQ abi */IT我最牛-程序员的技术讨论与分享园地r){ U5W-b9n/k function getPhoneNumber() M#~:N;jy1S/G"CZ0{ .u W2N4w a}kX"i9r%ss{0if (isset($_SERVER[\'HTTP_X_NETWORK_INFO\']))IT我最牛-程序员的技术讨论与分享园地2n5z S\\k3n)TK { OG8D6B7Tc0$str1 = $_SERVER[\'HTTP_X_NETWORK_INFO\']; 4E| i h j"v*^oi0$getstr1 = preg_replace(\'/(.*,)(11[d])(,.*)/i\',\'\',$str1); \\4wQ#M,R0Return $getstr1;IT我最牛-程序员的技术讨论与分享园地4mDq+y9MqYj }IT我最牛-程序员的技术讨论与分享园地6r%uSc;R"C elseif (isset($_SERVER[\'HTTP_X_UP_CALLING_LINE_ID\'])) } b8Ew.D JrV C6xP0{ \\\'cO m4bJM0$getstr2 = $_SERVER[\'HTTP_X_UP_CALLING_LINE_ID\']; |h^{T0Return $getstr2; umW\\O3s$~0} 5qPm z1e*A*BW0I^0elseif (isset($_SERVER[\'HTTP_X_UP_SUBNO\']))IT我最牛-程序员的技术讨论与分享园地:S2my)RY5JKq6\\V {IT我最牛-程序员的技术讨论与分享园地|#^A(}F4| _0F)w1Q $str3 = $_SERVER[\'HTTP_X_UP_SUBNO\'];IT我最牛-程序员的技术讨论与分享园地7Q6DDk7yT5| $getstr3 = preg_replace(\'/(.*)(11[d])(.*)/i\',\'\',$str3);IT我最牛-程序员的技术讨论与分享园地8{0s9gI%vN Return $getstr3; c4On"j6xN;m*I0}IT我最牛-程序员的技术讨论与分享园地 m*[ x#\\1@ E)b c elseif (isset($_SERVER[\'DEVICEID\'])) ;_9n y7HNp^5CY{H0{ i`2Qv u fM0Return $_SERVER[\'DEVICEID\']; 5ZT!pg&rj0}IT我最牛-程序员的技术讨论与分享园地0TorKL:[Z elseIT我最牛-程序员的技术讨论与分享园地P _6DbY6K(Uh {IT我最牛-程序员的技术讨论与分享园地izRw p+h&u%i)q Return false; z0aK @&uUt3Y+e0}IT我最牛-程序员的技术讨论与分享园地9j$i w6An7G4| }IT我最牛-程序员的技术讨论与分享园地E6t(G^]F IT我最牛-程序员的技术讨论与分享园地t_ T^h @8L\'W%U T
/**IT我最牛-程序员的技术讨论与分享园地L1| U Kn4J5VK * 函数名称: getHttpHeader \'^I(tp S kiOv0* 函数功能: 取头信息IT我最牛-程序员的技术讨论与分享园地9Jzj,g`i_ * 输入参数: none bH2J ^Y/c0* 函数返回值: 成功返回号码,失败返回false W2af\\ }L:Zn^x0* 其它说明: 说明 ~oX?n\\1R0*/ t@Su#t:b*| Ixw0function getHttpHeader()IT我最牛-程序员的技术讨论与分享园地J}2M)ucnbCK {IT我最牛-程序员的技术讨论与分享园地zb Wn0eH D6Q $str = \'\'; 2K$W[awOh*@6AS0foreach ($_SERVER as $key=>$val)IT我最牛-程序员的技术讨论与分享园地2s9J\'T^H~\'t {IT我最牛-程序员的技术讨论与分享园地1_(OSAA ^2| $gstr = str_replace("&","&",$val);IT我最牛-程序员的技术讨论与分享园地\'tu)N/Z*]| $str.= "$key -> ".$gstr."\\rIT我最牛-程序员的技术讨论与分享园地umtUII/vx:u[ ";IT我最牛-程序员的技术讨论与分享园地]R8NQ\'c G } TLiV)u0Return $str;IT我最牛-程序员的技术讨论与分享园地%H3iF*gT2N }IT我最牛-程序员的技术讨论与分享园地2UU#TkQ*ko
Cl2I\\|tOy)DZ0/** )h MV+lt6uJ4iF0* 函数名称: getUAIT我最牛-程序员的技术讨论与分享园地r B u\'E!|(lsOl%v| * 函数功能: 取UA l\'X:s K:[?7`DB2u;]0* 输入参数: noneIT我最牛-程序员的技术讨论与分享园地zTtnw * 函数返回值: 成功返回号码,失败返回falseIT我最牛-程序员的技术讨论与分享园地}P8U {Zf:J*J * 其它说明: 说明IT我最牛-程序员的技术讨论与分享园地lSL1rapp */IT我最牛-程序员的技术讨论与分享园地1KP U5S$r"P&l function getUA()IT我最牛-程序员的技术讨论与分享园地gS.zV+ex1oCS { H^L,G ~N6q T ~$y\'c.u0if (isset($_SERVER[\'HTTP_USER_AGENT\'])) j Ac] Bow0{ _ [}JS~3e/vW0Return $_SERVER[\'HTTP_USER_AGENT\']; 5F9K3zeAr-U*w6K i$i4h0} (D5Wm\\H0t3Z9\\\'O.R0else r`9V-p^"E?-V9[0{IT我最牛-程序员的技术讨论与分享园地!va$y5rA0V Return false;IT我最牛-程序员的技术讨论与分享园地Mj8Ej+S0qH0s,D } 7Pc2] Yx0} p_1H jNK1[S0
k*GI,T(NJzN0/** n)_Y\'X5\\ J!r0* 函数名称: getPhoneTypeIT我最牛-程序员的技术讨论与分享园地\\0TBLe6~i1u * 函数功能: 取得手机类型 .y viJJ _0* 输入参数: noneIT我最牛-程序员的技术讨论与分享园地3Or7SXU{ * 函数返回值: 成功返回string,失败返回falseIT我最牛-程序员的技术讨论与分享园地$L)aa\'j KO * 其它说明: 说明IT我最牛-程序员的技术讨论与分享园地 fY wl;]M Q */IT我最牛-程序员的技术讨论与分享园地-^2{+g4y\'J function getPhoneType()IT我最牛-程序员的技术讨论与分享园地 onXU0Y I {IT我最牛-程序员的技术讨论与分享园地8|x\\C N&Ep8_ $ua = $this->getUA();IT我最牛-程序员的技术讨论与分享园地F&I:Vvj&D$L if($ua!=false) !l!O/_r8k]\'n0{IT我最牛-程序员的技术讨论与分享园地DL(v~!@+D"l }gZ $str = explode(\' \',$ua);IT我最牛-程序员的技术讨论与分享园地;\\!Bc+sRg^6d Return $str[0];IT我最牛-程序员的技术讨论与分享园地sabYa]$^O:Ui9d x5L }IT我最牛-程序员的技术讨论与分享园地1PaOIw_3e elseIT我最牛-程序员的技术讨论与分享园地$O/CR2g/WV { [nz(Rj0Return false; EE.},L6hIN6an0} 0}1[V;u*d`0} !A-j!_L~b6hCm0 IT我最牛-程序员的技术讨论与分享园地XF MQ[ A0aLX/T0\\
/** n4R1u*s4@7P4c3B |3M0* 函数名称: isOperaIT我最牛-程序员的技术讨论与分享园地CE3NA`!i * 函数功能: 判断是否是opera D)h x/uea0* 输入参数: none www.knowsky.com 9Vu}KRn6Ai1lz0* 函数返回值: 成功返回string,失败返回false TCh1w/A`S0* 其它说明: 说明 +D}(H\'g$|YC B s0*/IT我最牛-程序员的技术讨论与分享园地$`7y bLf%~ function isOpera() @9`0L1V,d?a"G0{ @^&}1G/p(e r$t\'jKm0$uainfo = $this->getUA();IT我最牛-程序员的技术讨论与分享园地 Q j"U:O7a if (preg_match(\'/.*Opera.*/i\',$uainfo)) U VD IzU w*i\'Y/TB0{IT我最牛-程序员的技术讨论与分享园地SFAN|2g Return true;IT我最牛-程序员的技术讨论与分享园地FICAA }IT我最牛-程序员的技术讨论与分享园地 dw6Y9l(\\.z6bw else #Iv W1P H&wMY0{ H2OIPyr/lB#x0Return false; 4T-S} L+oN0}IT我最牛-程序员的技术讨论与分享园地}Pcc9q \\7M$s\'R } ;[|!h/Rm]!P)~5\\SI0 IT我最牛-程序员的技术讨论与分享园地i k$e5s)t2d{6C
/**IT我最牛-程序员的技术讨论与分享园地8I#{J T;N * 函数名称: isM3gate /H%h?-hLG/S @Cw0* 函数功能: 判断是否是m3gate !{f S,Ck;KZ0?0* 输入参数: noneIT我最牛-程序员的技术讨论与分享园地qN{8Tl * 函数返回值: 成功返回string,失败返回falseIT我最牛-程序员的技术讨论与分享园地d&Jn1Z?J3nJ7l * 其它说明: 说明 5h(B3ho6M1K0*/IT我最牛-程序员的技术讨论与分享园地?a#xt e`$i#g function isM3gate() W!c A&y%f#L!`;@ }0{ %y6{0Evu!k-S0$uainfo = $this->getUA();IT我最牛-程序员的技术讨论与分享园地:^iIfx-TODw P if (preg_match(\'/M3Gate/i\',$uainfo)) kQErE!DS*r8A0{ } y)WJy NU;w\'N"]0Return true; L1z3I*QDqv%SJ0}IT我最牛-程序员的技术讨论与分享园地[l@3l1M+ixi [#t
|