PHP Ajax傳值中文字元亂碼如何解決

來源:互聯網
上載者:User

  在PHP網站開發中,為了增加使用者體驗度,Ajax是一種經常使用的技術,但是對於初學者來說,時常會碰到Ajax傳值中文字串時變成亂碼的問題,有什麼辦法可以解決PHP AJAX傳值中文字元亂碼的問題呢?

  我們知道Ajax技術由Javascript演變而來,而Javascript使用UTF-8編碼,當前後台頁面採用GBK或者其他編碼,同時沒有進行編碼轉換時,就會出現中文字元亂碼問題。

PHP Ajax傳值中文字元亂碼解決方案

  方法一、前後台頁面以及資料庫統一採用UTF8編碼,這是最簡單的方法。

  方法二、當網站已採用了諸如GBK/GB2312編碼時,分兩種情況:

  1、Ajax發送中文字元、PHP(背景程式)進行接收發生亂碼時,使用GBK與UTF8的轉換函式對接受的字串進行編碼轉換,再存入相關資料庫,這裡假設資料庫採用的編碼是GBK或者GB2312,如果配置的PHP運行環境支援ICONV函數,你也可使用ICONV函數進行編碼轉換,然後在存入資料庫時

1
mysql_query("set names gb2312");

即可解決Ajax傳值中文亂碼問題。

  2、PHP發送中文字元、Ajax(前台頁面)進行接收發生亂碼時,同樣可以使用ICONV函數對從資料庫中取出的字串進行編碼轉換,再傳值至Ajax前台,即responseText。或者在PHP(背景程式)輸出字元流之前加上

1
header('Content-type: text/html;charset=gb2312');

即可。特別指出:在使用Ajax做多級聯動(比如省份城市聯動)時,採用XML互動形式,在輸出XML之前也必須加上header。

  同時貼出GB2312與UTF8的轉換函式,方便大家在遇到Ajax中文亂碼問題時多一種解決方案。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
function gb2utf8($gb,$filename)
{
    if(!trim($gb))
    return$gb;
    //$filename="gb2312.txt";
    $tmp=file($filename);
    $codetable=array();
    while(list($key,$value)=each($tmp))
    $codetable[hexdec(substr($value,0,6))]=substr($value,7,6);
    $utf8="";
    while($gb)
    {
        if(ord(substr($gb,0,1))>127)
        {
            $thisgb=substr($gb,0,2);
            $gb=substr($gb,2,strlen($gb));
            $utf8.=u2utf8(hexdec($codetable[hexdec(bin2hex($thisgb))-0x8080]));
        }
        else
        {
            $gb=substr($gb,1,strlen($gb));
            $utf8.=u2utf8(substr($gb,0,1));
        }
    }
    $ret="";
    for($i=0;$i<strlen($utf8);$i+=3)
    $ret.=chr(substr($utf8,$i,3));
    return$ret;
}

function u2utf8($c)
{
    for($i=0;$i<count($c);$i++)
    $str="";
    if($c<0x80){
        $str.=$c;
    }
    elseif($c<0x800){
        $str.=(0xC0$c>>6);
        $str.=(0x80$c&0x3F);
    }
    elseif($c<0x10000){
        $str.=(0xE0$c>>12);
        $str.=(0x80$c>>6&0x3F);
        $str.=(0x80$c&0x3F);
    }
    elseif($c<0x200000){
        $str.=(0xF0$c>>18);
        $str.=(0x80$c>>12&0x3F);
        $str.=(0x80$c>>6&0x3F);
        $str.=(0x80$c&0x3F);
    }
    return$str;
}

:此函數需要使用GB2312中文編碼錶,請點擊這裡下載,由於是採用gb2312,對於一些比較生僻的詞在轉換時可能會出現亂碼。

  :PHP網站開發教程-leapsoul.cn著作權,轉載時請以連結形式註明原始出處及本聲明,謝謝。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.