Tamam Verilerin PHP sunucumdan sunulduğu bir genel JSONP API'si çalıştırıyorum. Sadece bu makaleyi okuyun: (açıklama okuyunuz)PHP'de U + 2028 veya U + 2029 karakterlerini nasıl değiştirebilirim/bırakma JSONP API'mın sonunu kesmek için
- JSON: The JavaScript subset that isn't (by Magnus Holm; May 2011)
benim JSON dizeleri U + 2028 karakter (Unicode satır ayırma) veya U + 2029 karakter içeriyor Temelde eğer
(Unicode paragraf ayırıcısı), bu tam olarak geçerli JSON'dur. Ancak JSONP kullanılırken JSON, JavaScript olarak çalıştırılır ve JavaScript'de hiçbir dize, bir JavaScript U + 2028 veya bir U + 2029 içerebilir. Görünüşe göre bu, uygun bir JSON ayrıştırıcısı kullandığınız sürece sorun değil, ancak JSONP durumunda, tarayıcı , JSON ayrıştırıcısıdır.
Aslında, bu karakterler JSONP verilerimde istemciye gönderilirken dizenin içinde bulunuyorsa, bu, JavaScript'i kesecek ve yürütmeyi durduracak dizeye bir satır veya paragraf kesmesi atacaktır. Bu, API'nın bazı girilen verileri geri göndermesi gibi bir ihtimaldir. Birisi veritabanına potansiyel olarak bir U + 2028 veya bir U + 2029 girebilir, bu yüzden JSONP olarak geri gönderdiğimde, API'm kullanarak herhangi bir uygulamayı bozar.
Sorunuz, PHP'de, müşteriye göndermeden önce, U + 2028 ve U + 2029 karakterlerini silmek veya uzaklaştırmak için JSON verilerinin nasıl sanitize edilebileceğini/çıkarılacağını nasıl açıklayabilirim?
Şu an işlemim bir dizi veri üzerinde json_encode yapıyor ve bu verileri istemciye gönderiyor. Diziden döngü yaparak ve filtreleyerek veriden kaçmalı mıyım yoksa tüm JSON kodlu dizeden tek seferde kaçmalı mıyım?
Diğer şey, PHP'de U + 2028 ve U + 2029 karakterlerinden nasıl kurtulacağından emin değilim. Sadece bir str_replace yapabilir miyim? Str_replace'ın çok baytlı olup olmadığından emin değilim ve özel yapılmış bir tane kullanmazsam no mb_str_replace işlevi var. Peki bu unicode karakterleri nasıl kaldırıyorsunuz/kaçıyorsunuz?
Çok teşekkürler.
Ben, sadece '\ u2028' ile değiştirin olamaz yanlış makaleyi okuyun sürece? – hafichuk
'\ u2028' ve' u2029' unicode yeni satır karakterleridir. Uygulamanızın bu karakterleri dizelere izin vermesini istiyor musunuz? Anlamı, sunucunuzdaki bu metni kabul ederse, CR/LF'yi aktif olarak bu karakterlerden birine dönüştürür çünkü neredeyse hiç kimse yeni satır karakterlerini kullanmaz. Bundan şüphe ediyorum. Sanırım sadece yeni satırları, CR/LF'yi ya da yenilerini ortadan kaldırmak istiyorsunuz. Hangi durumlarda, basit kaçış dizileri eklemek yerine, bunları basitçe ortadan kaldırın. –