HTML एंटिटी को एस्केप और अनएस्केप करें। < > & " ' को नामित एंटिटी में बदलें, वैकल्पिक रूप से सभी non-ASCII वर्णों को एन्कोड करें, और नामित या संख्यात्मक रेफरेंस को वापस टेक्स्ट में डिकोड करें।
टेक्स्ट एस्केप करें ताकि वह HTML के भीतर सुरक्षित रहे, या एंटिटी को वापस वर्णों में बदलें। किसी भी बॉक्स में टाइप करें ताकि उस दिशा में रूपांतरण हो। मिनिमल मोड केवल उन पाँच वर्णों को एस्केप करता है जो सुधार के लिए मायने रखते हैं; एक्सटेंडेड मोड अधिकतम संगतता के लिए हर non-ASCII वर्ण को भी एन्कोड करता है।
एक HTML पार्सर < को टैग की शुरुआत और & को एंटिटी रेफरेंस की शुरुआत के रूप में पढ़ता है। यदि आपकी सामग्री में कोई भी है, तो पार्सर इसे टेक्स्ट के रूप में व्यवहार करना बंद कर देता है। एस्केपिंग वर्ण को एक रेफरेंस से बदल देता है जिसे पार्सर बिना किसी संरचनात्मक अर्थ के मूल ग्लिफ़ में वापस हल करता है।
केवल पाँच वर्णों को वास्तव में HTML में एस्केपिंग की आवश्यकता होती है:
&& बन जाता है — पहले होना चाहिए, अन्यथा आप बाकी सब को डबल-एस्केप कर देंगे
<< बन जाता है
>> बन जाता है
"" बन जाता है — डबल-कोटेड एट्रिब्यूट वैल्यू के भीतर आवश्यक
'' बन जाता है — सिंगल-कोटेड एट्रिब्यूट वैल्यू के भीतर आवश्यक
एलिमेंट टेक्स्ट में आपको सख्ती से केवल & और < की आवश्यकता होती है। बाकी तीन तब मायने रखते हैं जब आपका टेक्स्ट किसी एट्रिब्यूट के भीतर आ सकता है, और चूँकि आप एस्केपिंग के बिंदु पर उसे शायद ही नियंत्रित करते हैं, इसलिए पाँचों को एस्केप करना सुरक्षित आदत है।
नामित, दशमलव और हेक्साडेसिमल रेफरेंस
एक ही वर्ण को तीन तरीकों से लिखा जा सकता है। एक नॉन-ब्रेकिंग स्पेस ,   या   है। नामित रेफरेंस सबसे अधिक पठनीय होते हैं लेकिन HTML5 सूची में लगभग 2,200 प्रविष्टियाँ हैं और पुराने पार्सर बहुत कम जानते हैं, इसलिए अस्पष्ट नाम एक पोर्टेबिलिटी जोखिम हैं। संख्यात्मक रेफरेंस किसी भी Unicode कोड पॉइंट के लिए काम करते हैं और हमेशा सुरक्षित होते हैं। HTML5 में हर नामित रेफरेंस के लिए ट्रेलिंग सेमीकोलन आवश्यक है; & जैसे कुछ लेगेसी नाम बैकवर्ड कंपैटिबिलिटी के लिए बिना उसके भी पार्स होते हैं, लेकिन उस पर निर्भर करना एक बग की प्रतीक्षा कर रहा है।
एस्केपिंग सैनिटाइज़िंग नहीं है
एस्केपिंग ही क्रॉस-साइट स्क्रिप्टिंग को रोकता है: यदि <script> वाला उपयोगकर्ता इनपुट <script> में एस्केप हो जाता है, तो ब्राउज़र शाब्दिक टेक्स्ट रेंडर करता है और कुछ निष्पादित नहीं करता। लेकिन एस्केपिंग तभी काम करता है जब वह सही संदर्भ में हो। HTML एस्केपिंग एक <script> ब्लॉक के भीतर, एक style एट्रिब्यूट के भीतर, या किसी URL के भीतर पर्याप्त नहीं है — इनमें से प्रत्येक को अपना स्वयं का एन्कोडिंग चाहिए। और एस्केपिंग को एक बार, आउटपुट समय पर लागू किया जाना चाहिए। इनपुट पर और फिर आउटपुट पर एस्केपिंग &lt; और दृश्यमान कचरा उत्पन्न करता है।
जब आपको एक्सटेंडेड मोड की आवश्यकता होती है
किसी भी आधुनिक विनिर्देश द्वारा non-ASCII वर्णों को एस्केप करना आवश्यक नहीं है। एक UTF-8 दस्तावेज़ सीधे é और 中 रख सकता है, और वह आमतौर पर बेहतर विकल्प है: यह छोटा, अधिक पठनीय और खोजने में आसान है। एक्सटेंडेड मोड उन मामलों के लिए मौजूद है जहाँ बाइट स्ट्रीम को एक ऐसे चैनल से बचना होता है जो non-ASCII को बिगाड़ देता है — कुछ लेगेसी ईमेल टेम्पलेट, पुराने CMS फ़ील्ड, अस्पष्ट घोषित एन्कोडिंग वाले XML पाइपलाइन, या एक ऐसा बिल्ड स्टेप जो Latin-1 में अटका हुआ है। यदि आप एन्कोडिंग को सिरे से सिरे तक नियंत्रित करते हैं, तो मिनिमल मोड में रहें।
नॉन-ब्रेकिंग स्पेस का जाल
U+00A0 है, जो सामान्य स्पेस U+0020 से एक भिन्न वर्ण है। यह लाइन ब्रेक को रोकता है और ब्राउज़र को व्हाइटस्पेस की रन संक्षिप्त करने से रोकता है, जो इस बात का कारण है कि WYSIWYG एडिटर इसे उदारता से उत्सर्जित करते हैं। चूँकि यह समान दिखता है, यह चुपचाप स्ट्रिंग तुलनाओं, कुछ इंजन में \s के साथ लिखे गए रेगुलर एक्सप्रेशन, और CSV इम्पोर्ट्स को तोड़ता है। यदि कोई मान सही दिखता है लेकिन मेल खाने से इनकार करता है, तो किसी भटके हुए नॉन-ब्रेकिंग स्पेस की जाँच करें।
FAQ
क्या मुझे ग्रेटर-दैन चिह्न को एस्केप करना ही चाहिए?
सख्ती से नहीं — टेक्स्ट में अकेला > अस्पष्ट नहीं होता और ठीक से पार्स होता है। यह परंपरा से एस्केप किया जाता है क्योंकि इसमें कुछ खर्च नहीं होता और जेनरेट किए गए मार्कअप में भ्रम से बचाता है, विशेष रूप से जब आउटपुट को बाद में ऐसे टूल द्वारा संसाधित किया जाता है जो ब्राउज़र से अधिक सख्त होते हैं।
क्यों & को पहले एस्केप करना चाहिए?
क्योंकि हर अन्य एस्केप सीक्वेंस एक एम्परसैंड से शुरू होता है। यदि आप & एस्केप करने से पहले < को < से बदल देते हैं, तो अगला पास उस एम्परसैंड को & में बदल देगा और आप पेज पर &lt; के साथ समाप्त होंगे।
क्या XSS को रोकने के लिए एस्केपिंग पर्याप्त है?
केवल HTML टेक्स्ट और एट्रिब्यूट संदर्भों के लिए, और केवल तब जब आउटपुट पर लागू किया जाए। JavaScript, CSS या किसी URL में इंजेक्ट किए गए कंटेंट को उस भाषा के एस्केपिंग नियमों की आवश्यकता होती है। एस्केपिंग एक परत है, पूर्ण रक्षा नहीं।
नामित या संख्यात्मक एंटिटी — मुझे कौन सा उपयोग करना चाहिए?
संख्यात्मक रेफरेंस सार्वभौमिक रूप से समर्थित हैं और किसी भी कोड पॉइंट के लिए काम करते हैं। नामित रेफरेंस उन कुछ को पहचानने वालों के लिए अधिक पठनीय होते हैं। व्यावहारिक रूप से पाँच मुख्य वर्णों के लिए नामित और असामान्य चीज़ों के लिए संख्यात्मक का उपयोग करें।
क्या मुझे उच्चारण चिह्न वाले वर्णों को एन्कोड करना चाहिए?
UTF-8 दस्तावेज़ में नहीं, जो व्यावहारिक रूप से सभी आधुनिक वेब सामग्री है। उन्हें सीधे लिखें। एक्सटेंडेड मोड का उपयोग केवल तभी करें जब आपकी पाइपलाइन में कुछ ऐसा हो जो non-ASCII बाइट्स को बरकरार ले जाने के लिए विश्वसनीय न हो।
और सामान्य स्पेस के बीच क्या अंतर है?
एक नॉन-ब्रेकिंग स्पेस कोड पॉइंट U+00A0 है। यह समान दिखता है लेकिन लाइन रैपिंग को रोकता है और आसन्न व्हाइटस्पेस के साथ संक्षिप्त नहीं होता। यह तुलना उद्देश्यों के लिए एक भिन्न वर्ण भी है, जो इसे सूक्ष्म बग्स का एक सामान्य स्रोत बनाता है।