php json_encode utf-8中文問題
來源:程序員人生 發(fā)布時(shí)間:2013-12-07 01:08:56 閱讀次數(shù):4072次
以前碰到最多的是json_encode是gbk 編碼時(shí)出現(xiàn)亂碼,今天發(fā)現(xiàn)uft8也會(huì)出現(xiàn)中文亂碼了,下面我們一起看問題如何解決吧。
utf-8字符json_encode為變成轉(zhuǎn)成utf16編碼,也就是這個(gè)樣子,代碼如下:
- $ ./php/bin/php -r 'echo json_encode("中文");'
- "u4e2du6587"
可讀性降低,最新的php 5.4的json_encode支持了UTF-8編碼,可以把中文不編碼直接輸出,那低版本怎么辦呢?也有辦法,封裝成一個(gè)函數(shù)給大家分享一下,代碼如下:
- function my_json_encode($var) {
- return preg_replace("/u([a-f0-9]{4})/e", "iconv('UCS-4LE','UTF-8',pack('V', hexdec('U$1')))", json_encode($var));
- }
例,利用另一種辦法來解決,后臺(tái)PHP頁(yè)面(頁(yè)面編碼為UTF-8或者已經(jīng)把字符轉(zhuǎn)為UTF-8)使用json_encode將PHP中的array數(shù)組轉(zhuǎn)為JSON字符串,例如:
- <?php
- $testJSON=array('name'=>'中文字符串','value'=>'test');
- echo json_encode($testJSON);
- ?>
查看輸出結(jié)果為:
{“name”:”u4e2du6587u5b57u7b26u4e32″,”value”:”test”}
可見即使用UTF8編碼的字符,使用json_encode也出現(xiàn)了中文亂碼。解決辦法是在使用json_encode之前把字符用函數(shù)urlencode()處理一下,然后再json_encode,輸出結(jié)果的時(shí)候在用函數(shù)urldecode()轉(zhuǎn)回來,具體如下:
- <?php
- $testJSON=array('name'=>'中文字符串','value'=>'www.phpfensi.com'');
-
- foreach ( $testJSON as $key => $value ) {
- $testJSON[$key] = urlencode ( $value );
- }
- echo urldecode ( json_encode ( $testJSON ) );
- ?>
查看輸出結(jié)果為:
{“name”:”中文字符串”,”value”:”www.111cn.net”}
到此,成功地輸出了中文字符.
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)