मैं Javascript/jQuery, PHP और Websockets का उपयोग करके एक चैट रूम बना रहा हूं। मैं यूनिकोड इमोटिकॉन्स का समर्थन करना चाहता हूं। मेरे पास इमोटिकॉन्स के साथ एक डीआईवी है और, जब उपयोगकर्ता उनमें से किसी एक में क्लिक करता है, तो इमोटिकॉन इनपुट बॉक्स में डाला जाता है। सरल।

उपयोगकर्ता "एंटर" दबाता है और पाठ PHP को भेजा जाता है। लेकिन PHP इमोटिकॉन को नहीं समझ सकता ("??" दिखाता है), इसलिए मैंने PHP में सबमिट करने से पहले जावास्क्रिप्ट में \uXXXX प्रारूप (4-बाइट्स) में कनवर्ट करने के लिए एक फ़ंक्शन किया।

उदाहरण:

1) उपयोगकर्ता "टेस्ट-टेस्ट" सबमिट करता है

2) जावास्क्रिप्ट "टेस्ट\uD83D\uDE00test" (नीचे कार्य) में परिवर्तित हो जाता है - यदि मैं क्रोम कंसोल पर जाता हूं और "टेस्ट\uD83D\uDE00test" टाइप करता हूं तो यह "टेस्ट-टेस्ट" को सही ढंग से दिखाता है, इसलिए, परिवर्तित स्ट्रिंग सही है।

3) स्ट्रिंग को PHP में सबमिट करें: "test\uD83D\uDE00test"

4) PHP वेबसोकेट को भेजता है जो केवल स्ट्रिंग को एक DIV में जोड़ देगा, जैसे $('#chat').append(d), जहां "d" (सॉकेट.io ऑब्जेक्ट से प्राप्त) में "test\uD83D\uDE00test" होता है।

लेकिन यह स्ट्रिंग "test\uD83D\uDE00test" दिखाता है... मैं इमोटिकॉन दिखाना चाहता हूं।

मेरी त्रुटि कहाँ है?


इमोटिकॉन्स को \u प्रारूप में बदलने का कार्य: सभी वर्णों को स्कैन करें और केवल गैर-असीसी वाले को संशोधित करें।

function ChatUCode(t) {
 S='';
 for (a=0;a<t.length;a++) {
  if (t.charCodeAt(a)>255) {
   S+='\\u'+('0000'+t.charCodeAt(a).toString(16)).substr(-4,4).toUpperCase();
  } else {
   S+=t.charAt(a);
  }
 }
 return S;
}
2
Arvy 24 जिंदा 2019, 01:02

1 उत्तर

सबसे बढ़िया उत्तर

समाधान मिला, @cegfault विचार के लिए धन्यवाद।

स्ट्रिंग को JSON.parse फंक्शन में भेजने पर, यह इमोटिकॉन्स को सही ढंग से दिखाएगा। लेकिन मुझे स्ट्रिंग से JSON प्रारूप में बचना पड़ा।

$('#chat').append(JSON.parse('"'+d+'"'));

दूसरा तरीका, जो इतना सुरक्षित नहीं है, वही विचार है, लेकिन उद्धरणों के बीच भी eval() फ़ंक्शन का उपयोग करना।

0
Arvy 24 जिंदा 2019, 03:47