作者:黄敬定241 | 来源:互联网 | 2014-05-27 11:53
提交表单的时候遇到了问题,通过ajax提交到处理脚本的中文字符串被转成了utf-8的格式,于是在往数据库里执行插入的时候出现了乱码。//将类似%D5%E2%D5%E2%D5%E2%D5%E2%D5%E2%D5%E2解码,返回一个正常的字符串functionchardecode($str,$sep%){$stri
提交表单的时候遇到了问题,通过ajax提交到处理脚本的中文字符串被转成了utf-8的格式,于是在往数据库里执行插入的时候出现了乱码。
//将类似'%D5%E2%D5%E2%D5%E2%D5%E2%D5%E2%D5%E2'解码,返回一个正常的字符串
function chardecode($str,$sep='%')
{
$string = str_replace($sep,'',$str);
$len = strlen($string);
$strdecode = '';
for ($i=0;$i<$len;$i+=2){
$num1 = substr($string,$i,2);
$num1 = hexdec($num1);
$i+=2;
$num2 = substr($string,$i,2);
$num2 = hexdec($num2);
$strdecode .= chr($num1).chr($num2);
}
return $strdecode;
}
$fp = fopen( '../language/unicode-gb.tab', 'r' );
$len = strlen($instr);
$outstr = '';
for( $i = $x = 0 ; $i
$b1 = ord($instr[$i]);
if( $b1
$outstr[$x++] = chr($b1);
# printf( "[%02X]", $b1);
}
elseif( $b1 >= 224 ) { # 3 bytes UTF-8
$b1 -= 224;
$b2 = ord($instr[$i+1]) - 128;
$b3 = ord($instr[$i+2]) - 128;
$i += 2;
$uc = $b1 * 4096 + $b2 * 64 + $b3 ;
fseek( $fp, $uc * 2 );
$gb = fread( $fp, 2 );
$outstr[$x++] = $gb[0];
$outstr[$x++] = $gb[1];
# printf( "[%02X%02X]", ord($gb[0]),
ord($gb[1]));
}
elseif( $b1 >= 192 ) { # 2 bytes UTF-8
printf( "[%02X%02X]", $b1, ord($instr[$i+1])
);
$b1 -= 192;
$b2 = ord($instr[$i]) - 128;
$i++;
$uc = $b1 * 64 + $b2 ;
fseek( $fp, $uc * 2 );
$gb = fread( $fp, 2 );
$outstr[$x++] = $gb[0];
$outstr[$x++] = $gb[1];
# printf( "[%02X%02X]", ord($gb[0]),
ord($gb[1]));
}
}
fclose($fp);
if( $instr != '' ) {
# echo '##' . $instr . " becomes " . join( '', $outstr)
. "n";
return join( '', $outstr);
}
}
注意函数中用到了一个码表:unicode-gb.tab,附件中的就是了。使用的时候你得根据实际情况把函数中的第一句改成码表实际存放的位置。