एचटीएमएल में अक्षर एनकोडिंग
HTML |
---|
Comparisons |
जबकि हाइपरटेक्स्ट मार्कअप भाषा (एचटीएमएल) 1991 से उपयोग में है, दिसंबर 1997 से एचटीएमएल 4.0 पहला मानकीकृत संस्करण था जहां अंतर्राष्ट्रीय वर्ण (कंप्यूटिंग) को उचित रूप से पूर्ण निरूपण दिया गया था। जब एक HTML दस्तावेज़ में सात-बिट ASCII की सीमा के बाहर विशेष वर्ण सम्मिलित होते हैं, तो दो लक्ष्य विचार करने योग्य होते हैं: सूचना की अखंडता, और सार्वभौमिक ब्राउज़र प्रदर्शन होते हैं।
दस्तावेज़ के वर्ण एन्कोडिंग को निर्दिष्ट करना
यह निर्दिष्ट करने के दो सामान्य प्रकार हैं कि दस्तावेज़ में किस वर्ण का एन्कोडिंग में उपयोग किया गया है।
सबसे पहले, वेब सर्वर हाइपरटेक्स्ट परहस्त प्रोटोकॉल (HTTP)विषय-
प्रकार हेडर वर्ण एन्कोडिंग या "चारसमुच्चय"
में सम्मिलित कर सकता है, जो विशिष्ट रूप से इस तरह दिखेगा:[1]
विषय -प्रकार: text/html; charset=utf-8
यह विधि HTTP सर्वर को विषय वार्ता के अनुसार दस्तावेज़ में एन्कोडिंग को बदलने का एक सुविधाजनक प्रकार देती है; कुछ HTTP सर्वर सॉफ़्टवेयर ऐसा कर सकते हैं, उदाहरण के लिए अपाचे मॉड्यूल की सूची mod_charset_lite के साथ है।
[2]
दूसरा, एक घोषणा को दस्तावेज़ में ही सम्मिलित किया जा सकता है।
HTML के लिए इस जानकारी को दस्तावेज़ के शीर्ष के पास मुख्य तत्व के अंदर सम्मिलित करना संभव है:[3]
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
HTML5 निम्नलिखित वाक्यविन्यास को भी बिल्कुल वही अर्थ देने की अनुमति देता है:[3]
<meta charset="utf-8">
XHTML दस्तावेज़ों में एक तीसरा विकल्प है: XML घोषणा के माध्यम से वर्ण एन्कोडिंग को व्यक्त करना, इस प्रकार:[4]
<?xml version="1.0" encoding="utf-8"?>
इस दूसरे दृष्टिकोण के साथ, क्योंकि घोषणा को पार्स किए जाने तक वर्ण एन्कोडिंग को नहीं जाना जा सकता है, इसलिए यह जानने में समस्या होती है कि दस्तावेज़ में घोषणा और कौन सा वर्ण एन्कोडिंग का उपयोग किया गया है। यदि वर्ण एन्कोडिंग एक ASCII विस्तार है तो घोषणा तक का विषय शुद्ध ASCI होना चाहिए और यह सही प्रकार से काम करता है। वर्ण एन्कोडिंग के लिए जो ASCII विस्तार नहीं हैं (अर्थात ASCII का अधिसमुच्चय नहीं), जैसे कि UTF-16BE और UTF-16LE, HTML का एक प्रोसेसर, जैसे कि वेब ब्राउज़र, कुछ प्रकरणो में ह्यूरिस्टिक्स के उपयोग के माध्यम से घोषणा को पार्स करने में सक्षम होना चाहिए।
एन्कोडिंग संसूचन एल्गोरिदम
HTML5 के अनुसार अनुशंसित चारसमुच्चय UTF-8 है।[3] इनपुट के कई स्रोतों के आधार पर दस्तावेज़ के वर्ण एन्कोडिंग को निर्धारित करने के लिए विनिर्देश में एक ''एन्कोडिंग स्नीफिंग एल्गोरिदम'' को परिभाषित किया गया है, जिसमें सम्मिलित हैं:
- स्पष्ट उपयोगकर्ता निर्देश
- दस्तावेज़ के पहले 1024 बाइट्स के अंतर्गत एक स्पष्ट मेटा टैग
- दस्तावेज़ के पहले तीन बाइट्स के अंतर्गत एक बाइट अनुक्रम मार्क (BOM)।
- HTTP विषय-प्रकार या अन्य परिवहन परत की जानकारी
- विशिष्ट अनुक्रमों या बाइट मानों की श्रेणियों और अन्य अस्थायी पहचान तंत्रों की दृष्टि में दस्तावेज़ बाइट्स का विश्लेषण।[5]
प्रिंट करने योग्य ASCII श्रेणी (32 से 126) के बाहर वर्ण विशिष्ट रूप से गलत प्रकार से दिखाई देते हैं। यह अंग्रेजी भाषा बोलने वाले उपयोगकर्ताओं के लिए कुछ समस्याएं प्रस्तुत करते है, लेकिन अन्य भाषाओं को नियमित रूप से—कुछ प्रकरणों में, हमेशा—उस सीमा के बाहर वर्णों की आवश्यकता होती है। चीनी, जापानी, और कोरियाई (सीजेके) भाषा परिवेश में जहां कई अलग-अलग बहु-बाइट एनकोडिंग हैं, स्वतः-संसूचन भी प्रायः नियोजित होता है। अंत में, ब्राउज़र विशिष्ट रूप से उपयोगकर्ता को गलत चारसमुच्चय लेबल मैन्युअल रूप से भी अध्यारोहण करने की अनुमति देते हैं।
बहुभाषी वेबसाइटों और गैर-पश्चिमी भाषाओं में वेबसाइटों के लिए UTF-8 का उपयोग करना सामान्य है, जो सभी भाषाओं के लिए समान एन्कोडिंग के उपयोग की अनुमति देता है। UTF-16 या UTF-32, जिनका उपयोग सभी भाषाओं के लिए भी किया जा सकता है, कम व्यापक रूप से उपयोग किए गए क्रमादेशन भाषाओं में संभालना कठिन हो सकता है जो बाइट-उन्मुख ASCII अधिसमुच्चय एन्कोडिंग मानते हैं, और वे ASCII वर्णों की एक उच्च आवृत्ति टेक्स्ट के साथ कम सक्षम हैं, जो विशिष्ट रूप से HTML दस्तावेज़ों के प्रकरण में होता है।
किसी पेज को सफलतापूर्वक देखना इस बात का संकेत नहीं है कि इसकी एन्कोडिंग सही प्रकार से निर्दिष्ट है। यदि पेज के निर्माता और पाठक दोनों कुछ प्लेटफ़ॉर्म-विशिष्ट वर्ण एन्कोडिंग मान रहे हैं, और सर्वर कोई पहचान संबंधी जानकारी नहीं भेजते है, तो पाठक फिर भी पेज को निर्माता के रूप में देखेगा, लेकिन विभिन्न प्लेटफार्मों पर या अलग-अलग मूल भाषाओं वाले अन्य पाठक पेज को उस तरह से नहीं देख पाएंगे जैसा कि सोचा गया था।
अनुमत एन्कोडिंग
HTML मानकों (वर्तमान WHATWG HTML जीवन स्तर, साथ ही पूर्व प्रतिस्पर्धी W3C HTML 5.0 और 5.1) द्वारा संदर्भित WHATWG एन्कोडिंग मानक, एन्कोडिंग की एक सूची निर्दिष्ट करता है जिसे ब्राउज़र को समर्थन करना चाहिए। HTML मानक अन्य एनकोडिंग के समर्थन को प्रतिबंधित करता हैं।[6][7][8] एन्कोडिंग मानक आगे यह निर्धारित करता है कि नए प्रारूप, नए प्रोटोकॉल (प्रचलित प्रारूपों का उपयोग किए जाने पर भी) और नए दस्तावेज़ों के लेखकों को UTF-8 का उपयोग करना आवश्यक है।[9]
UTF-8 के अलावा, एन्कोडिंग मानक के संदर्भ में निम्नलिखित एन्कोडिंग HTML मानक में स्पष्ट रूप से सूचीबद्ध हैं:[8]
- आईएसओ-8859-2
- आईएसओ-8859-7
- आईएसओ-8859-8
- विंडोज़-874[lower-alpha 1]
- विंडोज़-1250
- विंडोज़-1251
- विंडोज़-1252[lower-alpha 2]
- विंडोज़-1254[lower-alpha 3]
- विंडोज़-1255
- विंडोज़-1256
- विंडोज़-1257
- विंडोज़-1258
- जीबी18030[lower-alpha 4]
- बिग 5[lower-alpha 5]
- शिफ्ट JIS[lower-alpha 6]
- आईएसओ-2022-JP[lower-alpha 7]
- ईयूसी-केआर[lower-alpha 8]
- यूटीएफ-16बीई[lower-alpha 9]
- यूटीएफ-16एलई[lower-alpha 10]
- x-उपयोगकर्ता-परिभाषित[lower-alpha 11]
- ↑ Also specified for
TIS-620
,ISO-8859-11
and related labels.[9] - ↑ Also specified for
ASCII
,ISO-8859-1
and related labels.[9] - ↑ Also specified for
ISO-8859-9
and related labels.[9] - ↑ Specified with 0xA3A0 as a duplicate encoding of the ideographic space (U+3000) for compatibility reasons, and as such excluding U+E5E5 (a private use character).[10][11] Also, specified with 0x80 accepted as an alternative encoding of the euro sign (U+20AC; see Windows-936).[12] Otherwise, follows the mappings from the 2005 standard.[11]
- ↑ Hong Kong Supplementary Character Set variant, although most of the HKSCS extensions (those with lead bytes less than 0xA1) are not included by the encoder, only by the decoder.[13]
- ↑ The specification includes IBM and NEC extensions (see Windows-31J).[14]
- ↑ The specification uses the same index as used for Shift JIS (insofar as is within reach), i.e. includes NEC extensions. Half-width kana is converted to fullwidth by the encoder,[15] but accepted using an escape sequence (ESC 0x28 0x49) by the decoder.[16] Shift Out and Shift In (0x0E and 0x0F) are excluded entirely to prevent attacks.[16][17]
- ↑ Actually Unified Hangul Code, which is a superset which covers the entire Hangul Syllables block.[18]
- ↑ Specified for decoding only; form submissions from UTF-16-coded documents are to be encoded in UTF-8.[19]
- ↑ For compatibility with deployed content, also specified for the plain
UTF-16
label,[20] although a byte order mark (BOM), if present, takes priority over any label.[21] Specified for decoding only; form submissions from UTF-16-coded documents are to be encoded in UTF-8.[19] - ↑ Maps 0x00 through 0x7F to U+0000 through U+007F, and 0x80 through 0xFF to U+F780 through U+F7FF (a Private Use Area range), such that the low 8 bits of the code point always match the original byte.[22]
एनकोडिंग मानक में निम्नलिखित अतिरिक्त एनकोडिंग सूचीबद्ध हैं, और इसलिए उनके लिए समर्थन भी आवश्यक है:[9]
- ↑ Uses the same encoder and decoder as ISO-8859-8, but is not subject to the visual-order behaviour which is used for documents labelled as ISO-8859-8.[23]
- ↑ Titled KOI8-U and specified for both
KOI8-U
andKOI8-RU
labels,[9] but follows KOI8-RU (i.e. includes Ў/ў).[24][25] - ↑ Also specified for
GB2312
and related labels. Handled the same as GB 18030 for decoding purposes.[26] For encoding purposes, labelling as GBK (or GB 2312) excludes four-byte codes, and favours the one-byte 0x80 representation for U+20AC.[10] - ↑ The specification uses the same index as used for Shift JIS (insofar as is within reach of the EUC code set 1), i.e. includes NEC extensions. JIS X 0212 is included for decoding only.[27]
निम्नलिखित एनकोडिंग को निषिद्ध एनकोडिंग के स्पष्ट उदाहरण के रूप में सूचीबद्ध किया गया है:[8]
मानक एक "प्रतिस्थापन" विकोडक को भी परिभाषित करता है, जो प्रतिस्थापन वर्ण (�) में कुछ एन्कोडिंग के रूप में लेबल की गई सभी विषय को मानचित्र करता है, इसे संसाधित करने से मना करता है। इसका उद्देश्य उन आक्षेप (जैसे क्रॉस साइट स्क्रिप्टिंग) को रोकना है जो दुर्भावनापूर्ण विषय को छिपाने के लिए उपभोगता और सर्वर के मध्य समर्थित एन्कोडिंग में अंतर का लाभ उठा सकते हैं।[28] यद्यपि समान सुरक्षा चिंता ISO-2022-JP और UTF-16 पर उपयोजित होते है, जो ASCII बाइट्स के अनुक्रमों की अलग-अलग व्याख्या करने की भी अनुमति देते हैं, इस दृष्टिकोण को उनके लिए संभव नहीं देखा गया क्योंकि वे तुलनात्मक रूप से प्रसारित विषय में अधिक बार उपयोग किए जाते हैं।[29] निम्नलिखित एनकोडिंग इस उपचार को प्राप्त करते हैं:[30]
वर्ण संदर्भ
मूल वर्ण एन्कोडिंग के अलावा, वर्णों को वर्ण संदर्भों के रूप में भी एन्कोड किया जा सकता है, जो संख्यात्मक वर्ण संदर्भ (दशमलव या हेक्साडेसिमल) या वर्ण इकाई संदर्भ हो सकते हैं। वर्ण इकाई संदर्भों को कभी-कभी नामित इकाइयों या HTML के लिए HTML इकाइयाँ भी कहा जाता है। HTML के वर्ण संदर्भों का उपयोग SGML से हुआ है।
HTML वर्ण संदर्भ
HTML में एक संख्यात्मक वर्ण संदर्भ उसके सार्वभौमिक संप्रतीक समुच्चय/यूनिकोड कोड बिंदु द्वारा एक वर्ण को संदर्भित करता है, और प्रारूप का उपयोग करता है।
&#nnnn;
या
&#xhhhh;
जहाँ nnnn दशमलव रूप में कोड बिंदु है, और hhhh हेक्साडेसिमल रूप में कोड बिंदु है। XML दस्तावेजों में x को लोवरकेस होना चाहिए। nnnn या hhhh किसी भी संख्या में अंक हो सकते हैं और इसमें अग्रणी शून्य सम्मिलित हो सकते हैं। hhhh अपरकेस और लोवरकेस को मिला सकता है, हालांकि अपरकेस सामान्य शैली है।
HTML दस्तावेज़ों के प्राप्तकर्ता द्वारा उपयोग किए जाने वाले सभी वेब ब्राउज़र या ईमेल उपभोगता, या HTML दस्तावेज़ों के लेखकों द्वारा उपयोग किए जाने वाले टेक्स्ट संपादक, सभी HTML वर्णों को प्रस्तुत करने में सक्षम नहीं होते है। अधिकांश आधुनिक सॉफ़्टवेयर उपयोगकर्ता की भाषा के लिए अधिकांश या सभी वर्णों को प्रदर्शित करने में सक्षम होते हैं, और उन वर्णों के लिए एक बॉक्स या अन्य स्पष्ट संकेतक बनाते हैं जिन्हें वे प्रस्तुत नहीं कर सकते।
0 से 127 तक के कोड के लिए, मूल 7-बिट ASCII मानक समुच्चय, इनमें से अधिकांश वर्णों का उपयोग वर्ण संदर्भ के बिना किया जा सकता है। 160 से 255 तक के सभी कोड वर्ण इकाई संदर्भों की सूची का उपयोग करके बनाए जा सकते हैं। इकाई नामों का उपयोग करके केवल कुछ उच्च संख्या वाले कोड बनाए जा सकते हैं, लेकिन सभी दशमलव संख्या वर्ण संदर्भ द्वारा बनाए जा सकते हैं।
वर्ण इकाई संदर्भों का प्रारूप &name
भी हो सकता है; जहाँ नाम एक प्रकरण-संवेदी अक्षरांकीय स्ट्रिंग है। उदाहरण के लिए, ''λ'' को HTML दस्तावेज़ में &lambda
के रूप में भी एन्कोड किया जा सकता है। वर्ण इकाई संदर्भ <
, >
, "
और &
HTML और SGML में पूर्वनिर्धारित हैं, क्योंकि <
, >
, "
और &
का उपयोग पहले से ही मार्कअप को सीमित करने के लिए किया जाता है। इसमें विशेष रूप से XML का &apos
सम्मिलित नहीं हैं; (') HTML5 से पहले की इकाई में सम्मिलित नहीं हैं। सभी नामित HTML वर्ण इकाई संदर्भों की सूची के साथ-साथ उन संस्करणों की सूची के लिए जिनमें वे प्रस्तावित किए गए थे, XML और HTML वर्ण इकाई संदर्भों की सूची देखें।
HTML वर्ण संदर्भों का अनावश्यक उपयोग HTML पठनीयता को महत्वपूर्ण रूप से कम कर सकता है। यदि किसी वेब पेज के लिए वर्ण एन्कोडिंग उचित रूप से चयन किया गया है, तो HTML वर्ण संदर्भ विशिष्ट रूप से केवल ऊपर बताए गए मार्कअप विसीमक वर्णों के लिए आवश्यक होते हैं, और कुछ विशेष वर्णों के लिए (या बिल्कुल नहीं, यदि UTF-8 जैसे मूल यूनिकोड एन्कोडिंग का उपयोग किया जाता है) होते हैं। गलत HTML इकाई से बचने से क्रॉस साइट स्क्रिप्टिंग जैसे अंतःक्षेपी अटैक के लिए सुरक्षा भेद्यताएं भी खुल सकती हैं। यदि HTML विशेषताओं को बिना कोट किए छोड़ दिया जाता है, तो कुछ वर्ण, सबसे महत्वपूर्ण व्हाइटस्पेस वर्ण, जैसे कि स्पेस और टैब, को इकाई का उपयोग करके बचाना चाहिए। HTML से संबंधित अन्य भाषाओं में वर्णों से बचने के अपने प्रकार हैं।
XML वर्ण संदर्भ
वर्ण इकाई संदर्भों की बड़ी श्रृंखला के साथ पारंपरिक HTML के विपरीत, XML में केवल पाँच पूर्वनिर्धारित वर्ण इकाई संदर्भ हैं। इनका उपयोग उन वर्णों से बचने के लिए किया जाता है जो कुछ संदर्भों में मार्कअप संवेदक होते हैं:[31]
&
→ & (एम्परसेंड, U+0026)<
→ < (इससे कम चिह्न, U+003C)>
→ > (इससे अधिक चिह्न, U+003E)"
→ (उद्धरण चिह्न, U+0022)'
→ ' (लोपचिह्न, U+0027)
अन्य सभी वर्ण इकाई संदर्भों को उपयोग किए जाने से पहले परिभाषित करते है। उदाहरण के लिए, é का उपयोग
(जो एक XML दस्तावेज़ में é, तीव्र उच्चारण के साथ लैटिन लोअर-केस E, यूनिकोड में U+00E9 देता है) एक त्रुटि उत्पन्न करेगा जब तक कि इकाई को पहले से ही परिभाषित नहीं किया है। XML के लिए यह भी आवश्यक है कि हेक्साडेसिमल संख्यात्मक संदर्भ में x
लोअरकेस में हों: उदाहरण के लिए ਛ
के बदले ਛ है।
XHTML, जो एक XML अनुप्रयोग है, XML की पूर्वनिर्धारित इकाइयों के साथ HTML इकाई समुच्चय का समर्थन करता है।
यह भी देखें
- चारसमुच्चय सूँघना - कई ब्राउज़रों द्वारा उपयोग किया जाता है जब वर्ण एन्कोडिंग मेटाडेटा उपलब्ध नहीं होता है
- यूनिकोड और HTML
- भाषा कोड
- XML और HTML वर्ण इकाई संदर्भों की सूची
संदर्भ
- ↑ Fielding, R.; Reschke, J. (June 2014), "Content-Type", in Fielding, R; Reschke, J (eds.), Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content, IETF, doi:10.17487/RFC7231, S2CID 14399078, retrieved 2014-07-30
- ↑ "Apache Module mod_charset_lite".
- ↑ 3.0 3.1 3.2 "Specifying the document's character encoding", HTML5, World Wide Web Consortium, 14 December 2017, retrieved 2018-05-28
- ↑ Bray, T.; Paoli, J.; Sperberg-McQueen, C.; Maler, E.; Yergeau, F. (26 November 2008), "Prolog and Document Type Declaration", XML, W3C, retrieved 8 March 2010
- ↑ "HTML5 prescan a byte stream to determine its encoding".
- ↑ "8.2.2.3. Character encodings". HTML 5.1 Standard. W3C.
- ↑ "8.2.2.3. Character encodings". HTML 5 Standard. W3C.
- ↑ 8.0 8.1 8.2 "12.2.3.3 Character encodings". HTML Living Standard. WHATWG.
- ↑ 9.0 9.1 9.2 9.3 9.4 9.5 van Kesteren, Anne. "4.2: Names and labels". Encoding Standard. WHATWG.
- ↑ 10.0 10.1 van Kesteren, Anne. "10.2.2. gb18030 encoder". Encoding Standard. WHATWG.
- ↑ 11.0 11.1 van Kesteren, Anne. "5. Indexes (§ index gb18030)". Encoding Standard. WHATWG.
- ↑ van Kesteren, Anne. "10.2.1. gb18030 decoder". Encoding Standard. WHATWG.
- ↑ van Kesteren, Anne. "5. Indexes (§ index Big5 pointer)". Encoding Standard. WHATWG.
- ↑ van Kesteren, Anne. "5. Indexes (§ Index jis0208)". Encoding Standard. WHATWG.
- ↑ van Kesteren, Anne. "5. Indexes (§ Index ISO-2022-JP katakana)". Encoding Standard. WHATWG.
- ↑ 16.0 16.1 van Kesteren, Anne. "12.2.1. ISO-2022-JP decoder". Encoding Standard. WHATWG.
- ↑ van Kesteren, Anne. "12.2.2. ISO-2022-JP encoder". Encoding Standard. WHATWG.
- ↑ van Kesteren, Anne. "5. Indexes (§ index EUC-KR)". Encoding Standard. WHATWG.
- ↑ 19.0 19.1 van Kesteren, Anne. "4.3. Output encodings". Encoding Standard. WHATWG.
- ↑ van Kesteren, Anne. "14.4. UTF-16LE". Encoding Standard. WHATWG.
- ↑ van Kesteren, Anne. "6. Hooks for standards (§ decode)". Encoding Standard. WHATWG.
- ↑ van Kesteren, Anne. "14.5. x-user-defined". Encoding Standard. WHATWG.
- ↑ van Kesteren, Anne. "9. Legacy single-byte encodings (§ Note)". Encoding Standard. WHATWG.
- ↑ van Kesteren, Anne. "index KOI8-U visualization". Encoding Standard. WHATWG.
- ↑ "Bug 17053: Support KOI8-RU mapping for KOI8-U". W3C Bugzilla. 2015-08-19.
- ↑ van Kesteren, Anne. "10.1. GBK". Encoding Standard. WHATWG.
- ↑ van Kesteren, Anne. "5. Indexes (§ Index jis0212)". Encoding Standard. WHATWG.
- ↑ van Kesteren, Anne. "14.1: replacement". Encoding Standard. WHATWG.
- ↑ van Kesteren, Anne. "2: Security background". Encoding Standard. WHATWG.
- ↑ van Kesteren, Anne. "4.2: Names and labels (§ replacement)". Encoding Standard. WHATWG.
- ↑ Bray, T.; Paoli, J.; Sperberg-McQueen, C.; Maler, E.; Yergeau, F. (26 November 2008), "Character and Entity References", XML, W3C, retrieved 8 March 2010
बाहरी संबंध
- Online HTML entity encoder & decoder tool
- Character entity references in HTML4
- The Definitive Guide to Web Character Encoding
- HTML Entity Encoding chapter of Browser Security Handbook – more information about current browsers and their entity handling
- The Open Web Application Security Project's wiki article on cross-site scripting (XSS)