利用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); } }