PHP數組傳遞給JavaScript以及json_encode的gbk中文亂碼的解決_PHP教程

來源:互聯網
上載者:User
文章介紹了關於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函數,這一段來自網上某一位大俠 代碼如下 複製代...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.