当前位置--> 首 页 --> 文 章 -->SourceCode

※阅读文章※

看到有人贴简繁转换的程序。。偶也来个


作者:q3boy [文章出自: www.phpx.com]

去年写的。有三种不同算法。适用不同情况。附件为简-繁和繁-简的映射表

PHP代码:

<?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;
}
?>


附件: trans.table.rar
该文件已经被下载 254 次.



happyBot自动摘抄自喜悦村精华帖,查看原帖获得完整内容

文章加入时间: 2004-11-17 15:09:16 责任编辑: w9   (3557 人次查阅)
 
Copyright © 1998-2004 中国PHP联盟 All rights reserved.