」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼 PHP 的 json_encode 函數會將 UTF-8 字串轉換為十六進位實體?

為什麼 PHP 的 json_encode 函數會將 UTF-8 字串轉換為十六進位實體?

發佈於2024-11-11
瀏覽:358

Why Does PHP\'s json_encode Function Convert UTF-8 Strings to Hexadecimal Entities?

PHP json_encode 函數將UTF-8 字串轉換為十六進位實體:為什麼以及如何解決

PHP json_encode 函數可以對PHP 變數進行編碼轉換為JSON(JavaScript 物件表示法)。但是,在處理 UTF-8 編碼中的 Unicode 字元時,該函數可能會預設將它們轉換為十六進位實體。這是因為 JSON 本身不支援 UTF-8 字符,UTF-8 字元是表示非 ASCII 字元的多位元組字元。

為什麼 PHP 會將 UTF-8 字串轉換為十六進位實體?

PHP 的 json_encode 函數使用 JSON 規範,該規範規定不能表示為 ASCII 字元的 Unicode 字元必須使用十六進位轉義序列進行編碼。這可確保與可能不支援 UTF-8 的舊版應用程式和裝置的兼容性。

解決轉換問題

解決此問題並避免轉換UTF-8字串轉換為十六進位實體,PHP 在5.4.0 版本中引入了JSON_UNESCAPED_UNICODE選項。此選項指示 json_encode 對非 ASCII 字元使用 Unicode 代碼點而不是十六進位轉義序列。

範例

假設您有以下 PHP 腳本:

此程式碼將輸出以下JSON 字串,其中西里爾字元被編碼為十六進位實體:

"\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u0438 \u0433\u0440\u0435\u0448\u043a\u0430."

要直接輸出UTF-8字符,可以使用JSON_UNESCAPED_UNICO選項:

這將產生以下 JSON 字串,其中西里爾字元使用其 Unicode 碼點表示:

"База данни грешка."
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3