- 1、PHP中json_encode中文亂碼問題
- 2、關於php後台獲取前台post過來的json數據中文亂碼的問題~
- 3、我用php輸出json 中文顯示亂碼,請大俠幫忙解決一下
- 4、php生成json數據為亂碼的幾種處理方法
- 5、PHP中,從伺服器端接收到的json字元串前端有亂碼如何解決
php 中使用 json_encode() 內置函數(php 5.2)可以使用得 php 中數據可以與其它語言很好的傳遞並且使用它。這個函數的功能是將數值轉換成json數據存儲格式
$arr = array (‘a’=1,’b’=2,’c’=3,’d’=4,’e’=5);
echo json_encode($arr);
//結果
//{“a”:1,”b”:2,”c”:3,”d”:4,”e”:5}
/*
下面看一款json_encode中文亂碼問題
解決方法是用urlencode()函數處理以下,在json_encode之前,把所有數組內所有內容都用urlencode()處理一下,然用json_encode()轉換成json字元串,最後再用urldecode()將編碼過的中文轉回來
*/
function arrayrecursive($array, $function, $apply_to_keys_also = false)
{
static $recursive_counter = 0;
if (++$recursive_counter 1000) {
die(‘possible deep recursion attack’);
}
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]);
}
}
}
$recursive_counter–;
}
/**************************************************************
*
* 將數組轉換為json字元串(兼容中文)
* @param array $array 要轉換的數組
* @return string 轉換得到的json字元串
* @access public
*
*************************************************************/
function json($array) {
arrayrecursive($array, ‘urlencode’, true);
$json = json_encode($array);
return urldecode($json);
}
$array = array
(
‘name’=’希亞’,
‘age’=20
);
echo json($array);
//應用實例
$servname=”localhost”;
$sqlservname=”root”;
$sqlservpws=”123456″;
$sqlname=”lock1″;
$db=mysql教程_connect($servname,$sqlservname,$sqlservpws) or die(“資料庫教程連接失敗”);
mysql_select_db($sqlname,$db);
$sql = “select * from t_operater”;
$result =mysql_query($sql);
$rows = mysql_num_rows($result);
while($obj = mysql_fetch_object($result))
{
$arr[] = $obj;
}
echo ‘({“total”:”‘.$rows.'”,”results”:’.json_encode($arr).’})’;
header不設置都可以,但是feedback.php文件編碼格式要改成utf8的,注意:是文件的編碼格式
用json_decode()方法可以把這些代碼還原為php格式,然後輸出就可以看到中文了
如下:
$js_str = 你所謂的亂碼;
$arr = json_deconde ($js_str);
print_r($arr);
亂碼指的是計算機系統不能顯示正確的字元,而顯示其他無意義的字元或空白,如一堆ASCII Code。所顯示出來的文字統稱為亂碼。亂碼是因為所使用的字元的源碼在本地計算機上使用了錯誤的顯示字型檔,或在本地計算機的字型檔中找不到相應於源碼所指代的字元所致。
通俗點講:
亂碼就是你打開王頁或郵箱,裡面的字不是全中文的,而是一些亂七八糟莫名其妙的無意義的字元組合在一起。主要是計算機的字型檔出錯所致。
1一般出現在網頁,用網頁上面的查看——編碼——簡體中文即可解決。
2 出現亂碼一般是Windows系統字型檔的問題,可能是系統錯誤或不正常關機造成的,也可能是某些軟體需要使用操作系統以外的字型檔造成的。解決辦法得看具體的問題,一般情況下的Windows亂碼可以通過以下三種方法解決。
第一種方法是下載 解決Windows XP SP2亂碼補丁 V1.00 (華軍軟體園)
第二種是解決Windows系統錯誤造成的亂碼問題,重啟後用F8鍵激活系統菜單,進入安全模式。等系統檢查完畢,硬碟沒有響應後再重新正常退出並重新啟動計算機,正常進入Windows,字體一般就能自動恢復。這是因為Windows在進入安全模式時會重新索引字型檔及整理菜單。
第三種解決方法用於修正軟體造成的註冊表中關於字體部分設置出錯的問題。運行「Regedit」啟動註冊表編輯器。在「HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\fontassoc」鍵下有 「Associated CharSet」和「Associated DefaultFonts」 兩個鍵。當出現漢字亂碼時,這兩個鍵中的內容就可能不正確甚至不完整。它們的正確內容應該是「Associated CharSet」內有「(默認)、ANSI(00)、GB2312(86)、OEM(FF)、SYMBOL(02)」幾項串值,鍵值分別為「(未設置鍵值)、Yes、Yes、Yes、No」,而「Associated DefaultFonts」內有「(默認)、AssocSystemFont、FontPackegeDecorative、FontPackegeDontCare、FontPackegeModern、FontPackegeRoman、FontPackegeScript、FontPackegeSwiss」幾項串值,鍵值分別為「(未設置鍵值)、simsun.ttf、宋體、宋體、宋體、宋體、宋體、宋體」。重新啟動系統後漢字就應該顯示正確了。建議您在修改前先備份註冊表,以防修改錯誤使系統出現問題。
?phpclass Json{ public static function encode($str){ $code = json_encode($str); return preg_replace(“#\\u([0-9a-f]+)#ie”, “iconv(‘UCS-2’, ‘UTF-8’, pack(‘H4’, ‘\1’))”, $code); } public static function decode($str){ return json_decode($str); }}?用上面的代碼可以解決在存儲JSON生成的字串為亂碼的問題友情提示:參數為UTF-8編碼過的字串或在用UTF-8保存的程序中直接引用上面的兩個靜態方法附:php pack()函數說明pack壓縮資料到位字元串之中。語法: string pack(string format, mixed [args]…);返回值: 字元串(二進位)函數種類: 資料處理內容說明本函數用來將資料壓縮打包到位的字元串之中。本函數和 Perl 的同名函數功能用法完全相同。參數 format 為壓縮的格式,見下表a 將字元串空白以 NULL 字元填滿A 將字元串空白以 SPACE 字元 (空格) 填滿h 十六進位字元串,低位在前H 十六進位字元串,高位在前c 有號字元C 無號字元s 有號短整數 (十六位,依計算機的位順序)S 無號短整數 (十六位,依計算機的位順序)n 無號短整數 (十六位, 高位在後的順序)v 無號短整數 (十六位, 低位在後的順序)i 有號整數 (依計算機的順序及範圍)I 無號整數 (依計算機的順序及範圍)l 有號長整數 (卅二位,依計算機的位順序)L 無號長整數 (卅二位,依計算機的位順序)N 無號短整數 (卅二位, 高位在後的順序)V 無號短整數 (卅二位, 低位在後的順序)f 單精確浮點數 (依計算機的範圍)d 倍精確浮點數 (依計算機的範圍)x 空位X 倒回一位@ 填入 NULL 字元到絕對位置使用範例?
原創文章,作者:X2OCM,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/126509.html