亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網(wǎng)絡(luò),我們將竭誠為您提供優(yōu)質(zhì)的服務(wù)! 誠征網(wǎng)絡(luò)推廣 | 網(wǎng)站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯(lián)系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業(yè)務(wù)咨詢
有事點擊這里…  531199185
有事點擊這里…  61352289
點擊這里給我發(fā)消息  81721488
有事點擊這里…  376585780
有事點擊這里…  872642803
有事點擊這里…  459248018
有事點擊這里…  61352288
有事點擊這里…  380791050
技術(shù)支持
有事點擊這里…  714236853
有事點擊這里…  719304487
有事點擊這里…  1208894568
有事點擊這里…  61352289
在線客服
有事點擊這里…  531199185
有事點擊這里…  61352288
有事點擊這里…  983054746
有事點擊這里…  893984210
當(dāng)前位置:首頁 >> 技術(shù)文章 >> 文章瀏覽
技術(shù)文章

PHP中字體應(yīng)用釋疑

添加時間:2014-7-25 17:13:58  添加: 思海網(wǎng)絡(luò) 
有許多朋友對網(wǎng)站提供繁、簡兩種版本感到很困惑,是怎么實現(xiàn)的呢?這也是時下眾多PHP書籍中被漏掉的一個很重要的知識點。筆者搜集整理并根據(jù)自己的開發(fā)經(jīng)驗將一些重點與疑點羅列出來與大家共享!

  如何應(yīng)用繁體中文轉(zhuǎn)換為簡體中文的PHP函數(shù)?

  我們定義一個big5togb的函數(shù)來實現(xiàn)這個轉(zhuǎn)換:

function big5togb($code)
{
//參數(shù)$code是big5碼的字符串
include "data_big5.php"; //包含big5數(shù)據(jù)的文件
$output="";
$length=strlen($code); //取得字符串長度
$code=strtok($code,"");
$idx=0;
while ($idx < $length)
{
$tmpStr=$code[$idx].$code[$idx+1];

if (isbig5($tmpStr)) //判斷是否big5碼
{
……//如果是big5碼則進行轉(zhuǎn)換后輸出
}
else
{
$output.= $code[$idx]; //如果不是big5碼則直接輸出
}
$idx++;
}
return ($output);

  如何應(yīng)用簡體中文轉(zhuǎn)換為繁體中文的PHP函數(shù)?

  如何用PHP將簡體中文轉(zhuǎn)換為繁體中文?

  我們定義一個big5togb的函數(shù)來實現(xiàn)這個轉(zhuǎn)換:

function gbtobig5($code)
{
include "data_gb.php"; //包含有g(shù)b碼的數(shù)據(jù)文件
$output="";
$length=strlen($code);
$code=strtok($code,"");
$idx=0;
while ($idx < $length)
{
$tmpStr=$code[$idx].$code[$idx+1];

if (isgb($tmpStr)) //判斷是否gb碼
{
……//如果是gb碼轉(zhuǎn)換后輸出
}
else
{
$output.= $code[$idx]; //不是gb碼則直接輸出
}
$idx++;
}
return ($output);

  在簡繁體轉(zhuǎn)換中怎樣應(yīng)用PHP輸出控制功能?

  PHP輸出控制功能是怎樣一回事?

   PHP的輸出信息控制函數(shù)可以讓你控制你的腳本輸出的內(nèi)容,可以用于許多不同的情況,特別是在你的腳本已經(jīng)輸出信息后需要發(fā)送文件頭的情況以及需要對輸 出信息進行編輯處理的地方。輸出控制函數(shù)不對使用header()或setcookie()發(fā)送的文件頭信息產(chǎn)生影響,只對那些類似于echo()、 print() 和 PHP 代碼的數(shù)據(jù)塊有作用。

  例 1. 控制輸出

test.php
<?
function test($str){
return str_replace("world","php",$str);
}
ob_start("test");
echo "hello world";
ob_end_flush();
?> 

  這個程序在沒有輸出信息控制的情況下應(yīng)該輸出為
hello world

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

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

  相關(guān)函數(shù)說明:

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

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

  void ob_end_flush(void) - 結(jié)束(發(fā)送)輸出緩沖區(qū)的內(nèi)容,關(guān)閉輸出緩沖區(qū)

  簡繁體轉(zhuǎn)換如何實現(xiàn)?

  簡繁轉(zhuǎn)換一般通過對照表的形式實現(xiàn),我們這里只給出其實現(xiàn)代碼其中:

<?php
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 為要轉(zhuǎn)化的字符串

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

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

  如果服務(wù)器為 linux 可以考慮使用共享內(nèi)存來保存 big5 字庫信息。其更改的代碼為require.php 的判斷部分:

<?
if(session_is_registered("big5") && ($big5==1))
{
// 修改成使用共享內(nèi)存
// 判斷是否已經(jīng)創(chuàng)建,打開50000字節(jié)的 0xff3 段的共享內(nèi)存
$shm_id = @shmop_open(0xff3, "a", 0644, 50000);
if($shm_id) {
$_gb_big5_ = shmop_read($shm_id, 0,shmop_size($shm_id)); // 讀出big5 數(shù)據(jù)
}
else{
// 創(chuàng)建 50000 字節(jié)的系統(tǒng)標(biāo)識為 0xff3 的共享內(nèi)存塊
$shm_id = @shmop_open(0xff3, "c", 0644, 50000);

// 讀出數(shù)據(jù)
$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 數(shù)據(jù)
}
}
ob_start('translate_gb2big5');
}
?>

  如何分別全角和半角以避免亂碼?

  我們可以寫這樣一個函數(shù)來實現(xiàn):

function ChgTitle($title)
{
$length = 46; //我們允許字符串顯示的最大長度
if (strlen($title)>$length) {
$temp = 0;
for($i=0; $i<$length; $i++)
if (ord($title[$i]) > 128) $temp++;
if ($temp%2 == 0)
$title = substr($title,0,$length)."...";
else
$title = substr($title,0,$length+1)."...";
}
return $title;
}

  這個函數(shù)原理就是截斷一個字符,看看其ascII碼是不是大于128,如果是,說明截斷的是一個全角漢字,那么就退后一個截斷。用$length控制長度

  備注:循環(huán)判斷字符串里面的 >128 的字符個數(shù),如果半角字符為偶數(shù),則表示位置剛好為整個漢字,如果為奇數(shù),則為半個漢字,需要取下一個字符。

關(guān)鍵字:PHP、數(shù)據(jù)、服務(wù)器

分享到:

頂部 】 【 關(guān)閉
版權(quán)所有:佛山思海電腦網(wǎng)絡(luò)有限公司 ©1998-2024 All Rights Reserved.
聯(lián)系電話:(0757)22630313、22633833
中華人民共和國增值電信業(yè)務(wù)經(jīng)營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網(wǎng)站公安備案編號:44060602000007 交互式欄目專項備案編號:200303DD003  
察察 工商 網(wǎng)安 舉報有獎  警警  手機打開網(wǎng)站