इन यूनिकोड संयोजन पात्रों के साथ क्या हो रहा है और हम उन्हें कैसे फ़िल्टर कर सकते हैं?


91

ก็็็็็็็็็็็็็็็็็็็็ ก็็็็็็็็็็็็็็็็็็็็ ก็็็็็็็็็็็็็็็็็็็็ ก็็็็็็็็็็็็็็็็็็็็ ก็็็็็็็็็็็็็็็็็็็็ ก็็็็็็็็็็็็็็็็็็็็ ก็็็็็็็็็็็็็็็็็็็็ ก็็็็็็็็็็็็็็็็็็็็ ก็็็็็็็็็็็็็็็็็็็็ ก็็็็็็็็็็็็็็็็็็็็ ก็็็็็็็็็็็็็็็็็็็็ ก็็็็็็็็็็็็็็็็็็็็ ก็็็็็็็็็็็็็็็็็็็็ ก็็็็็็็็็็็็็็็็็็็็ ก็็็็็็็็็็็็็็็็็็็็ ก็็็็็็็็็็็็็็็็็็็็

ये हाल ही में फेसबुक टिप्पणी अनुभागों में दिखाए गए हैं।

हम इसे कैसे पवित्र कर सकते हैं?


5
क्या आपने यह प्रश्न पहले नहीं पूछा है? (ईमानदार सवाल।)
Ry-

5
वे निश्चित रूप से
एशियाई

31
क्यों बंद हुए वोट? यह एक प्रोग्रामिंग से संबंधित प्रश्न है, जैसा कि मैं जानना चाहता हूं कि इस प्रकार के इनपुट को कैसे सैनिटाइज करना है, इसलिए मेरी वेबसाइट पर टिप्पणी अनुभाग 13 वर्ष की आयु के खेल का मैदान नहीं होगा ...
XCS

17
"ก้้้้้้้้้้้้้้้้้้้้ ก้้้้้้้้้้้้้้้้้้้้ ก็็็็็็็็็็็็็็็็็็็็ ก็็็็็็็็็็็็็็็็็็็็ ก็็็็็็็็็็็็็็็็็็็็ ก็็็็็็็็็็็็็็็็็็็็ ก็็็็็็็็็็็็็็็็็็็็ ก็็็็็็็็็็็็็็็็็็็็ ก็็็็็็็็็็็็็็็็็็็็ ก็็็็็็็็็็็็็็็็็็็็ so the" तो मेरी वेबसाइट पर टिप्पणी अनुभाग 13 साल की उम्र के खेल का मैदान नहीं होगा। " वास्तव में स्वच्छता के बिना इन पात्रों को पोस्ट करने वाला इसके ऊपर की टिप्पणी को अपठनीय बना सकता है, जो कि एक सुखद उपयोगकर्ता के अनुभव में नहीं है।
XCS

14
@pjotr यह निश्चित रूप से ब्राउज़र बग नहीं है। यदि आप चाहते हैं कि पात्र युक्त बॉक्स को ओवरफ्लो न करें, तो आप इसे सीएसएस के साथ हल कर सकते हैं (अतिप्रवाह: छिपा हुआ;) ...
XCS

जवाबों:


80

इन यूनिकोड वर्णों के साथ क्या हो रहा है?

यह एक ऐसा किरदार है जिसमें कई तरह के किरदार हैं । क्योंकि प्रश्न में संयोजन वर्ण आधार वर्ण से ऊपर जाना चाहते हैं, वे स्टैक अप (शाब्दिक)। उदाहरण के लिए, का मामला

ก้้้้้้้้้้้้้้้้้้้้

... यह एक ((थाई चरित्र को काई ) ( U + 0E01 ) है जिसके बाद थाई संयोजन वर्ण माई थो ( यू + 0 ई 49 ) की 20 प्रतियां हैं ।

हम इसे कैसे पवित्र कर सकते हैं?

आप पाठ को पूर्व-संसाधित कर सकते हैं और एक ही वर्ण पर लागू होने वाले वर्णों की संख्या को सीमित कर सकते हैं, लेकिन प्रयास पुरस्कार के लायक नहीं हो सकता है। आपको सभी वर्तमान वर्णों के लिए डेटा शीट की आवश्यकता होगी, ताकि आप जान सकें कि वे संयोजन कर रहे थे या क्या, और आपको कम से कम कुछ की अनुमति देना सुनिश्चित करना होगा क्योंकि कुछ भाषाएं एक ही आधार पर कई विकृति विज्ञान के साथ लिखी जाती हैं । अब, यदि आप लैटिन वर्ण सेट पर टिप्पणियों को सीमित करना चाहते हैं, तो यह एक आसान श्रेणी की जांच होगी, लेकिन निश्चित रूप से यह केवल एक विकल्प है यदि आप टिप्पणी को केवल कुछ भाषाओं तक सीमित करना चाहते हैं। अधिक जानकारी, कोड शीट इत्यादि unicode.org पर

BTW, अगर आप कभी यह जानना चाहते हैं कि कुछ चरित्र की रचना कैसे की गई थी, तो एक अन्य प्रश्न के लिए अभी हाल ही में मैंने JSBin पर एक त्वरित और गंदे "यूनिकोड शो मी" पेज को कोड किया। आप बस टेक्स्ट को टेक्स्ट क्षेत्र में कॉपी और पेस्ट करते हैं, और यह आपको उन सभी कोड पॉइंट्स (~ अक्षर) से पता चलता है, जो टेक्स्ट से बना है, जिसमें प्रत्येक वर्ण का वर्णन करने वाले पेज से ऊपर के लिंक जैसे हैं। यह केवल U + FFFF और इसके अंतर्गत सीमा के कोड बिंदुओं के लिए काम करता है, क्योंकि यह जावास्क्रिप्ट में लिखा गया है और जावास्क्रिप्ट में U + FFFF से ऊपर के वर्णों को संभालने के लिए आपको उस प्रश्न के लिए अधिक काम करना होगा, क्योंकि मैं जावास्क्रिप्ट में (क्योंकि जावास्क्रिप्ट में, ए) "चरित्र" हमेशा होता है 16 बिट्स, जिसका अर्थ है कि कुछ भाषाओं के लिए एक चरित्र को दो अलग-अलग जावास्क्रिप्ट "वर्णों" में विभाजित किया जा सकता है और मैं उसके लिए खाता नहीं था), लेकिन यह अधिकांश ग्रंथों के लिए उपयोगी है ...


1
क्या आप बस एक ही कॉपी में बैक-टू-बैक एक ही संयोजन कोड की बार-बार प्रतियां हटा नहीं पाएंगे? आपको एक से अधिक बार आधार कोडपॉइंट पर एक ही कोडपॉइंट को संयोजित करने की आवश्यकता होगी?
रेमी लेबेउ

4
@ शत्रुलेब्यू: "आपको कभी भी एक से अधिक आधार कोडपॉइंट पर एक ही कोडपॉइंट को संयोजित करने की आवश्यकता होगी?" मुझे नहीं पता, मैं बहुत कम जानता हूं, उदाहरण के लिए आप अन्य भाषाओं को कैसे लिखते हैं - थाई। मुझे यह जानकर बिल्कुल आश्चर्य नहीं होगा कि एक ही कोड बिंदु से अधिक कुछ में मान्य था। लेकिन ऐसा करने से जटिलता कम नहीं होती है; आपको अभी भी यूनिकोड तालिकाओं में से एक की आवश्यकता है जो यह पता लगा रहे हैं कि कौन से अक्षर संयोजन कर रहे हैं।
टीजे क्राउडर

मैंने आपके पृष्ठ को url से यूनिकोड स्ट्रिंग जैसे jsbin.com/erajer/7/…
ubershmekel

2
जावास्क्रिप्ट लाइब्रेरी आसानी से स्ट्रिंग से यूनिकोड संयोजन के निशान को हटाने के लिए: mths.be/stripcombiningmark
Mathias Bynens

जावास्क्रिप्ट « सरोगेट जोड़े » के साथ UTF-16 का उपयोग करता है
dolmen

17

यदि आपके पास सभ्य यूनिकोड समर्थन के साथ एक रेगेक्स इंजन है, तो इस तरह के तारों को पवित्र करना तुच्छ है। उदाहरण के लिए, पर्ल में, आप इस तरह के हर (उपयोगकर्ता-कथित) चरित्र से सभी लेकिन पहला संयोजन चिह्न हटा सकते हैं:

#!/usr/bin/perl
use strict;
use utf8;

binmode(STDOUT, ':utf8');

my $string = "กิิ ก้้ ก็็ ก็็ กิิ ก้้ ก็็ กิิ ก้้ กิิ ก้้ ก็็ ก็็ กิิ ก้้ ก็็ กิิ ก้้";
$string =~ s/(\p{Mark})\p{Mark}+/$1/g; # Strip excess combining marks
print("$string\n");

यह प्रिंट करेगा:

ก็ ก็ ก็ ก็ ก็ ก็ ก็ ก็ ก็ ก็ ก็ ก็ ก็ ก็ ก็ ก็


9
मैं तिब्बती नहीं पढ़ सकता, लेकिन मैं चिंतित हूं कि यह जानवर बल दृष्टिकोण भाषा के डिजाइन के तरीके से कार्यक्षमता को हटा सकता है। मैंने यूनिकोड देखा है जिसमें एक से अधिक संयोजन चिह्न के वैध उपयोग के मामले हैं। अरबी इसका अच्छा उदाहरण है। मैं अपने तिब्बती सहकर्मियों द्वारा इसे चलाने के लिए याद करने की कोशिश करूंगा।
FlipMcF

2
आप सही हैं, निश्चित रूप से ऐसे मामले हैं जहां कई संयोजन चिह्न वैध हैं। लेकिन आप एक निश्चित अधिकतम अंक की अनुमति देने के लिए आसानी से रेगेक्स को बदल सकते हैं।
nwellnhof

अपवादात्मक क्योंकि यह 'आप इस प्रश्न को कैसे स्पष्ट करते हैं' का उत्तर देते हैं। लेकिन मुझे लगता है कि यह एक बुरा सपना होगा।
FlipMcF

इसके अलावा, आरई बस आसन्न दोहराव को हटा देता है । यह साफ नहीं होगा, कहते हैं <base><macron><overline><macron><overline>...:। इसलिए, यदि आपके पाठ को कई अलग-अलग संयोजन वर्णों की आवश्यकता है, तो यह ठीक से गुजरेगा; और दुर्भावनापूर्ण पाठ अभी भी बनाया जा सकता है।
जेसी चिसोलम

13

"हम इसे कैसे पवित्र कर सकते हैं" टीजे क्राउडर द्वारा सबसे अच्छा उत्तर दिया गया है

हालांकि, मुझे लगता है कि सैनिटाइजेशन गलत दृष्टिकोण है, और क्रिस्टी को overflow:hiddenसीएसएस युक्त तत्व पर सही है ।

कम से कम, कि मैं इसे कैसे हल कर रहा हूं।


6

ठीक है, मुझे यह पता लगाने में थोड़ा समय लगा, मुझे आभास हो रहा था कि जालगो के उत्पादन के लिए पात्रों का संयोजन इन तक ही सीमित है । इसलिए मुझे उम्मीद थी कि शैतान को पकड़ने के लिए रेगेक्स का अनुसरण किया जाएगा

([\u0300–\u036F\u1AB0–\u1AFF\u1DC0–\u1DFF\u20D0–\u20FF\uFE20–\uFE2F]{2,})

और यह काम नहीं किया ...

पकड़ यह है कि विकी की सूची में वर्णों की पूरी श्रृंखला शामिल नहीं है।

मुझे जो संकेत दिया गया वह है "ก้้้้้้้้้้้้้้้้้้้้".charCodeAt(2).toString(16)= "e49" जो संयोजन की सीमा के भीतर नहीं है, यह 'निजी उपयोग' में आता है।

