我在百度和google搜索了很久,发现都是提供转换程序,就唯独缺少换映射表文件,那位大侠有,能否提供一下,小弟万分感谢!
- <?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;
- }
- ?>
- ?>
复制代码 |