PHP'nin json_encode Kiril karakterleri

5 Cevap php

PHP fonksiyonu json_encode kullanarak JSON dizeye Kiril UTF-8 dizi kodlamak için çalışıyorum. Örnek kod, bu gibi görünüyor:

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

Bu çalışıyor ancak senaryonun sonucu olarak temsil edilir:

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

her hangi Kiril karakter için 6 karakter yapar. Yerine kodlanmış olanları anahtar / değer çiftleri için orijinal karakterler almak için bir yolu var mı?

5 Cevap

Ben Zend çerçeve kodu buldum:

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

Fonksiyonu decodeUnicodeString (line 474) bir göz atın:

 /**
     * 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)

Bu statik, ve kolayca ayıklamak - sadece satırı değiştirin:

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

ile:

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

Değil ideal bir çözüm, ama benim için bir iş yaptı: o)

Burada JSON_UNESCAPED_UNICODE sabit kullanamaz mıyız?

PHP tek UTF-8 ile çalışır json_encode inşa ve kodlama ile ilgili nasıl çalıştığını verdiği için başka bir çan ve ıslık gibi görünüyor.

I A completely fair and balanced comparison of php json libraries Google bulunabilir. Bu size yardımcı olabilir. Eğer mümkünse, burada tablo dayalı başka bir kitaplık deneyebilirsiniz. Eğer deneyebilirsiniz json.org listelenen ek PHP kütüphaneler vardır.

Bu http://pear.php.net/pepr/pepr-proposal-show.php?id=198 ile çalıştı

JSON.php pis bypass ile, satır 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;

Teşekkürler!

Ben Türk için aynı sorunu uğraşıyor ... Gerçekten biz otomatik JS kod blokları onları dönüştüren şey tarayıcıları yapmak zorunda değilsiniz. Bu yüzden onları almanın en kolay yolu javascript yoluyla oluyor çözülür. (Ajax vs ..)

Json encode for with non ascii characters ?