close
【資料來源:http://www.wujianrong.com/archives/2007/10/_php_html_wml_1.html

最近在做學校的 WAP 網站,其中通知公告、新聞等信息來源於原來的學校網站上的信息,因此就涉及到一個 HTML 轉化為 WML 的問題。儘管現在的 WAP 2.0 支持 XHTML 的內容顯示,但是 XHTML 語法要求比 HTML 嚴格,我們來源信息的 HTML 內容並不能保證符合 XHTML 的要求,而且 XHTML 相對於 WML 來說,內容的流量還是相對比較多一些的,另外僅支持 WAP 1.x 的手機設備也不支持 XHTML,因此為了支持更多的手機設備用戶能夠正常的瀏覽我們 WAP 網站,我們採用了 WML,而不是 XHTML。

對於新聞、通知、公告之類的信息,對手機設備用戶來說,最關心的是文字內容,因此我們的主要工作就是按照一定的格式(比如該換行分段的地方要換行分段)來從原來的 HTML 頁面裡提取出純文本信息,並將其轉化為 WML。下面的代碼演示了如何來實現這個步驟:(w3g8)

<?php
       
    
/**
    */
       
    
function text2wml($content) {
        
// 將 WML 變量前綴"$"轉義
       
$content = str_replace('$', '$$', $content);
       
// 轉換特殊字符,並將 Windows/DOS 換行符(\r\n)轉化為 Unix 換行符(\n)
       
$content = str_replace("\r\n", "\n", htmlspecialchars($content));
       
// 通過換行符來將各行分開進行處理(過濾空行)
       
$content = explode("\n", $content);
       for (
$i = 0; $i < count($content); $i++) {
           
// 過濾首尾空格
           
$content[$i] = trim($content[$i]);
           
// 如果去掉全角空格為空行,則設為空行,否則不對全角空格過濾。
           
if (str_replace(" ", "", $content[$i]) == "") $content[$i] = "";
       }
       
//合併各行,轉化為 WML,並過濾掉空行
       
$content = str_replace("<p><br /></p>\n", "", "<p>".implode("<br /></p>\n<p>", $content)."<br /></p>\n");
       return
$content;
   }
      
   function
html2wml($content) {
       
// 過濾掉樣式表和腳本
       
$content = preg_replace("/<style .*?<\/style>/is", "", $content);
       
$content = preg_replace("/<script .*?<\/script>/is", "", $content);
       
// 首先將各種可以引起換行的標籤(如<br />、<p> 之類)替換成換行符"\n"
       
$content = preg_replace("/<br \s*\/?\/>/i", "\n", $content);
       
$content = preg_replace("/<\/?p>/i", "\n", $content);
       
$content = preg_replace("/<\/?td>/i", "\n", $content);
       
$content = preg_replace("/<\/?div>/i", "\n", $content);
       
$content = preg_replace("/<\/?blockquote>/i", "\n", $content);
       
$content = preg_replace("/<\/?li>/i", "\n", $content);
       
// 將"&nbsp;"替換為空格
       
$content = preg_replace("/\&nbsp\;/i", " ", $content);
       
// 某些不規範的網頁中可能有"&nbsp",在普通網頁中顯示會按照"&nbsp;"顯示,不會引起錯誤,但是在 WAP 中會原樣顯示,因此也要替換成空格。
       
$content = preg_replace("/\&nbsp/i", " ", $content);
       
// 過濾掉剩下的 HTML 標籤
       
$content = strip_tags($content);
       
// 將 HTML 中的實體(entity)轉化為它所對應的字符(WML 僅支持很有現的幾個 entity),這裡我轉化的是中文網頁,因此我指定了"GB2312"編碼。
       
$content = html_entity_decode($content, ENT_QUOTES, "GB2312");
       
// 過濾掉不能轉化的實體(entity)
       
$content = preg_replace("/\&\#.*?\;/i", "", $content);
      
       
// 上面是將 HTML 網頁內容轉化為帶換行的純文本,下面是將這些純文本轉化為 WML。
       
return text2wml($content);
   }
   
?>

arrow
arrow
    全站熱搜

    yoonow 發表在 痞客邦 留言(0) 人氣()