json_encode 中文显示问题解决方法
json已经成为当前web开发最常用的数据格式,php也从5.2开始支持json和数组的转换函数 json_encode 和 json_decode 。但使用过程中我们会发现,(下面以“你”这个汉字为例)通过json_encode 函数转换后的中文全部变成了类似 u4f60 (你)这样的编码,虽然不影响程序执行,但是很不直观.
首先,json_encode 对中文的处理是转成了对应的 unicode 码的十六进制表示符 u4f60,(和 js 的 escape 函数类似(%u4f60)),即 0x4f60。因此,我们只需要将 unicode 码(UCS-2)转成 utf-8 编码的汉字即可,函数如下:
<?php /** * json_encode 支持中文版 * @param mixed $data 参数和 json_encode 完全相同 */ function json_encode_cn($data) { $data = json_encode($data); return preg_replace("/u([0-9a-f]{4})/ie", "iconv('UCS-2', 'UTF-8', pack('H*', '$1'));", $data); } ?>
在这里,首先将目标数据转成 unicode 编码码的json串,然后利用正则将对应的 u 开头的四位字母替换成对应的文字,然后再次转码即可。preg_replace 正则中的 e 允许第二个参数执行 eval 操作,首先匹配出 uxxxx ,然后通过pack 函数将十六进制数值 xxxx 转成Unicode编码的字符,然后再将 Unicode 码转成 utf-8 码,然后就可以看到正常的汉字了。
另一种json_encode()不支持中文字符的解决方案,代码如下:
<?php /** * 对数组和标量进行 urlencode 处理 * 通常调用 wphp_json_encode() * 处理 json_encode 中文显示问题 * @param array $data * @return string */ function wphp_urlencode($data) { if (is_array($data) || is_object($data)) { foreach ($data as $k => $v) { if (is_scalar($v)) { if (is_array($data)) { $data[$k] = urlencode($v); } else if (is_object($data)) { $data->$k = urlencode($v); } } else if (is_array($data)) { $data[$k] = wphp_urlencode($v); //递归调用该函数 } else if (is_object($data)) { $data->$k = wphp_urlencode($v); } } } return $data; } /** * json 编码 * * 解决中文经过 json_encode() 处理后显示不直观的情况 * 如默认会将"中文"变成"u4e2du6587",不直观 * 如无特殊需求,并不建议使用该函数,直接使用 json_encode 更好,省资源 * json_encode() 的参数编码格式为 UTF-8 时方可正常工作 * * @param array|object $data * @return array|object */ function ch_json_encode($data) { $ret = wphp_urlencode($data); $ret = json_encode($ret); return urldecode($ret); } ?>
文章地址:
转载随意^^请带上本文地址!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

使命召喚戰區作為全新上線的一款手遊,有很多的玩家都非常的好奇要怎麼樣才能夠將這款遊戲的語言設定為中文,其實非常的簡單,玩家只需要下載中文的語言包,隨後進行使用就可以進行修改了,詳細的內容可以在這篇中文設定方法介紹之中進行了解,讓我們一起來看看吧。使命召喚戰區手遊怎麼設定中文1、先進入遊戲,點選介面右上角的設定圖示。 2.在出現的選單列中,找到【Download】這個選項並且點選。 3.在這個頁面中選擇【SIMPLIFIEDCHINESE】(簡體中文),就可以對簡體中文的安裝包進行下載了。 4.回到設

Excel表格是現在很多人都在使用的辦公室軟體之一,有些使用者因為電腦是win11系統,因此顯示的是英文介面,想要切換成中文介面,但是不知道該怎麼操作,針對這個問題,本期小編就來為廣大用戶們回答,一起來看看今日軟體教學所分享的內容。 Excel切換中文操作教學: 1、進入軟體,點選頁面上方工具列左側的「File」選項。 2、在下方給出的選項中選擇「options」。 3、進入新介面後,點選左側的「language」選項

VSCode設定中文:完整指南在軟體開發中,VisualStudioCode(簡稱VSCode)是一個常用的整合開發環境。對於使用中文的開發者來說,將VSCode設定為中文介面可以提升工作效率。本文將為大家提供一個完整的指南,詳細介紹如何將VSCode設定為中文介面,並提供具體的程式碼範例。第一步:下載安裝語言包開啟VSCode後,點選左

如何在PHPDompdf中正確顯示中文字元在使用PHPDompdf產生PDF檔案時,遇到中文字元顯示亂碼的問題是一個常見的挑戰。這是因為Dompdf預設使用的字體庫中不包含中文字元集。為了正確顯示中文字符,我們需要手動設定Dompdf的字體,並確保選擇支援中文字符的字體。以下是一些具體的步驟和程式碼範例來解決這個問題:第一步:下載中文字體檔案首先,我們需要

標題:修復PHPDompdf中文亂碼的有效途徑在使用PHPDompdf產生PDF文件時,中文字元出現亂碼是一個常見的問題。這問題通常源自於Dompdf預設不支援中文字元集,導致中文內容無法正確顯示。為了解決這個問題,我們需要採取一些有效的途徑來修復PHPDompdf中文亂碼的問題。 1.使用自訂字型檔案一個解決Dompdf中文亂碼問題的有效方法是使用

《WWE2K24》乃由VisualConcepts傾力打造的競速運動遊,已於2024年3月9日正式問世。此款遊戲倍受讚譽,許多玩家熱切關注其是否設有中文版。遺憾的是,迄今為止,《WWE2K24》尚未推出中文語言版本。 wwe2k24會有中文嗎答:目前不支援中文。 WWE2K24在Steam國區的標準版售價為199元,豪華版為329元,紀念版為395元。遊戲的配置需求較高,無論處理器、顯示卡或運行記憶體等方面,均有一定標準。官方推薦配置以及最低配置介紹:

解決PHP寫入txt檔案中文亂碼的技巧隨著網路的快速發展,PHP作為一種廣泛應用的程式語言,被越來越多的開發者所使用。在PHP開發中,經常需要對文字檔案進行讀寫操作,其中包括寫入中文內容的txt檔案。然而,由於編碼格式的問題,有時會導致寫入的中文出現亂碼。本文將介紹一些解決PHP寫入txt檔案中文亂碼的技巧,並提供具體的程式碼範例。問題分析在PHP中,文本

谷歌瀏覽器如何把中文改成英文?有些小夥伴想要將Google瀏覽器設定為英文,這樣就能夠在使用過程中不斷的提升自己的英文了。那麼設定為英文該如何操作呢?谷歌瀏覽器預設是中文的,下面小編帶給大家谷歌瀏覽器設定語言為英文的方法,一起來看看吧。 設定步驟 1、開啟【Google瀏覽器】,如下圖所示。 2、點選Google瀏覽器右上角介面【三點】選單,如下圖所示。 3、進入選單頁面後,找到【設定】,如下圖所示。 4、進入設定頁後,點選【語言】選項,如下圖所示。 5、在語言介面選擇【新增語言】,如下圖所示。
