文章介紹了關於PHP數組傳遞給JavaScript以及json_encode的gbk中文亂碼的解決 ,下面是建立JSON函數,這一段來自網上某一位大俠
| 代碼如下 |
複製代碼 |
/************************************************************** * * 使用特定function對數組中所有元素做處理 * @param string &$array 要處理的字串 * @param string $function 要執行的函數 * @return boolean $apply_to_keys_also 是否也應用到key上 * @access public * *************************************************************/ function arrayRecursive(&$array, $function, $apply_to_keys_also = false) { foreach ($array as $key => $value) { if (is_array($value)) { arrayRecursive($array[$key], $function, $apply_to_keys_also); } else { $array[$key] = $function($value); } if ($apply_to_keys_also && is_string($key)) { $new_key = $function($key); if ($new_key != $key) { $array[$new_key] = $array[$key]; unset($array[$key]); } } } } /************************************************************** * * 將數群組轉換為JSON字串(相容中文) * @param array $array 要轉換的數組 * @return string 轉換得到的json字串 * @access public * *************************************************************/ function JSON($array) { arrayRecursive($array, 'urlencode', true); $json = json_encode($array); return urldecode($json); } |
串連資料庫取值給數組$array1
| 代碼如下 |
複製代碼 |
$dbcnx = @mysql_connect ( "localhost", "root", "1234" ); if (! $dbcnx) { echo ("Unable to connect to the " . "database server at this time."); exit (); } if (! @mysql_select_db ( "pms" )) { echo ("Unable to locate the joke " . "database at this time."); exit (); } mysql_query ( "SET NAMES 'GB2312'" ); $q=mysql_query("select * from ability where ALV = 1"); while($row=mysql_fetch_array($q)){ $array1[] = $row[AName]; } |
數組array1傳遞到JavaScript給數組ability1
另一種json中文亂碼解決方案
如果是中文的話就要注意了
在網上找到一種解決方案:
| 代碼如下 |
複製代碼 |
/* 處理json_encode中文亂碼 */ $data = array ('game' => '冰火國度', 'name' => '刺之靈', 'country' => '冰霜國', 'level' => 45 ); echo json_encode ( $data ); echo " "; $newData = array (); foreach ( $data as $key => $value ) { $newData [$key] = urlencode ( $value ); } echo urldecode ( json_encode ( $newData ) ); ?> |
後來請教了別人,還可以用base64編碼,不過base64編碼不可以放在URL中,百度是這樣解釋的:
標準的Base64並不適合直接放在URL裡傳輸,因為URL編碼器會把標準Base64中的“/”和“+”字元變為形如“%XX”的形式,而這些“%”號在存入資料庫時還需要再進行轉換,因為ANSI SQL中已將“%”號用作萬用字元。
不過我的資料是要通過POST發送的,並不在HTTP 的head中,而在message-body裡,所以不受影響。
json_encode 只能接受utf-8格式的資料
例如:'胥'經過json_encode處理後變為'u80e5',最終的json中中文部分被替換為unicode編碼。我們要解決的就是將對象轉換為json並保證對象內部的中文在json中仍然是以正常的中文出現,現在看來只使用json_encode是不能達到目的的。
我的解決方案:先將類中的中文欄位進行url編碼(urlencode),然後再對對象進行json編碼(jsonencode),最後url解碼(urldecode)json,即最終的json,裡面的中文依舊是那個中文!
測試代碼如下:
| 代碼如下 |
複製代碼 |
class myClass { public $item1 = 1; public $item2 = '中文'; function to_json() { //url編碼,避免json_encode將中文轉為unicode $this->item2 = urlencode($this->item2); $str_json = json_encode($this); //url解碼,轉完json後將各屬性返回,確保對象屬性不變 $this->item2 = urldecode($this->item2); return urldecode($str_json); } } $c = new myClass(); echo json_encode($c); echo ' '; echo $c->to_json(); echo ' '; echo json_encode($c); echo ' '; echo json_encode('胥'); ?> 程式輸出結果: {"item1":1,"item2":"u4e2du6587"} {"item1":1,"item2":"中文"} {"item1":1,"item2":"u4e2du6587"} "u80e5" |
注具可參考:http://www.bKjia.c0m/phper/php/42865.htm
http://www.bkjia.com/PHPjc/632186.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/632186.htmlTechArticle文章介紹了關於PHP數組傳遞給JavaScript以及json_encode的gbk中文亂碼的解決 ,下面是建立JSON函數,這一段來自網上某一位大俠 代碼如下 複製代...