2015-12-01 17 views
5

Sorun, response()->json() yönteminde herhangi bir Rus sembol kullanamıyorum. BOM olmadanLumen'de (Laravel) Kiril sembolleri kullanmak mümkün mü?

Ayrıca
mb_detect_encoding('тест'); // returns 'UTF-8' 

, tüm dosyalarım olmuştur dönüştürücü UTF-8'e: varsayılan kodlamayı kontrol ettim

return response()->json(['users' => 'тест']); 

and 

return response()->json(['users' => mb_convert_encoding('тест', 'UTF-8')]); 

and 

return response()->json(
     ['users' => mb_convert_encoding('тест', 'UTF-8')]) 
     ->header('Content-Type', 'application/json; charset=utf-8'); 

: Zaten şu kodu denedim. Varsayılan karakter kümesini de .htaccess dosyasına ekledim (AddDefaultCharset utf-8).

Ama yine de burada olduğu gibi yanlış yanıt almak:

{"users":"\u0442\u0435\u0441\u0442"} 
+0

Neden yanlış bir yanıt olduğunu düşünüyorsunuz? –

+0

Demek istediğim benim için yanlıştır)). Ben {'kullanıcıların': 'тест'} ' – Sergey

+0

' u0442' 'т' –

cevap

7

Eğer aldıklarını yanıtı:

{"users":"\u0442\u0435\u0441\u0442"} 

geçerli JSON olduğunu! UTF-8 karakterleri kodlamak için istemiyorsanız, söyleniyor

, sadece sadece bunu yapabilirsiniz: does Neden

$data = [ 'users' => 'тест' ]; 
$headers = [ 'Content-Type' => 'application/json; charset=utf-8' ]; 

return response()->json($data, 200, $headers, JSON_UNESCAPED_UNICODE); 

çıktı sonra

{"users":"тест"} 

olurdu bu iş?

response() yardımcısını çağırmak, Illuminate\Routing\ResponseFactory örneğini oluşturacaktır. ResponseFactory 'ın json işlev aşağıdaki imzası vardır:

public function json($data = [], $status = 200, array $headers = [], $options = 0)

verileriniz için json_encode çalışan sorumlu sınıf olacak olan Illuminate\Http\JsonResponse yeni bir örneğini oluşturur json() çağrılıyor.

json_encode($data, $this->jsonOptions); 

Eğer JSON_UNESCAPED_UNICODE anlamıyla baytlı Unicode karakterleri kodlar, documentation on php.net for the json_encode function ve documentation on php.net for the json_encode Predefined Constants üzerinde görebileceğiniz gibi (varsayılan: JsonResponse yılında setData Fonksiyonun içerisinde diziniz response()->json(...) çağrı sağlanan $options ile kodlanmış olacak \ uXXXX olarak kaçmaktır).

JSON_UNESCAPED_UNICODE'un yalnızca PHP 5.4.0'dan beri desteklendiğini unutmayın, bu nedenle bunu kullanmak için 5.4.0 veya daha yeni bir sürüm kullandığınızdan emin olun.

+0

Lumen, php <5.4 ile çalışmaz, muhtemelen 5.5'i gerektirir.Başlangıçtan itibaren 9 (besteci kısıtlaması sadece son zamanlarda eklenmiş olmasına rağmen) – tacone

+0

Açıklama için teşekkür ederiz @timgws! Bu gerçekten güzel cevap! – Sergey

+0

@tacone lumen'in PHP> = 5.5.9 ile çalışmadığı, ancak PHP 5.4.0 için notun doğrudan Laravel çerçevesiyle değil json_encode ile ilgili olduğu doğrudur. – timgws

İlgili konular