C # में वे UnicodeCategory.NonSpacingMarkस्क्रिप्ट के अंतर्गत आते हैं और उनका अनुसरण करते हैं:

    [Test]
    public void IsZalgo()
    {
        var zalgo = new[] { UnicodeCategory.NonSpacingMark };

        File.Delete("IsModifyLike.html");
        File.AppendAllText("IsModifyLike.html", "<table>");
        for (var i = 0; i < 65535; i++)
        {
            var c = (char)i;
            if (zalgo.Contains(Char.GetUnicodeCategory(c)))
            {


                File.AppendAllText("IsModifyLike.html", string.Format("<tr><td>{0}</td><td>{1}</td><td>{2}</td><td>A&#{3};&#{3};&#{3}</td></tr>\n",  i.ToString("X"), c, Char.GetUnicodeCategory(c), i));

            }
        }
        File.AppendAllText("IsModifyLike.html", "</table>");
    }

उत्पन्न तालिका को देखकर आपको यह देखने में सक्षम होना चाहिए कि कौन से स्टैक करते हैं। एक सीमा जो विकी पर गायब है वह 06D6-06DCदूसरी है 0730-0749

अपडेट करें:

यहां अपडेट किया गया रेगेक्स है जिसे 'सामान्य' श्रेणी में बाईपास किए गए सभी जालो को निकालना चाहिए।

([\u0300–\u036F\u1AB0–\u1AFF\u1DC0–\u1DFF\u20D0–\u20FF\uFE20–\uFE2F\u0483-\u0486\u05C7\u0610-\u061A\u0656-\u065F\u0670\u06D6-\u06ED\u0711\u0730-\u073F\u0743-\u074A\u0F18-\u0F19\u0F35\u0F37\u0F72-\u0F73\u0F7A-\u0F81\u0F84\u0e00-\u0eff\uFC5E-\uFC62]{2,})

सबसे मुश्किल बिट उन्हें पहचानना है, एक बार जब आप ऐसा कर लेते हैं - ऊपर कुछ अच्छे लोगों सहित समाधानों की भीड़ होती है।

आशा है कि यह आपको कुछ समय बचाता है।


मैं कहूंगा, इस स्पैम को स्पैम करने के लिए नहीं!
प्रवीण कुमार पुरुषोत्तम

@PraveenKumar क्या आप इस बात पर विस्तार से ध्यान देंगे कि आपका क्या मतलब है?
माटस वैटकेविसियस

मैं आपके उत्तर की सराहना करता हूं, लेकिन यह एक खोया हुआ प्रश्न है। तो अनावश्यक रूप से नए उत्तर क्यों जोड़ें? यह सिर्फ मेरा नजरिया है। इसके अलावा, आपका जवाब जावास्क्रिप्ट नहीं है, है ना?
प्रवीण कुमार पुरुषोत्तम

4
@PraveenKumar यह पता चलता है कि सामान्य झोला सत्यापन क्यों ([\u0300–\u036F\u1AB0–\u1AFF\u1DC0–\u1DFF\u20D0–\u20FF\uFE20–\uFE2F]{2,})काम नहीं करता है। क्या आपको यह दिलचस्प नहीं लगता कि यूनिकोड को ढेर करना विकि पर व्हाट्सएप तक सीमित नहीं है? Question खोए हुए उत्तर वाले प्रश्न ’से आपका क्या अभिप्राय है? संपादित करें : आपको 3 साल पुराने प्रश्न का उत्तर जोड़ना अजीब लग सकता है, लेकिन जब से मुझे यह पता लगाने में थोड़ा समय लगा है कि इस प्रकार के ज़ाल्गो ने काम क्यों किया, मैं इस तरह के ज्ञान को बेकार नहीं जाने दे सकता। अगला आदमी कुछ समय बचाएगा।
माटस वैटकेविसियस

7
@PraveenKumar प्रश्न में भाषा नहीं है, और पुराने प्रश्न पर नए उत्तर को पोस्ट करना पूरी तरह से उचित है यदि पुराने उत्तर किसी तरह से कम थे। दुर्भाग्य से मुझे इस समस्या के साथ पर्याप्त अनुभव नहीं है, या इसे मुझसे कोई परेशानी नहीं होगी।
मार्क रैनसम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.