錯誤爲:- 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); } }