假設有這麼乙個url
$url = "你好";
$data = ["url" => $url];
echo json_encode($data);
得到這樣的輸出
首先發現中文經過encode之後變成了16進製制,這不是亂碼,只是單純現實方法變了,因為只需要直接通過反序列化就能得到原結果,如下:
//**
$jsonstr = '';
$data = json_decode($jsonstr);
print_r($data);
//輸出
stdclass object
( [url] => 你好
)
可見這不是亂碼,那麼接下來說一說正題,雖然不是亂碼,但是看著16進製制總是影響閱讀
可以在json_encode
加乙個引數
//**
$url = "你好";
$data = ["url" => $url];
echo json_encode($data, json_unescaped_unicode);
//輸出
發現中文可以正常顯示了,但是還有乙個問題就是反斜槓被自動加了轉義字元\
看著也挺難受的,有沒有方法可以把轉義符去掉
//**
$url = "你好";
$data = ["url" => $url];
echo json_encode($data, json_unescaped_slashes);
//輸出
現在轉義符去掉了,但是中文又變成16進製制了,我想既去掉轉義符,又正常顯示中文怎麼辦
受到*nix-like許可權管理的啟發,發現可以用異或運算
//**
$url = "你好";
$data = ["url" => $url];
echo json_encode($data, json_unescaped_unicode ^ json_unescaped_slashes);
//輸出
完事。
另外補充一下,
因為json_unescaped_unicode
|json_unescaped_slashes
這幾個值的特殊性,因為都是通過1 << n (n為乙個整數)
得到的,所以不僅可以用異或運算,也可以直接使用加法
//該等式為true
((1<<1) ^ (1
<<2)) === ((1
<<1) + (1
<<2))
php中自帶函式 json encode
php場景中,需要將陣列轉為json字串,就需要用到php自帶的json encode函式 但是當陣列中含有中文字串時,轉出來的結果卻是以下結果 1 tmparr array 4 name 長褲 5 color blue 6 size xl 7 title 中年 長褲 8 910 tmpjson j...
PHP中json encode中文編碼的問題
php的json擴充套件自帶的json encode函式,如果對含有中文的字元進行編碼時,會自動轉換成unicode編碼。a array city 北京 abcd天津 echo json encode a n debian test server home php php test1.php 現在有...
PHP中json encode中文編碼的問題 學習
由於php的json擴充套件自帶的函式json encode會將漢字轉換成unicode碼 所以我們在這裡用自定義的json encode,這個函式不會將漢字轉換為unicode碼 public function customjsonencode a false if is string a els...