首頁  >  文章  >  後端開發  >  如何解決php ajax傳值亂碼的問題

如何解決php ajax傳值亂碼的問題

藏色散人
藏色散人原創
2020-09-01 10:31:352556瀏覽

php ajax傳值亂碼的解決方法:1、將前後台頁面以及資料庫統一採用UTF8編碼;2、在存入資料庫時使用「mysql_query("set names gb2312");」方法;3 、使用ICONV函數對從資料庫中取出的字串進行編碼轉換。

如何解決php ajax傳值亂碼的問題

推薦:《PHP影片教學

在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函數進行編碼轉換,然後存入資料庫時

mysql_query("set names gb2312");

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

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

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

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

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

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;
    }
    else if ($c < 0x800) {
        $str.=(0xC0 $c>>6);
        $str.=(0x80 $c & 0x3F);
    }
    else if ($c < 0x10000) {
        $str.=(0xE0 $c>>12);
        $str.=(0x80 $c>>6 & 0x3F);
        $str.=(0x80 $c & 0x3F);
    }
    else if ($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 ajax傳值亂碼的問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn