ठीक है, मैं एक सार्वजनिक JSONP API चला रहा हूं जो डेटा को मेरे PHP सर्वर से परोसा जाता है। मैं सिर्फ यह लेख पढ़ें:PHP में यू + 2028 या यू + 2029 वर्णों को प्रतिस्थापित करने/सहेजने के लिए कैसे करें मेरे JSONP API को तोड़ने के लिए
- JSON: The JavaScript subset that isn't (by Magnus Holm; May 2011)
(स्पष्टीकरण के लिए कृपया पढ़ें)
असल में अगर मेरी JSON तार एक U + 2028 चरित्र (यूनिकोड लाइन विभाजक) या U + 2029 वर्ण है (यूनिकोड अनुच्छेद विभाजक) तो यह पूरी तरह से वैध JSON है। हालांकि JSONP का उपयोग करते समय JSON को जावास्क्रिप्ट के रूप में निष्पादित किया जाता है और जावास्क्रिप्ट में कोई स्ट्रिंग में शाब्दिक U + 2028 या U + 2029 हो सकता है क्योंकि यह जावास्क्रिप्ट को तोड़ देगा। स्पष्ट रूप से यह आमतौर पर तब तक कोई समस्या नहीं है जब तक आप एक उचित JSON पार्सर का उपयोग नहीं करते हैं, लेकिन JSONP के मामले में ब्राउज़र JSON पार्सर है।
अनिवार्य रूप से यदि ये वर्ण क्लाइंट को भेजे जाने वाले मेरे JSONP डेटा में तारों के अंदर थे तो यह स्ट्रिंग में एक रेखा या पैराग्राफ ब्रेक फेंक देगा जो जावास्क्रिप्ट को तोड़ देगा और इसे निष्पादित करना बंद कर देगा। यह एक संभावना है क्योंकि एपीआई कुछ क्लाइंट दर्ज डेटा वापस भेज रहा है। कोई संभावित रूप से डेटाबेस में U + 2028 या U + 2029 दर्ज कर सकता है, इसलिए जब मैं इसे वापस जेएसओएनपी के रूप में भेजता हूं तो यह मेरे एपीआई का उपयोग करके किसी भी कार्यान्वयन को तोड़ देगा।
तो मेरा सवाल है, PHP में मैं इसे भेजने के पहले यू + 2028 और यू + 2029 वर्णों को हटाने या निकालने के लिए JSON डेटा से कैसे बच/आउटपुट कर सकता हूं?
वर्तमान में मेरी प्रक्रिया डेटा की एक सरणी पर json_encode कर रही है और उस डेटा को क्लाइंट को भेज रही है। क्या मुझे सरणी के माध्यम से लूप करके डेटा को बचाना चाहिए और उसे फ़िल्टर करना चाहिए, या सभी JSON एन्कोडेड स्ट्रिंग को एक बार में से बचाना चाहिए?
दूसरी बात यह है कि मुझे यकीन नहीं है कि यू + 2028 और यू + 2029 वर्णों को PHP में कैसे बचाना है। क्या मैं सिर्फ str_replace कर सकता हूँ? मुझे यकीन नहीं है कि str_replace multibyte सुरक्षित है और no mb_str_replace फ़ंक्शन है जब तक कि मैं कुछ कस्टम किए गए एक का उपयोग नहीं करता। तो आप उन यूनिकोड वर्णों को कैसे हटाते/निकालते हैं?
बहुत बहुत धन्यवाद।
जब तक मैं लेख को गलत ढंग से पढ़ा है, न तुम सिर्फ '\ u2028' से बदलने कर सकते हैं? – hafichuk
'\ u2028' और' u2029' यूनिकोड न्यूलाइन वर्ण हैं। क्या आप चाहते हैं कि आपका एप्लिकेशन तारों में इन पात्रों को अनुमति दे? मतलब, जो भी आपके सर्वर पर इस पाठ को स्वीकार करता है सक्रिय रूप से सीआर/एलएफ को इन पात्रों में से एक में परिवर्तित करता है, क्योंकि वास्तव में कोई भी नए न्यूलाइन वर्णों का उपयोग नहीं करता है। मुझे शक है। मुझे लगता है कि आप बस सभी न्यूलाइन, सीआर/एलएफ, या नए को खत्म करना चाहते हैं। शाब्दिक भागने के दृश्यों को डालने के बजाय, उन मामलों में, बस उन्हें खत्म कर दें। –