php没开启wap功能,php作wap开发时遇到的问题
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开发时遇到的问题相关推荐
- android开启加速功能,Android硬件加速开发简介
从 Android 3.0(API Level 11)开始,Android 2D 渲染管线被设计为能更好地支持硬件加速功能. 硬件加速功能将所有在 View 组件的 Canvas 上执行的绘制操作都交 ...
- 让你的浏览器具备Wap功能
让IE支持WAP浏览,导入注册表 WAP注册表文件内容就是: Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER/Software/Clas ...
- Redis集群CentOS系统配置企业级数据备份方案以及数据恢复的操作(在开启AOF功能下恢复冷备RDB文件数据,保持AOF和RDB双开情况下恢复数据及错误的数据恢复步骤详解)
1. 设置每小时保存一份 /var/redis/6379/dump.rdb 文件至指定目录(我这边存放在 /usr/local/redis_backup 目录下),并删除48小时前的文件. 为 ...
- 应用系统怎么开启审计功能_win10系统开启分屏功能的设置方法
使用深度win10纯净版系统的用户,都知道win10系统里面都内置有分屏功能,分屏可以一台电脑使用两个桌面,可以让多个网页或者任务同时在一个窗口下显示,这样能够使我们提高工作效率.你还能在同一屏幕下一 ...
- 如何在源码包编译安装的 LEMP 环境下开启 OpenSSL 功能
如何在源码包编译安装的 LEMP 环境下开启 OpenSSL 功能 Hello,大家好!我是--邪恶君子! 今天,给大家分享一下解决源码包编译安装 LEMP 环境下开启 OpenSSL 功能问题的过程 ...
- WAP网站流量分析 WAP流量统计 wap网站流量统计
随着3G在中国的发展以及手机上网用户的增长,免费wap做为手机广告的载体,业内人士预测在未来的中国无线网络营销将大放异彩. WAP的兴盛标志着市场已经走向成熟,WAP站长迫切需要如何了解用户,把握用户 ...
- 如何开启APP2SD功能
开启APP2SD功能 当我们把Nexus One升级到Android 2.2后会发现该系统原生支持的APP2SD功能并没被激活,即应用程序菜单中"移动至SD卡"按钮是灰色不能按的. ...
- WEB和WAP有什么区别前端开发的趋势
WEB和WAP有什么区别前端开发的趋势-随着移动互联网的发展,移动端的占比已经越来越高,移动设备已经越来越占用消费者设备的时间,以前电脑才能拥有的功能,现在手机基本都可以实现.预计在未来的几年时间里, ...
- 【技巧】Edge浏览器更换chrome主题、选项卡悬浮预览(开启实验功能)
[2020.12.06更新]微软新版edge的最新版本更新已经支持直接安装第三方商店的主题了,所以不用开启实验功能了!(不过其他实验功能了解下也是极好滴~) 自从微软推出了新版以Chromium ...
最新文章
- Silverlight 4 WebBrowser的使用及调用 WebBrowser 中的 javascript 方法
- object-c语言的nonatomic,assign,copy,retain的区别
- 10 words and phrases that shouldn’t be on your résumé
- weblogic部署ssh2应用出现异常
- JZOJ 4437. 【HNOI2016模拟4.10】线性代数与逻辑
- Android 中文 API ——对话框 AlertDialog.Builder
- python基础——变量
- 计算机网络网际协议实验报告,计算机网络课程网际协议IP地址实验报告.doc
- 基于SSM的新闻管理系统
- ADB投屏_手机无需安装客户端的【安卓投屏】
- python正则取反,一文搞定Python正则表达式
- android keystore 查看、修改密码和别名等
- 阿里王坚眼中的互联网、数据和AI
- matlab仿真的英文文献,matlab 外文翻译 外文文献 英文文献 MATALAB 混合仿真平台控制算法的概述...
- Spring5:p命名和c命名空间注入
- 计算机网络机房自查报告,银行机房自查报告
- 学术-物理-维空间:二维空间
- Appium用xpath定位掌阅APP导航页的跳过按钮(只有class和index)
- 内鬼黑客狂卖个人信息 “年产值”飙上千亿
- Excel-VBA操作文件四大方法
热门文章
- Excel保护加密、解密、忘记密码该怎么办?
- java连接accdb,尝试通过Java 8中的JDBC-ODBC连接到.accdb文件时,出现ClassNotFoundException...
- USB、串口、422、485、CAN接口互转模块
- python抓取网页数据并截图_网络爬虫-使用Python抓取网页数据
- 【VRP问题】基于节约算法CW求解带硬时间窗的车辆路径规划问题(VRPTW)matlab源码
- oracle锁表后,系统能否自动解锁?
- 七牛云招聘~视频云产品经理
- HR给新员工的前期入职工作
- 大学校友会校友卡小程序功能与UI设计
- 算法初级_Question7_最佳存款方案(java实现)