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