php:json_encode中文不轉義

今在用php存入json數據時,中文被轉義成\u2333,之後「\」也沒有了,於是所有的中文都變成了u2333u2333。

解決方法是:

$kb = json_encode($json, JSON_UNESCAPED_UNICODE)

而「\」自動消失的話,則\n也會不能正確保存。

解決辦法是,把「\n」替換為「\\n」。具體代碼:

$kb = str_replace("\\", "\\\\", $kb);
$kb = str_replace("\r", "\\r", $kb);
$kb = str_replace("\n", "\\n", $kb);

然而php在接收$_POST時,已經自動把「\」變成了「\\」。因此,如果想把代碼寫完美,在接收到$_POST之後,要先把四個\替換成兩個,即:

$json = str_replace("\\\\", "\\", $_POST["t"]);

深入思考

之所以要再作一次轉換,原因是json跟普通字符串是不一樣的。json把「\n」視為一個字符,而在普通字符串中,不可保存單個「\」,只能是成雙的「\\」。

json_decode只識別普通字符串,而json_encode會轉換成標準json。

目前的腳本語言好像都沒有「json⇔普通字符串」的轉換功能,只好自己替換了。

這是一個不小的啊!

7 thoughts on “php:json_encode中文不轉義”

    • 這個統計不了,也沒必要統計。因為我們不可能再去動倉頡字元了,官方已經安排的很好了。如果你真的想統計的話,就把每個字元編號命名,可以直接用我的字元名稱,然後給每個字的編碼【人工】轉換。有點費勁。

      現在我們最需要做的有兩件事,一個是字首字身表(主要是字首表),還原朱邦復研製倉頡過程。;二是對於一些有爭議或一般人理解有誤的字,給出它的編碼理由。

      Reply
    • 當然還有一件事情也很需要做,那就是集結騎沈四傑的反對力量,因為只要是反對騎沈四傑的,都是講道理的。騎沈四傑從他們打算用字海戰術攪渾水的那一刻起,他們就已經不可能把道理講明白。

      由於騎沈四傑過份可笑,倒行逆施,反對勢力大有人在。連蓼汀花溆都不是「百分之百無腦接受維基倉教」。維基倉教太可笑。

      Reply

Leave a Comment