關於SQL Server獲取的數據遍歷轉碼問題(數組轉JSON)

利用PHP代碼調用數據庫視圖的數據,json_encode出來後報錯。

錯誤爲:- Malformed UTF-8 characters, possibly incorrectly encoded

SQL sever 裏面的數據爲GBK格式,需要一一遍歷轉換格式輸出。

代碼如下:

    $hostname='192.168.1.XXX';

    $dbname='ZD';

    $username='Reader';

    $password='TestReader';
//使用ODBC方式連接
    $dbDB = new PDO("odbc:Driver={SQL Server};Server=$hostname;Database=$dbname", $username, $password);

    $sql = "select top 100 * from V_XZ_SPZK;";
    

    $rs=$dbDB->prepare($sql);//準備查詢語句
    $rs->execute();            //執行查詢語句
    $rs->setFetchMode(PDO::FETCH_ASSOC);
    $result_arr = $rs->fetchAll();

    $a =arrayiconv::Conversion($result_arr,"gbk","utf-8");
    $result= json_encode($a,JSON_UNESCAPED_UNICODE);
    return ($result);


    switch (json_last_error()) {
        case JSON_ERROR_NONE:
            echo ' - No errors';
            break;
        case JSON_ERROR_DEPTH:
            echo ' - Maximum stack depth exceeded';
            break;
        case JSON_ERROR_STATE_MISMATCH:
            echo ' - Underflow or the modes mismatch';
            break;
        case JSON_ERROR_CTRL_CHAR:
            echo ' - Unexpected control character found';
            break;
        case JSON_ERROR_SYNTAX:
            echo ' - Syntax error, malformed JSON';
            break;
        case JSON_ERROR_UTF8:
            echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';
            break;
        default:
            echo ' - Unknown error';
            break;
    }

    echo PHP_EOL;

利用已經編輯好的轉碼程序:(引用作者阿夏:http://www.cnblogs.com/upmyself/archive/2013/01/06/2848477.html)

class arrayiconv
{
    static protected $in;
    static protected $out;
    /**
     * 靜態方法,該方法輸入數組並返回數組
     *
     * @param unknown_type $array 輸入的數組
     * @param unknown_type $in 輸入數組的編碼
     * @param unknown_type $out 返回數組的編碼
     * @return unknown 返回的數組
     */
    static public function Conversion($array,$in,$out)
    {
        self::$in=$in;
        self::$out=$out;
        return self::arraymyicov($array);
    }
    /**
     * 內部方法,循環數組
     *
     * @param unknown_type $array
     * @return unknown
     */
    static private function arraymyicov($array)
    {
        foreach ($array as $key=>$value)
        {
            $key=self::myiconv($key);
            if (!is_array($value)) {
                $value=self::myiconv($value);
            }else {
                $value=self::arraymyicov($value);
            }
            $temparray[$key]=$value;
        }
        return $temparray;
    }
    /**
     * 替換數組編碼
     *
     * @param unknown_type $str
     * @return unknown
     */
    static private function myiconv($str)
    {
        return iconv(self::$in,self::$out,$str);
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章