PHP json_encode 函數將UTF-8 字串轉換為十六進位實體:為什麼以及如何解決
PHP json_encode 函數可以對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 腳本:
<code class="php"><?php $text = "База данни грешка."; echo json_encode($text); ?></code>
此程式碼將輸出以下JSON 字串,其中西里爾字元字串為十六進位實體:
<code class="json">"\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u0438 \u0433\u0440\u0435\u0448\u043a\u0430."</code>
要直接輸出UTF-8 字符,可以使用JSON_UNESCAPED_UNICODE 選項:
<code class="php"><?php $text = "База данни грешка."; echo json_encode($text, JSON_UNESCAPED_UNICODE); ?></code>
這將產生以下JSON 字串,其中西里爾字符使用其Unicode 代碼點表示:
<code class="json">"База данни грешка."</code>
以上是為什麼 PHP 的 json_encode 函數會將 UTF-8 字串轉換為十六進位實體?的詳細內容。更多資訊請關注PHP中文網其他相關文章!