2017-03-22 2 views
0

Wir verwenden Guzzle 6, um eine Anfrage an eine .NET API aus unserer Laravel 5-Anwendung zu stellen.Guzzle, JSON und UTF-16

zB (nicht echten Code)

$response = Guzzle\Client->get('/utf16-endpoint'); 
$array = json_decode($response->getBody()); 

Das macht $array = null und wieder mit anderen Varianten wie

$array = json_decode((string) $response->getBody()); 

oder

$array = json_decode($response->getBody()->getContent()); 

Diese alle null

Rückkehr am Ende

Ich kann die API-Antwort nicht einfügen, da sie immer wieder von Dingen wie Gists, Pastebin usw. konvertiert wird. Daher habe ich eine Antwort als .txt-Datei hochgeladen. Wenn Sie in sublime/atom usw. öffnen, sollte dies als "UTF- 16 LE "

Was wäre der richtige Weg (wir benutzen PHP7), um diese Antwort von guzzle zu nehmen und sicherzustellen, dass der JSON in ein Array mit Objekten umgewandelt wird?

Antwort

1

Sie können aus der Dokumentation feststellen, dass json_decode() works only with UTF-8 in PHP.

So haben Sie gerade Sie UTF-8 als Reaktion auf konvertieren und es wird funktionieren:

$content = $response->getBody()->getContent(); 
$data = json_decode(
    mb_convert_encoding($content, 'UTF-8', 'UTF-16LE') 
); 
+0

Der Schlüssel Ich habe bemerkt wurde, dass UTF-16 ist nicht UTF-16LE Spek! Ich merkte nicht, dass wir die LE brauchten, sobald wir hinzugefügt haben, dass alles in Ordnung war! – Owen