IT貓撲網:您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機版|論壇轉貼|軟件發(fā)布

您當前所在位置:首頁網絡編程PHP編程 → PHP輸出控制功能在簡繁體轉換中的應用

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

時間:2015/6/28來源:IT貓撲網作者:網管聯(lián)盟我要評論(0)

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

一 PHP 輸出控制功能介紹

PHP作為當今流行的腳本語言之一,具有編寫簡便,執(zhí)行速度快,擴充性好等優(yōu)點。PHP的輸出信息控制函數(shù)可以讓你控制你的腳本輸出的內容,可以用于許多不同的情況,特別是在你的腳本已經輸出信息后需要發(fā)送文件頭的情況以及需要對輸出信息進行編輯處理的地方。輸出控制函數(shù)不對使用 header() 或 setcookie() 發(fā)送的文件頭信息產生影響,只對那些類似于 echo()、print() 和 PHP 代碼的數(shù)據塊有作用。

例 1. 控制輸出

以下為引用的內容:

test.php

 

function test($str){

return str_replace("php2000","y10k",$str);

}

ob_start("test");

echo "hello php2000";

ob_end_flush();

?>

這個程序在沒有輸出信息控制的情況下應該輸出為

hello php2000

但通過指定了輸出控制函數(shù)后,輸出變?yōu)?/p>

hello y10k

在上面的例子中,使用 echo() 的輸出內容將會保存在輸出緩沖區(qū)中,直到調用了 ob_end_flush()或者腳本運行終止, 然后輸出信息由自定義的處理函數(shù)進行處理(替換里面的字符串)并返回結果。

相關函數(shù)說明:

ob_start([string output_callback])- 打開輸出緩沖區(qū)

所有的輸出信息不在直接發(fā)送到瀏覽器,而是保存在輸出緩沖區(qū)里面,可選得回調函數(shù)用于處理輸出結果信息。

ob_end_flush - 結束(發(fā)送)輸出緩沖區(qū)的內容,關閉輸出緩沖區(qū)

二 簡繁體轉換的實現(xiàn)

一般通過對照表的形式實現(xiàn),相關的文章非常多,這里就不多講了,只給出其實現(xiàn)代碼

以下為引用的內容:

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 為要轉化的字符串

三 輸出控制函數(shù)在簡繁體轉化中的應用

目前的大多數(shù)網站的簡繁體頁面轉換都是通過各自單獨的頁面實現(xiàn)的,這樣導致在修改簡體頁面的時候還需要再次修改繁體的頁面,不能做到自動同步。而我們提供的這個方法,可以實現(xiàn)同一個頁面自動的變換簡繁體顯示。其實現(xiàn)方法是:

1、建立簡繁體標志,用于指示當前顯示的簡繁體狀態(tài),同時對簡繁體狀態(tài)進行切換

以下為引用的內容:

php2000_gb_big5.php

session_start(); // 打開session 功能,用于在各個頁面之間自動傳遞標志

if(!session_is_registered("php2000_big5")){ // 檢查簡繁體標志的注冊狀態(tài)

session_register("php2000_big5"); // 注冊簡繁體標志,簡體=0;繁體=1

$php2000_big5=0; // 默認為簡體

}

$php2000_big5 = ($php2000_big5+1)%2; // 切換簡繁體狀態(tài)

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')); // 讀出數(shù)據

fclose($fp);

ob_start('translate_gb2big5'); // 啟動輸出信息控制

}

?>

3、使用方法,這里給出一個最簡單的例子,放在和 require.php 同一個目錄里面

以下為引用的內容:

test.php

require("require.php");

echo "大家好,這里是 PHP 世紀網";

?>

if($php2000_big5==1)echo "GB";

else echo "Big5";

?>

第一次運行結果為默認簡體如下:

大家好,這里是 PHP 世紀網 Big5

點擊 Big5 連接顯示繁體如下

大家好,這里是 PHP 世紀網 GB

點擊 GB 將返回簡體頁面

由于使用了session 保存了簡繁體標志,這樣其他任何使用了 require.php 的頁面都會自動按照當前的標志顯示相應的頁面。更多的實例請看我的網站 https://www.php2000.com 。

4、big5 字庫的保存的改進方法

曾經考慮使用 session 來保存 big5 字庫,但使用后發(fā)現(xiàn)速度明顯減慢,主要因為 session 也是通過文件形式實現(xiàn),所以不會對性能產生提高,而且因為session 不會根據簡繁體標志自動判斷裝載與否,所以造成在簡體下也裝載了 big5 的字庫,所以造成速度減慢。

由于我用的服務器為 linux 所以考慮使用共享內存(Windows 不支持共享內存)來保存 big5 字庫信息。其更改的代碼為require.php 的判斷部分:

關鍵詞標簽:PHP簡繁體轉換

相關閱讀

文章評論
發(fā)表評論

熱門文章 plsql developer怎么連接數(shù)據庫-plsql deveplsql developer怎么連接數(shù)據庫-plsql deve2021年最好用的10款php開發(fā)工具推薦2021年最好用的10款php開發(fā)工具推薦在 PHP 中使用命令行工具在 PHP 中使用命令行工具php應用程序安全防范技術研究php應用程序安全防范技術研究

相關下載

人氣排行 詳解ucenter原理及第三方應用程序整合思路、方法PHP中防止SQL注入攻擊PHP會話Session的具體使用方法解析PHP運行出現(xiàn)Notice : Use of undefined constant 的解決辦法CakePHP程序員必須知道的21條技巧PHP如何清空mySQL數(shù)據庫PHP采集圖片實例(PHP采集)plsql developer怎么連接數(shù)據庫-plsql developer連接數(shù)據庫方法