PHP调用Ajax编码问题解决方案.

来源:百度文库 编辑:神马文学网 时间:2024/04/29 08:08:10
今天给一老乡做一问题提交系统,利用Ajax简单做了下,中途也对Ajax的学习又重新来了一篇.主要是关于乱码的问题.
一.出现乱码的几种可能性
代码:
1、数据返回时与默认网页编码不同.如网页为gb2312,但是返回来的数据一般为utf-8.
2、数据进入数据库时,编码与数据不同。而导致乱码.
二、解决方法。
代码:
1、始终记住一个网页只能有一种编码,因此在要么修改网页的编码(但是相当麻烦)。要么修改数据的编码(当然这其实是对Ajax提交的数据重新处理).
2、统一数据库与网页的编码,要么用gb,要么用utf-8.
三、几个有用的函数.
PHP中utf-8与gb码的互换.
代码:
/**
* 编码UTF-8到GB2312之间的转换
*
* @param string $c
* @return string
*/
function utf82gb($c){
$str="";
if ($c < 0x80) {
$str.=$c;
} else if ($c < 0x800) {
$str.=chr(0xC0 | $c>>6);
$str.=chr(0x80 | $c & 0x3F);
} else if ($c < 0x10000) {
$str.=chr(0xE0 | $c>>12);
$str.=chr(0x80 | $c>>6 & 0x3F);
$str.=chr(0x80 | $c & 0x3F);
} else if ($c < 0x200000) {
$str.=chr(0xF0 | $c>>18);
$str.=chr(0x80 | $c>>12 & 0x3F);
$str.=chr(0x80 | $c>>6 & 0x3F);
$str.=chr(0x80 | $c & 0x3F);
}
return iconv(‘UTF-8‘, ‘GB2312‘, $str);
}
VBScript修改Ajax返回数据.
代码:
Function bytes2BSTR(vIn)
dim i
strReturn = ""
For i = 1 To LenB(vIn)
ThisCharCode = AscB(MidB(vIn,i,1))
If ThisCharCode < &H80 Then
strReturn = strReturn & Chr(ThisCharCode)
Else
NextCharCode = AscB(MidB(vIn,i+1,1))
strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
i = i + 1
End If
Next
bytes2BSTR = strReturn
End Function