• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    PHP輸出控制功能在簡繁體轉換中的應用

    發布: 2007-7-14 19:53 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 14次 | 進入軟件測試論壇討論

    領測軟件測試網


    概要:本文對PHP的輸出控制功能進行了簡單介紹并對其在簡繁體轉化中的應用給出了具體思路和實例

    一 PHP 輸出控制功能介紹
    PHP作為當今流行的腳本語言之一,具有編寫簡便,執行速度快,擴充性好等優點。PHP的輸出信息控制函數可以讓你控制你的腳本輸出的內容,可以用于許多不同的情況,特別是在你的腳本已經輸出信息后需要發送文件頭的情況以及需要對輸出信息進行編輯處理的地方。輸出控制函數不對使用 header() 或 setcookie() 發送的文件頭信息產生影響,只對那些類似于 echo()、print() 和 PHP 代碼的數據塊有作用。
    例 1. 控制輸出
    test.php
    <?
    function test($str){
    return str_replace("php2000","y10k",$str);
    }
    ob_start("test");
    echo "hello php2000";
    ob_end_flush();
    ?>
    這個程序在沒有輸出信息控制的情況下應該輸出為
    hello php2000
    但通過指定了輸出控制函數后,輸出變為
    hello y10k
    在上面的例子中,使用 echo() 的輸出內容將會保存在輸出緩沖區中,直到調用了 ob_end_flush()或者腳本運行終止, 然后輸出信息由自定義的處理函數進行處理(替換里面的字符串)并返回結果。

    相關函數說明
    ob_start([string output_callback])- 打開輸出緩沖區
    所有的輸出信息不在直接發送到瀏覽器,而是保存在輸出緩沖區里面,可選得回調函數用于處理輸出結果信息。
    ob_end_flush - 結束(發送)輸出緩沖區的內容,關閉輸出緩沖區

    二 簡繁體轉換的實現
    一般通過對照表的形式實現,相關的文章非常多,這里就不多講了,只給出其實現代碼
    <?
    function gb2big5($str) {
    global $_gb_big5_;
    $leng = strlen($str)-1;
    for($i = 0; $i<$leng; $i++){
    $h = ord($str[$i]);
    if($h>=160){
    $l = ord($str[$i+1]);
    $gb=($h==161 && $l==64)?" " : substr($_gb_big5_, ($h-160)*510+($l-1)*2, 2);
    $str[$i] = $gb[0];
    $str[$i+1] = $gb[1];
    $i++;
    }
    }
    return $str;
    }
    ?>
    其中:
    $gb_big5_ 保存著big5 的字庫對照表
    $str 為要轉化的字符串
    三 輸出控制函數在簡繁體轉化中的應用
    目前的大多數網站的簡繁體頁面轉換都是通過各自單獨的頁面實現的,這樣導致在修改簡體頁面的時候還需要再次修改繁體的頁面,不能做到自動同步。而我們提供的這個方法,可以實現同一個頁面自動的變換簡繁體顯示。其實現方法是:
    1 建立簡繁體標志,用于指示當前顯示的簡繁體狀態,同時對簡繁體狀態進行切換
    php2000_gb_big5.php
    <?
    session_start(); // 打開session 功能,用于在各個頁面之間自動傳遞標志
    if(!session_is_registered("php2000_big5")){ // 檢查簡繁體標志的注冊狀態
    session_register("php2000_big5"); // 注冊簡繁體標志,簡體=0;繁體=1
    $php2000_big5=0; // 默認為簡體
    }
    $php2000_big5 = ($php2000_big5+1)%2; // 切換簡繁體狀態
    header("location:".getenv("HTTP_REFERER")); // 返回其調用頁面
    ?>
    2對頁面輸出信息進行控制,每個頁面都調用這段程序,用于簡繁體轉換
    require.php(應包括前面第二部分的轉換代碼,這里略)
    <?
    Session_start();
    function translate_gb2big5($str) {
    $str = gb2big5($str); // 轉化為 big5
    $str = str_replace('charset=gb2312', 'charset=big5', $str); // 替換字符類型
    header('Content-Type: text/html; charset=big5'); // 繁體文件頭
    return $str;
    }
    if(session_is_registered("php2000_big5") && ($php2000_big5==1)){ // 判斷標志
    $fp = fopen('big5.table', 'r'); // big5的字庫表
    $_gb_big5_ = fread($fp, filesize('big5.table')); // 讀出數據
    fclose($fp);
    ob_start('translate_gb2big5'); // 啟動輸出信息控制
    }
    ?>
    3 使用方法,這里給出一個最簡單的例子,放在和 require.php 同一個目錄里面
    test.php
    <?
    require("require.php");
    echo "大家好,這里是 PHP 世紀網";
    ?>
    <a href=php2000_gb_big5.php>
    <?
    if($php2000_big5==1)echo "GB";
    else echo "Big5";
    ?>
    </a>
    第一次運行結果為默認簡體如下
    大家好,這里是 PHP 世紀網 Big5
    點擊 Big5 連接顯示繁體如下
    大家好,這里是 PHP 世紀網 GB
    點擊 GB 將返回簡體頁面
    由于使用了session 保存了簡繁體標志,這樣其他任何使用了 require.php 的頁面都會自動按照當前的標志顯示相應的頁面。更多的實例請看我的網站 http://www.php2000.com。
    4 big5 字庫的保存的改進方法
    曾經考慮使用 session 來保存 big5 字庫,但使用后發現速度明顯減慢,主要因為 session 也是通過文件形式實現,所以不會對性能產生提高,而且因為session 不會根據簡繁體標志自動判斷裝載與否,所以造成在簡體下也裝載了 big5 的字庫,所以造成速度減慢。
    由于我用的服務器為 linux 所以考慮使用共享內存(Windows 不支持共享內存)來保存 big5 字庫信息。其更改的代碼為require.php 的判斷部分:
    <?
    if(session_is_registered("php2000_big5") && ($php2000_big5==1))
    {
    // 修改成使用共享內存
    // 判斷是否已經創建,打開50000字節的 0xff3 段的共享內存
    $shm_id = @shmop_open(0xff3, "a", 0644, 50000);
    if($shm_id) {
    $_gb_big5_ = shmop_read($shm_id, 0,shmop_size($shm_id)); // 讀出big5 數據
    }
    else{
    // 創建 50000 字節的系統標識為 0xff3 的共享內存塊
    $shm_id = @shmop_open(0xff3, "c", 0644, 50000);

    // 讀出數據
    $fp = fopen('big5.table', 'r');
    $_gb_big5_ = fread($fp, filesize('big5.table'));
    fclose($fp);

    if($shm_id){
    $shm_bytes_written = shmop_write($shm_id, $_gb_big5_,0); // 寫入 big5 數據
    }
    }
    ob_start('translate_gb2big5');
    }
    ?>
    關于共享內存的使用方法,請參看有關資料。
    四 結論
    PHP 作為一種公開源代碼的腳本語言,其擴充性是非常好的。本文只是對其一個功能的一種應用方式的探討,并實現了比較完美的同一頁面自動簡繁體轉換功能。希望廣大愛好 PHP 的朋友能從中得到啟發,做出更好的作品。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>