php中big5轉utf8亂碼的解決辦法:首先生成tab檔案,並生成時要保證tab檔案不存在;然後將指定頁面轉碼測試;接著列印出文字型檔;最後big5轉【utf-8】即可。
php中big5轉utf8亂碼的解決辦法:
第一步:生成tab檔案,生成時要保證tab檔案不存在才可以
writebig5UnicodeFile();
第二步:指定頁面轉碼測試
testCode();
第三步:列印出文字型檔
printfCode();
<?php //生成big5-unicode 編碼檔案 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); } //生成tab檔案 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(); // fseek( $fp, 21000 - 900 + 42*3); 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); } //big5 轉 utf-8 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); }
以上就是php中big5轉utf8亂碼怎麼辦?的詳細內容,更多請關注TW511.COM其它相關文章!