SORU
27 Mart 2009, Cuma


json_decode verir Java eklentisi aramadan sonra BOŞ

json_encode json_decode garip bir davranışı var ve bir çözüm bulamadım:

Benim php uygulama php bir web hizmeti çağrıları. Bu Java eklentisi bu gibi görünüyor json döndürür:

var_dump($foo):
string(62) "{"action":"set","user":"123123123123","status":"OK"}"

şimdi benim uygulamasında json decode etmek istiyorum:

$data = json_decode($foo, true)

ama NULL döndürür:

var_dump($data):
NULL

Php5 kullanıyorum. Bu Java eklentisi gelen yanıtın İçerik Türü: "text/html; charset=utf-8" ("application/json; charset=utf-8" kullanmaya çalıştı)

Sebebi ne olabilir?

CEVAP
27 Mart 2009, Cuma


DÜZENLEME: Sadece yaptığı string OP tarafından sağlanan bazı hızlı inceleme. Küçük "karakter" kıvırcık ön ayracıUTF-8 B(yte) O(rder) M(ark) 0xEF 0xBB 0xBFbir. Bu bayt sırası olarak burada görüntülenir neden bilmiyorum.

Aslında sistem verileri elde bir veri önceki BOM ile UTF-8 olarak kodlanmış gönderir. json_decode() (substr($string, 3) yapacak) içine atarsın önce dizeden ilk üç bayt kaldırmak gerekir.

string(62) "{"action":"set","user":"123123123123","status":"OK"}"
            ^
            |
            This is the UTF-8 BOM

Kuroki Kaze keşfettiği gibi, bu karakter kesinlikle json_decode başarısız nedenidir. Verilen haliyle dize doğru JSON format yapısı (RFC 4627) değil

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Creavite

    Creavite

    8 Mart 2009
  • LinusTechTips

    LinusTechTip

    25 Kasım 2008
  • Drakinen

    Drakinen

    1 EYLÜL 2008