看到有人贴简繁转换的程序
发布时间:2006-02-08 16:55:01 文章来源: 浏览次数:1555
<?php
/**
*中速版,中等内存使用,使用于一般需求或有大量重复字的大段文本
*@text:待转换的字符串
*@table_file:转换映射表文件名
*/
function encode_trans1( $text, $table_file='gb2big5') {
$fp = fopen( $table_file.'.table', "r");
$cache = array();
$max=strlen( $text)-1;
for( $i=0; $i< $max; $i++) {
$h=ord( $text[ $i]);
if( $h>=160) {
$l=ord( $text[ $i+1]);
if( $h==161 && $l==64) {
$text[ $i]=" ";
} else{
$cut = substr( $text, $i,2);
if(! $cache[ $cut]) {
fseek( $fp,( $h-160)*510+( $l-1)*2);
$cache[ $cut] = fread( $fp,2);
}
$text[ $i] = $cache[ $cut][0];
$text[++ $i] = $cache[ $cut][1];
}
}
}
fclose( $fp);
return $text;
}
/**
*低速版,最低内存使用,使用于少量字符时
*@text:待转换的字符串
*@table_file:转换映射表文件名
*/
function encode_trans2( $text, $table_file='gb2big5') {
$fp = fopen( $table_file.'.table', "r");
$max=strlen( $text)-1;
for( $i=0; $i< $max; $i++) {
$h=ord( $text[ $i]);
if( $h>=160) {
$l=ord( $text[ $i+1]);
if( $h==161 && $l==64) {
$gb=" ";
}else{
fseek( $fp,( $h-160)*510+( $l-1)*2);
$gb=fread( $fp,2);
}
$text[ $i]= $gb[0];
$text[ $i+1]= $gb[1]; $i++;
}
}
fclose( $fp);
return $text;
}
/**
*高速版,最高内存使用,使用于大段文本时
*@text:待转换的字符串
*@table_file:转换映射表文件名
*/
function encode_trans3( $text, $table_file='gb2big5') {
$fp = fopen( $table_file.'.table', "r");
$str = fread( $fp,strlen( $table_file.'.table'));
fclose( $fp);
$max=strlen( $text)-1;
for( $i=0; $i< $max; $i++) {
$h=ord( $text[ $i]);
if( $h>=160) {
$l=ord( $text[ $i+1]);
if( $h==161 && $l==64) {
$text[ $i]=' ';
$text[++ $i]=' ';
}else{
$pos = ( $h-160)*510+( $l-1)*2;
$text[ $i]= $str[ $pos];
$text[++ $i]= $str[ $pos+1];
}
}
}
return $text;
}
?>
作者:q3boy