如何解決php中big5轉utf8亂碼的問題?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
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亂碼的問題的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。