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