1.文件格式
首先要遇到的問題肯定是文件格式,在作時,大家都是用的html或xhtml,到了wap開發(fā)時,就得用wml了.什么是wml?大家可以去查更詳細的資料,我這里只是略微的提到.在我看來wml類似于xml,有非常嚴格的格式,在作wap頁面時,都得用wml來作為顯示.
wml的語法非常簡單,在用php作動態(tài)輸出時,一定要發(fā)送一個頭信息,標明本頁面是wml,而不是別的什么*ml.
header("content-type: text/vnd.wap.wml; charset=/"gb2312/"");
?>
這里用的字符集是gb2312,在移動的平臺上是沒有任何問題的,但在聯(lián)通的平臺上就不行了,一定得用utf-8,為了更通用,還是用utf-8更安全.即
header("content-type: text/vnd.wap.wml; charset=/"utf-8/"");
?>
2.編碼
上面說了字符集都應(yīng)采用utf-8,這是一種容納了多國語言的字符集,一個漢字是占雙字節(jié),utf-8占了4個字節(jié),因此其容納的信息量更大.在手機上編寫的漢字,在將頁面內(nèi)碼轉(zhuǎn)成utf-8后,以后再打開就可能是一堆亂碼.因此大家在作注釋時,盡可能的用英文注釋,省得以后看不懂.像editplus,ultraedit等工具都可以轉(zhuǎn)文件內(nèi)碼.
3.適配
世界各大手機廠商真是有病,開發(fā)出的手機千奇百怪,可以支持的格式也是五花八門.比如鈴聲,有的可以支持,16,32,48和弦,支持mid,wmv,有的不完全支持;有的支持gif,png,bmp,有的也不完全支持.這雖然是把手機的檔次和成本拉開了,但卻苦了作手機開發(fā)的兄弟們了.因為不可避免的要對手機所能支持的圖片,鈴聲等多媒體信息作出一個匹配,這個匹配的處理,我們一般叫做手機適配.
要作手機適配,我們一般得有如下資料.
1)一份詳細的手機適配資料表,里面應(yīng)詳細的說明手機所能支持的鈴聲,圖片格式,還得有手機型號等信息
2)要正確的獲取手機的ua,什么是ua,就是(user agent),實際上就是用戶的手機信息.
有了上面的東東我們才能做出適配.以下給出一個我寫的在wap開發(fā)中用到的類,可以用來取手機號,手機ua.
/**
* 類名: mobile
* 描述: 手機信息類
* 其他: 偶然 編寫
*/
class mobile
{
/**
* 函數(shù)名稱: getphonenumber
* 函數(shù)功能: 取手機號
* 輸入?yún)?shù): none
* 函數(shù)返回值: 成功返回號碼,失敗返回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;
}
}
/**
* 函數(shù)名稱: gethttpheader
* 函數(shù)功能: 取頭信息
* 輸入?yún)?shù): none
* 函數(shù)返回值: 成功返回號碼,失敗返回false
* 其它說明: 說明
*/
function gethttpheader()
{
$str = '';
foreach ($_server as $key=>$val)
{
$gstr = str_replace("&","&",$val);
$str.= "$key -> ".$gstr."/r/n";
}
return $str;
}
/**
* 函數(shù)名稱: getua
* 函數(shù)功能: 取ua
* 輸入?yún)?shù): none
* 函數(shù)返回值: 成功返回號碼,失敗返回false
* 其它說明: 說明
*/
function getua()
{
if (isset($_server['http_user_agent']))
{
return $_server['http_user_agent'];
}
else
{
return false;
}
}
/**
* 函數(shù)名稱: getphonetype
* 函數(shù)功能: 取得手機類型
* 輸入?yún)?shù): none
* 函數(shù)返回值: 成功返回string,失敗返回false
* 其它說明: 說明
*/
function getphonetype()
{
$ua = $this->getua();
if($ua!=false)
{
$str = explode(' ',$ua);
return $str[0];
}
else
{
return false;
}
}
/**
* 函數(shù)名稱: isopera
* 函數(shù)功能: 判斷是否是opera
* 輸入?yún)?shù): none
* 函數(shù)返回值: 成功返回string,失敗返回false
* 其它說明: 說明
*/
function isopera()
{
$uainfo = $this->getua();
if (preg_match('/.*opera.*/i',$uainfo))
{
return true;
}
else
{
return false;
}
}
/**
* 函數(shù)名稱: ism3gate
* 函數(shù)功能: 判斷是否是m3gate
* 輸入?yún)?shù): none
* 函數(shù)返回值: 成功返回string,失敗返回false
* 其它說明: 說明
*/
function ism3gate()
{
$uainfo = $this->getua();
if (preg_match('/m3gate/i',$uainfo))
{
return true;
}
else
{
return false;
}
}
/**
* 函數(shù)名稱: gethttpaccept
* 函數(shù)功能: 取得ha
* 輸入?yún)?shù): none
* 函數(shù)返回值: 成功返回string,失敗返回false
* 其它說明: 說明
*/
function gethttpaccept()
{
if (isset($_server['http_accept']))
{
return $_server['http_accept'];
}
else
{
return false;
}
}
/**
* 函數(shù)名稱: getip
* 函數(shù)功能: 取得手機ip
* 輸入?yún)?shù): none
* 函數(shù)返回值: 成功返回string
* 其它說明: 說明
*/
function getip()
{
$ip=getenv('remote_addr');
$ip_ = getenv('http_x_forwarded_for');
if (($ip_ != "") && ($ip_ != "unknown"))
{
$ip=$ip_;
}
return $ip;
}
}
?>
4.頁面設(shè)計
作wap開發(fā)時,wap頁面是非常簡單的.比html來說是簡單到不能再簡單了.在wap1.0里是沒有表格之類的亂七八糟的東西的.所有的標簽都是寫在一個叫card的標簽之內(nèi).可以用來分段.所以做頁面的算是輕松了.
5.模擬器
作wap開發(fā)免不了要用各式各樣的模擬器來測試,比較好的有m3gate,openwave,opera,還有一個叫winwap的,大家最好別用他來作測試,他的兼容性太好了,即使頁面有錯誤都能給忽略掉.測試時跟用瀏覽器測試web頁面一樣,輸入網(wǎng)址就可以了.沒有比這更容易的事了.
6.注意事項
1)空格,特別是在定義dtd時,
echo "";
?>
里面如果哪個地方少個空格,就有你受的了.以前寫的時候用了頁面重排之后,把一些空格給干掉了,整整找了兩天才找出錯誤來,大家千萬別步我的后塵.
2)標簽,如果標簽不成對,會提示錯誤,大家注意就是了,很容易修正.
新聞熱點
疑難解答