PHP'nin json_encode ASCII dize üretme garantisi var mı?

3 Cevap php

Eh, tabi her şeyi söylüyor. JSON bazı UTF8 verileri dönüştürmek için json_encode kullanıyorum ve ben şu anda yalnızca ASCII bazı katmanına aktarmak gerekir. Ben de bu UTF-8 farkında yapmak için ihtiyacınız olup olmadığını merak ediyorum, ya da olduğu gibi bırakabilirsiniz.

JSON RFC baktığımızda, UTF8 bazı implemenatations iç UTF8 verilerini bırakabilir yani tavsiye edilmez olsa da JSON çıkış geçerli charset olduğunu. Soru PHP'nin uygulama ASCII olarak ilginiz döker ya da UTF-8 gibi bir şey bırakmak seçmesi olduğunu.

3 Cevap

other languages JSON desteği aksine, json_encode() ASCII dışında bir şey other oluşturmak için yeteneği yok.

JSON maddeye göre Wikipedia, dizeleri Unicode karakterleri her zaman

Ters eğik çizgi kaçan Unicode çift tırnaklı

Üzerinde PHP Kılavuzunda örnekler json_encode() bu onaylamak gibi görünüyor.

Yani ASCII / ANSI dışında herhangi bir UTF-8 karakter böyle kaçtı edilmelidir: \u0027 (not, yorumlarında işaret Ignacio @ gibi, bu anlaşma için recommended yol olduğunu bu karakterler, bir required biri)

Ancak, json_decode() geri bayt değerlerine karakterleri dönüştürmek olacak herhalde? Oraya belaya olabilir.

Eğer emin olmak için gerekiyorsa, önceden (desteklenmeyen karakterler bırakarak) ASCII içine UTF-8 dize dönüştürmek olabilir iconv() bakabilirsiniz.

Peki, json_encode bir dize döndürür. Göre PHP documentation for string,

Bir katar karakterler dizisidir. PHP 6 önce, bir karakter bir bayt olarak aynıdır. Bu tam 256 farklı karakter olası var, bir. Bu aynı zamanda PHP Unicode yerleşik desteğe sahip olduğunu ima eder. Utf8_encode () ve bazı temel Unicode işlevselliği için utf8_decode () Bkz.

Yani şu an için bunu UTF-8 farkında yapma konusunda endişelenmenize gerek yoktur. Tabii ki hala geleceğe dönük kodunuzu için, zaten bu konuda düşünmek isteyebilirsiniz.