देवनागरी में एक ऐसा इनविज़िबल कैरेक्टर है जो बग नहीं, बल्कि सही टाइपोग्राफ़ी के लिए ज़रूरी है — ज़ीरो-विड्थ नॉन-जॉइनर (ZWNJ, U+200C)। हिंदी में कुछ जगहों पर दो व्यंजन आपस में जुड़कर संयुक्ताक्षर (conjunct) बना लेते हैं, जबकि लिखने वाले का मक़सद उन्हें अलग-अलग दिखाना होता है — वहाँ ZWNJ डालकर जुड़ाव जान-बूझकर रोका जाता है, जैसे "क्+ष" को बिना लिगेचर के दिखाना।
यह अजीब बग क्यों पैदा करता है
यही ZWNJ जब सामान्य टेक्स्ट में गलती से इधर-उधर से कॉपी होकर आ जाता है, तो दिक़्क़त बन जाता है: स्ट्रिंग तुलना अप्रत्याशित रूप से "बराबर नहीं" रिज़ल्ट देती है, भले ही स्क्रीन पर टेक्स्ट एक जैसा दिखे। वजह यह होती है कि एक स्ट्रिंग में यह इनविज़िबल कैरेक्टर मौजूद है और दूसरे में नहीं, जबकि दोनों देखने में बिल्कुल एक जैसी लगती हैं।
Trim
Trim स्ट्रिंग की शुरुआत और अंत से स्पेस कैरेक्टर हटाता है, बीच के कंटेंट को बिना बदले छोड़ता है। यह यूज़र इनपुट साफ़ करने का एक मानक ऑपरेशन है — फ़ॉर्म फ़ील्ड की शुरुआत में अनजाने में आया अतिरिक्त स्पेस किसी वैल्यू की तुलना या वैलिडेशन को प्रभावित नहीं करना चाहिए।
स्पेस को मिलाना
एक और आम ऑपरेशन है लगातार कई स्पेस कैरेक्टर को एक से बदलना। यह किसी फ़ॉर्मेटेड सोर्स (जैसे PDF या टेबल) से कॉपी किए गए टेक्स्ट के लिए उपयोगी है, जहाँ एक स्पेस की जगह डबल स्पेस या अनजाने टैब आ सकते हैं।
यह किस काम आता है
- यह डायग्नोज़ करना कि दिखने में एक जैसी दो स्ट्रिंग की तुलना क्यों फेल होती है।
- किसी दूसरे सोर्स से कॉपी किए टेक्स्ट को अतिरिक्त और अदृश्य कैरेक्टर से साफ़ करना।
- डेटाबेस में स्टोर करने से पहले यूज़र इनपुट को सामान्य बनाना।
ज़ीरो-विड्थ कैरेक्टर सामान्य टेक्स्ट में
देवनागरी की टाइपोग्राफ़िक भूमिका से अलग, ज़ीरो-विड्थ कैरेक्टर (zero-width space, zero-width joiner) आम तौर पर स्क्रीन पर बिल्कुल भी जगह नहीं लेते, लेकिन टेक्स्ट में अलग कैरेक्टर के रूप में मौजूद रहते हैं। ऐसे कैरेक्टर कभी-कभी कुछ वेबसाइट या मैसेंजर से कॉपी करने पर टेक्स्ट में आ जाते हैं और बिना किसी संकेत के स्ट्रिंग तुलना या सर्च को तोड़ सकते हैं, जबकि टेक्स्ट एडिटर में भी पूरी तरह अदृश्य रहते हैं।