综述:有许多朋友对网站提供繁、简两种版本感到很困惑,是怎么实现的呢?这也是时下众多PHP书籍中被漏掉的一个很重要的知识点。笔者搜集整理并根据自己的开发经验将一些重点与疑点罗列出来与大家共享!
如何应用繁体中文转换为简体中文的PHP函数?
我们定义一个big5togb的函数来实现这个转换:
function big5togb($code)
{
//参数$code是big5码的字符串
include "data_big5.php"; //包含big5数据的文件
$output="";
$length=strlen($code); //取得字符串长度
$code=strtok($code,"");
$idx=0;
while ($idx < $length)
{
$tmpStr=$code[$idx].$code[$idx+1];
if (isbig5($tmpStr)) //判断是否big5码
{
……//如果是big5码则进行转换后输出
}
else
{
$output.= $code[$idx]; //如果不是big5码则直接输出
}
$idx++;
}
return ($output);
}
如何应用简体中文转换为繁体中文的PHP函数?
如何用PHP将简体中文转换为繁体中文?
我们定义一个big5togb的函数来实现这个转换:
function gbtobig5($code)
{
include "data_gb.php"; //包含有gb码的数据文件
$output="";
$length=strlen($code);
$code=strtok($code,"");
$idx=0;
while ($idx < $length)
{
$tmpStr=$code[$idx].$code[$idx+1];
if (isgb($tmpStr)) //判断是否gb码
{
……//如果是gb码转换后输出
}
else
{
$output.= $code[$idx]; //不是gb码则直接输出
}
$idx++;
}
return ($output);
}
在简繁体转换中怎样应用PHP输出控制功能?
PHP输出控制功能是怎样一回事?
PHP的输出信息控制函数可以让你控制你的脚本输出的内容,可以用于许多不同的情况,特别是在你的脚本已经输出信息后需要发送文件头的情况以及需要对输出信息进行编辑处理的地方。输出控制函数不对使用header()或setcookie()发送的文件头信息产生影响,只对那些类似于echo()、print() 和 PHP 代码的数据块有作用。
例 1. 控制输出
test.php
<?
function test($str){
return str_replace("world","php",$str);
}
ob_start("test");
echo "hello world";
ob_end_flush();
?>
这个程序在没有输出信息控制的情况下应该输出为
hello world
但通过指定了输出控制函数后,输出变为
hello php
在上面的例子中,使用echo()的输出内容将会保存在输出缓冲区中,直到调用了ob_end_flush()或者脚本运行终止,然后输出信息由自定义的处理函数进行处理(替换里面的字符串)并返回结果。
相关函数说明:
void ob_start([string output_callback])- 打开输出缓冲区
所有的输出信息不在直接发送到浏览器,而是保存在输出缓冲区里面,可选得回调函数用于处理输出结果信息。
void ob_end_flush(void) - 结束(发送)输出缓冲区的内容,关闭输出缓冲区
简繁体转换如何实现?
简繁转换一般通过对照表的形式实现,我们这里只给出其实现代码其中:
<?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 は変換される文字列です
4 big5 フォントを保存する方法が改善されました
セッションを使用して big5 フォントを保存できますが、主にセッションがフォームにも実装されているため、使用後は速度が大幅に遅くなりますファイルのサイズが異なるため、パフォーマンスは向上しません。また、セッションでは簡体字中国語と繁体字中国語のフラグに基づいてロードするかどうかが自動的に決定されないため、big5 フォントも簡体字中国語でロードされるため、速度が低下します。 。
サーバーが Linux の場合、big5 フォント情報を保存するために共有メモリの使用を検討できます。変更したコードはrequire.phpの判定部分です:
<? if(session_is_registered("big5") && ($big5==1)) { //共有メモリを使用するように修正 //作成されているかどうかを確認し、セグメント 0xff3 の 50000 バイトの共有メモリをオープンします $shm_id = @shmop_open(0xff3, "a", 0644, 50000); if($shm_id) { $_gb_big5_ = shmop_read($shm_id) , 0 ,shmop_size($shm_id)); //big5 データを読み取ります } else{ //システム ID 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_write = shmop_write($shm_id, $_gb_big5_,0) // big5 データを書き込みます } } ob_start('translate_gb2big5'); } ?> |
$temp = 0; $i=0; $i<$length; $i++) if (ord($title) [$i ]) > 128) $temp++; if ($temp%2 == 0) $title = substr($title,0,$length)."..."; ($title ,0,$length+1)."..."; } return $title; この関数の原理は、文字を切り捨てて、その ascII コードが次より大きいかどうかを確認することです。 128. もしそうなら、切り捨てが全角漢字の場合、それを 1 段階後ろに切り捨てることを説明してください。長さを制御するには $length を使用します 注: 文字列内の文字数が 128 を超える場合は、その位置が正確に中国語文字全体であることを意味します。奇数の場合は、次の文字を削除する必要があります。 |