簡體   English   中英

PHP 的 json_encode 中的西里爾字符

[英]Cyrillic characters in PHP's json_encode

我正在嘗試使用 php 的函數 json_encode 將 Cyrillic UTF-8 數組編碼為 JSON 字符串。 示例代碼如下所示:

<?php
  $arr = array(
     'едно' => 'първи',
     'две' => 'втори'
  );
  $str = json_encode($arr);
  echo $str;
?>

它工作正常,但腳本的結果表示為:

{"\u0435\u0434\u043d\u043e":"\u043f\u044a\u0440\u0432\u0438","\u0434\u0432\u0435":"\u0432\u0442\u043e\u0440\u0438"}

這為每個西里爾字符生成 6 個字符。 有沒有辦法獲取鍵/值對的原始字符而不是編碼的字符?

你不能在這里使用JSON_UNESCAPED_UNICODE常量嗎?

我在 Zend 框架的代碼中發現了這一點:

http://framework.zend.com/svn/framework/standard/trunk/library/Zend/Json/Decoder.php

看看函數 decodeUnicodeString (第 474 行):

 /**
     * Decode Unicode Characters from \u0000 ASCII syntax.
     *
     * This algorithm was originally developed for the
     * Solar Framework by Paul M. Jones
     *
     * @link   http://solarphp.com/
     * @link   http://svn.solarphp.com/core/trunk/Solar/Json.php
     * @param  string $value
     * @return string
     */
    public static function decodeUnicodeString($chrs)

它是靜態的,您可以輕松提取它 - 只需替換該行:

490:           $utf8 .= self::_utf162utf8($utf16);

和:

490:           $utf8 .= mb_convert_encoding($utf16, 'UTF-8', 'UTF-16');

不是理想的解決方案,但為我完成了工作:o)

$str = json_encode($arr, JSON_UNESCAPED_UNICODE);

這個解決方案的使用對我來說適用於拉丁字母和西里爾字母,以及 PHP 5.5

這是一個非常古老的問題,但我認為沒有正確回答。

使用這樣的東西:

print json_encode($array, JSON_UNESCAPED_UNICODE);

看起來 PHP 內置的json_encode只適用於UTF-8 ,並且沒有其他花哨的東西來調整它在編碼方面的工作方式。

我在 Google 上找到了一個完全公平和平衡的 php json 庫比較 它可能會幫助你。 如果可能,您可以根據此處的表格嘗試另一個庫。 json.org上列出了其他 PHP 庫,您可以進行試驗。

它適用於http://pear.php.net/pepr/pepr-proposal-show.php?id=198

在 JSON.php 中使用討厭的繞過,第 298 行..

$char = pack('C*', $ord_var_c, ord($var{$c + 1}));
$c += 1;
//$utf16 = $this->utf82utf16($char);
//$ascii .= sprintf('\u%04s', bin2hex($utf16));
$ascii .= $char;

謝謝!

我正在為土耳其語處理同樣的問題……事實上,我們不必做任何事情,瀏覽器會自動將它們轉換為 JS 代碼塊。 因此,解碼它們的最簡單方法是通過 javascript 獲取它們。 (阿賈克斯等...)

Json 編碼為非 ascii 字符?

您可以使用以下選項:

json_encode($json, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM