眾所周知,json_encode通常會把json中的漢字轉義成unicode,但這不一定是我們想要的。有時候,我們需要取得漢字形式的json字串,例如需要取得gbk編碼的json字串(只要把漢字形式的字串轉碼就可以得到了)。有什麼好辦法麼?
php官方聽到了這個需求,並提供了一個可靠的解決方案:JSON_UNESCAPED_UNICODE。這個參數可以保證json_encode不再將漢字轉為unicode。
似乎這樣就解決了?當我們高高興興的用這個參數的時候,發現並沒有什麼卵用。仔細一看,這個參數只有5.4之後的php支援。那更早期的php怎麼辦呢?
社群提供了一個方案:
<span>1</span><span>function</span> my_json_encode(<span>$arr</span><span>){ </span><span>2</span><span>//</span><span>convmap since 0x80 char codes so it takes all multibyte codes (above ASCII 127). So such characters are being "hidden" from normal json_encoding</span><span>3</span><span>array_walk_recursive</span>(<span>$arr</span>, <span>function</span> (&<span>$item</span>, <span>$key</span>) { <span>if</span> (<span>is_string</span>(<span>$item</span>)) <span>$item</span> = mb_encode_numericentity(<span>$item</span>, <span>array</span> (0x80, 0xffff, 0, 0xffff), 'UTF-8'<span>); }); </span><span>4</span><span>return</span> mb_decode_numericentity(json_encode(<span>$arr</span>), <span>array</span> (0x80, 0xffff, 0, 0xffff), 'UTF-8'<span>); </span><span>5</span> }
不過這種方法只有5.3才支持,因為5.2並不支持匿名函數。至於解決辦法?把匿名函數定義一下即可。
以上就介紹了json_encode如何防止漢字轉義成unicode,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。