<?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; } www.phperz.com
/** *低速版,最低内存使用,使用于少量字符时 *@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++) { www.phperz.com $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; } ?> php程序员之家
|