<?php
function loadBig5(){
$fp = fopen ( './big5-unicode.txt' , 'r' );
$big5_unicode_arr = array ();
while ( $one_line = fgets ( $fp )) {
$one_line_arr = explode ( "\t" , $one_line );
$big5 = hexdec(trim( $one_line_arr [0]));
$unicode = trim( $one_line_arr [1]);
if ( strpos ( $unicode , ',' )) {
$unicode = ltrim( explode ( ',' , $unicode )[0], '<' );
}
$big5_unicode_arr [ $big5 ] = hexdec( $unicode );
}
return $big5_unicode_arr ;
}
function putContent( $content ) {
static $fp ;
if (!isset( $fp )) {
$fp = fopen ( './big5-unicode-new.tab' , 'a+' );
}
fwrite( $fp , $content );
}
function writebig5UnicodeFile() {
$big5_unicode_arr = loadBig5();
$big5_unicod_content = array ();
$min = 2000;
$max = 0;
$max_unicode = 0;
foreach ( $big5_unicode_arr as $big5 => $unicode ) {
$h = floor ( $big5 /256);
$l = $big5 %256;
$index = ( $h -135)*256*3+ $l *3;
if ( $index < $min ) {
$min = $index ;
}
if ( $max < $index ) {
$max = $index ;
}
if ( $unicode > $max_unicode ) {
$max_unicode = $unicode ;
}
$h_1 = floor ( $unicode /65536);
$h_2 = floor ( $unicode /256);
$h_3 = $unicode %256;
$big5_unicod_content [ $index ] = chr ( $h_1 ). chr ( $h_2 ). chr ( $h_3 );
}
for ( $i =0; $i <= $max ; $i = $i +3) {
if (!isset( $big5_unicod_content [ $i ])) {
$big5_unicod_content [ $i ] = chr (0). chr (0). chr (0);
}
}
for ( $i =0; $i <= $max ; $i = $i +3) {
if ( strlen ( $big5_unicod_content [ $i ]) == 3) {
putContent( $big5_unicod_content [ $i ]);
} else {
die ( 'error' );
}
}
}
function testCode() {
$content = file_get_contents ( './temlate_2.html' );
echo b2u( $content );
}
function printfCode() {
$fp = fopen ( './big5-unicode-new.tab' , 'r' );
$len = filesize ( './big5-unicode-new.tab' );
$x = 0;
$outstr = array ();
for ( $i = $x =0; $i < $len ; $i = $i +3) {
$uni = fread ( $fp , 3 );
$codenum = ord( $uni [0])*65536 + ord( $uni [1])*256 + ord( $uni [2]);
if ( $codenum == 0) {
$outstr [ $x ++] = ' ' ;
} elseif ( $codenum < 0x80 ) {
$outstr [ $x ++] = chr ( $codenum );
} elseif ( $codenum < 0x800) {
$outstr [ $x ++] = chr ( 192 + $codenum / 64 );
$outstr [ $x ++] = chr ( 128 + $codenum % 64 );
} elseif ( $codenum < 0x10000){
$outstr [ $x ++] = chr ( 224 + floor ( $codenum / 4096 ));
$codenum = $codenum %4096;
$outstr [ $x ++] = chr ( 128 + floor ( $codenum / 64 ));
$outstr [ $x ++] = chr ( 128 + ( $codenum % 64) );
} else {
$outstr [ $x ++] = chr ( 240 + floor ( $codenum / 262144 ));
$codenum = $codenum %262144;
$outstr [ $x ++] = chr ( 128 + floor ( $codenum / 4096 ));
$codenum = $codenum %4096;
$outstr [ $x ++] = chr ( 128 + ( $codenum / 64) );
$outstr [ $x ++] = chr ( 128 + ( $codenum % 64) );
}
}
echo join( '' , $outstr );
}
function b2u( $instr ) {
$fp = fopen ( './big5-unicode-new.tab' , 'r' );
$len = strlen ( $instr );
$outstr = '' ;
for ( $i = $x = 0 ; $i < $len ; $i ++ ) {
$h = ord( $instr [ $i ]);
if ( $h >= 135 ) {
$l = ord( $instr [ $i +1]);
fseek ( $fp , ( $h -135)*256*3+ $l *3 );
$uni = fread ( $fp , 3 );
$codenum = ord( $uni [0])*65536 + ord( $uni [1])*256 + ord( $uni [2]);
if ( $codenum == 0) {
$outstr [ $x ++] = ' ' ;
} elseif ( $codenum < 0x80 ) {
$outstr [ $x ++] = chr ( $codenum );
} elseif ( $codenum < 0x800) {
$outstr [ $x ++] = chr ( 192 + $codenum / 64 );
$outstr [ $x ++] = chr ( 128 + $codenum % 64 );
} elseif ( $codenum < 0x10000){
$outstr [ $x ++] = chr ( 224 + floor ( $codenum / 4096 ));
$codenum = $codenum %4096;
$outstr [ $x ++] = chr ( 128 + floor ( $codenum / 64 ));
$outstr [ $x ++] = chr ( 128 + ( $codenum % 64) );
} else {
$outstr [ $x ++] = chr ( 240 + floor ( $codenum / 262144 ));
$codenum = $codenum %262144;
$outstr [ $x ++] = chr ( 128 + floor ( $codenum / 4096 ));
$codenum = $codenum %4096;
$outstr [ $x ++] = chr ( 128 + ( $codenum / 64) );
$outstr [ $x ++] = chr ( 128 + ( $codenum % 64) );
}
$i ++;
}
else
$outstr [ $x ++] = $instr [ $i ];
}
fclose( $fp );
if ( $instr != '' )
return join( '' , $outstr );
}
|