दिलचस्प पोस्ट
सिंगलटन एक विरोधी पैटर्न क्यों माना जाता है? धागा-सुरक्षित शब्दकोश को लागू करने का सबसे अच्छा तरीका क्या है? MySQL में वर्गीकृत रैंकिंग कैसे करें इस ऑब्जेक्ट विधि परिभाषा को "फ़ंक्शन" कीवर्ड के बिना कैसे काम करता है? मैं एक RDD को दो या अधिक RDD में कैसे विभाजित कर सकता हूं? बॉल टू बॉल टकराव – डिटेक्शन और हैंडलिंग urllib और "SSL: CERTIFICATE_VERIFY_FAILED" त्रुटि तर्कों की संख्या पर मैक्रो ओवरलोडिंग मैं एक स्विफ्ट अर्रे को स्ट्रिंग में कैसे बदलूं? एकाधिक INSERT विवरण बनाम एकल INSERT एकाधिक मूल्यों के साथ MySQL: लोड डेटा स्थानीय INFILE सक्षम करें JVM में JIT- संकलित कोड को कैसे देखें? पीजी-वादे के साथ मल्टी-पंक्ति डालें JQuery के साथ 'एन्टर' पर एक फॉर्म जमा करना? जावा में "ClassCastException" का स्पष्टीकरण

एचटीएमएल को लगता है कि "चॉकनोरिस" एक रंग क्यों है?

HTML में पृष्ठभूमि रंग के रूप में दर्ज होने पर कुछ यादृच्छिक स्ट्रिंग्स रंग कैसे उत्पन्न होती हैं? उदाहरण के लिए:

<body bgcolor="chucknorris"> test </body> 

… सभी ब्राउज़रों और प्लेटफार्मों पर एक लाल पृष्ठभूमि वाली एक दस्तावेज़ तैयार करता है।

दिलचस्प है, जबकि chucknorri एक लाल पृष्ठभूमि का उत्पादन भी करते हैं, chucknorr पीले रंग की पृष्ठभूमि का उत्पादन करता है

यहाँ क्या चल रहा है?

वेब के समाधान से एकत्रित समाधान "एचटीएमएल को लगता है कि "चॉकनोरिस" एक रंग क्यों है?"

यह नेटस्केप दिनों से एक होल्ड होल्ड है:

गुम अंक 0 के रूप में माना जाता है […] एक गलत अंक को बस 0 के रूप में व्याख्या की जाती है। उदाहरण के लिए मान # F0F0F0, F0F0F0, F0F0F, #FxFxFx और FxFxFx सभी समान हैं।

यह ब्लॉग पोस्ट से है माइक्रोसॉफ्ट इंटरनेट एक्सप्लोरर के रंग के पार्सिंग के बारे में थोड़ा सा अफगान जिसमें इसे बहुत विस्तार से कवर किया गया है, जिसमें रंगों के विभिन्न मूल्यों आदि शामिल हैं।

यदि हम ब्लॉग पोस्ट से बदले गए नियमों को लागू करते हैं, तो हमें निम्नलिखित प्राप्त होते हैं:

  1. 0 के साथ सभी गैर-वैध हेक्साडेसिमल वर्णों को बदलें

     chucknorris becomes c00c0000000 
  2. 3 की कुल संख्याओं को विभाजित करके विभाजित करें (11 -> 12)

     c00c 0000 0000 
  3. तीन बराबर समूहों में विभाजित करें, प्रत्येक आरजीबी रंग के इसी रंग घटक का प्रतिनिधित्व घटक:

     RGB (c00c, 0000, 0000) 
  4. दाएं नीचे से दो वर्णों में से प्रत्येक तर्क को छोटा करें

जो निम्न परिणाम देता है:

 RGB (c0, 00, 00) = #C00000 or RGB(192, 0, 0) 

यह "अद्भुत" रंग का सफ़ेद उत्पादन करने के लिए, कार्रवाई में bgcolor विशेषता का प्रदर्शन करने वाला एक उदाहरण है:

 <table> <tr> <td bgcolor="chucknorris" cellpadding="8" width="100" align="center">chuck norris</td> <td bgcolor="mrt" cellpadding="8" width="100" align="center" style="color:#ffffff">Mr T</td> <td bgcolor="ninjaturtle" cellpadding="8" width="100" align="center" style="color:#ffffff">ninjaturtle</td> </tr> <tr> <td bgcolor="sick" cellpadding="8" width="100" align="center">sick</td> <td bgcolor="crap" cellpadding="8" width="100" align="center">crap</td> <td bgcolor="grass" cellpadding="8" width="100" align="center">grass</td> </tr> </table> 

मैं असहमत होने के लिए क्षमा चाहता हूं, लेकिन @ योहंग बाओ द्वारा पोस्ट की गई विरासत के रंग के मूल्य को पार्स करने के नियमों के अनुसार, #CC0000 समान नहीं है, बल्कि #C00000 , लाल के बहुत ही समान लेकिन थोड़ा अलग रंग के लिए नहीं है। मैं यह सत्यापित करने के लिए फ़ायरफ़ॉक्स ColorZilla ऐड-ऑन का इस्तेमाल किया।

नियम राज्य:

  • स्ट्रिंग को एक लंबाई बनाओ जो 0 के जोड़कर 3 का एक बड़ा है: chucknorris0
  • स्ट्रिंग को 3 समान लम्बाई स्ट्रिंग्स में अलग करें: chuc knor ris0
  • प्रत्येक स्ट्रिंग को 2 वर्णों में छोटा करें: ch kn ri
  • हेक्स मूल्यों को रखें, और 0 जोड़ें जहां आवश्यक: C0 00 00

मैं निम्नलिखित नियमों का सही ढंग से व्याख्या करने के लिए इन नियमों का उपयोग करने में सक्षम था:

  • LuckyCharms
  • Luck
  • LuckBeALady
  • LuckBeALadyTonight
  • GangnamStyle

#CC0000 मूल #CC0000 जिन्होंने कहा था कि रंग #CC0000 है, उनके बाद से सुधार को शामिल करने के लिए उनके जवाब संपादित किए गए हैं।

ज़्यादातर ब्राउज़र्स केवल आपके रंग स्ट्रिंग में किसी भी गैर-हेक्स मान को अनदेखा करेंगे, शून्य के साथ गैर हेक्स अंक प्रतिस्थापित करेंगे।

ChuCknorris अनुवाद c00c0000000 इस बिंदु पर, ब्राउज़र स्ट्रिंग को तीन समान वर्गों में विभाजित करेगा, जो कि रेड , ग्रीन और नीली मूल्यों का संकेत c00c 0000 0000 : c00c 0000 0000 प्रत्येक अनुभाग में अतिरिक्त बिट्स को नजरअंदाज किया जाएगा, जो अंतिम परिणाम #c00000 बनाता #c00000 जो एक लाल रंग है

ध्यान दें, यह CSS रंग पार्सिंग पर लागू नहीं होता है, जो सीएसएस मानक का पालन करते हैं।

 <p><font color='chucknorris'>Redish</font></p> <p><font color='#c00000'>Same as above</font></p> <p><span style="color: chucknorris">Black</span></p> 

ब्राउज़र chucknorris को हेक्स रंग कोड में रूपांतरित करने का प्रयास कर रहा है, क्योंकि यह मान्य मान नहीं है।

  1. chucknorris c को छोड़कर सब कुछ मान्य हेक्स वैल्यू नहीं है।
  2. तो यह c00c00000000 परिवर्तित हो जाता है
  3. जो # c00000 हो जाता है , लाल रंग की छाया

यह मुख्य रूप से इंटरनेट एक्सप्लोरर और ओपेरा (12) के साथ एक मुद्दा है क्योंकि दोनों क्रोम (31) और फ़ायरफ़ॉक्स (26) दोनों ने इसे अनदेखा कर दिया है।

पीएस। ब्रैकेट्स में संख्याएं ब्राउज़र संस्करण हैं जिन पर मैंने परीक्षण किया था।

एक हल्का नोट पर

चक नोरिस वेब मानकों के अनुरूप नहीं है। वेब मानकों उसके अनुरूप हैं # BADA55

WHATWG एचटीएमएल स्पेक में एक लीगेसी रंग मूल्य पार्स करने के लिए सही एल्गोरिथ्म है: https://html.spec.whatwg.org/multipage/infrastructure.html#rules-for-parsing-a-legacy-colour-value

रंग स्ट्रिंग को पार्स करने के लिए उपयोग किया गया नेटस्केप क्लासिक ओपन सोर्स है: https://dxr.mozilla.org/classic/source/lib/layout/layimage.c#155

उदाहरण के लिए, ध्यान दें कि प्रत्येक चरित्र को हेक्स अंक के रूप में पार्स किया जाता है और फिर ओवरफ्लो की जांच किए बिना 32-बिट पूर्णांक में स्थानांतरित किया जाता है। केवल आठ हेक्स अंक 32-बिट पूर्णांक में फिट होते हैं, यही कारण है कि केवल पिछले 8 वर्णों को ही माना जाता है। हेक्स अंकों को 32-बिट पूर्णांक में पार्स करने के बाद, उन्हें 8-बिट इंटिजर्स में छांटकर 16 तक विभाजित कर दिया जाता है, जब तक कि वे 8-बिट में फिट नहीं होते, यही कारण है कि अग्रणी शून्य को नजरअंदाज कर दिया जाता है।

अद्यतन: इस कोड को सटीक रूप से परिभाषित नहीं किया गया है, लेकिन केवल एक ही अंतर कोड की कुछ पंक्तियां है। मुझे लगता है कि यह इन लाइनों को जोड़ा गया था (नेटस्केप 4 में):

 if (bytes_per_val > 4) { bytes_per_val = 4; } 

उत्तर:

  • ब्राउज़र चकनोरिस को हेक्साडेसिमल मान में रूपांतरित करने का प्रयास करेगा।
  • चूंकि c केवल c00c00000000 में वैध हेक्स वर्ण है, मान में बदल जाता है: c00c00000000 ( सभी मानों के लिए 0 जो अमान्य थे )
  • ब्राउज़र तब परिणाम को 3 समूह में विभाजित करता है: Red = c00c , Green = 0000 , Blue = 0000
  • चूंकि एचटीएमएल पृष्ठभूमि के लिए वैध हेक्स वैल्यू में प्रत्येक रंग के प्रकार ( आर , जी , बी ) के लिए 2 अंक होते हैं, प्रत्येक समूह से अंतिम 2 अंकों को छोटा कर दिया जाता है, जिससे c00000 का एक आरजीबी वैल्यू होता c00000 जो एक ईंट-लाल टोन रंग है।

लेजेंड हैज इट:

  • चॉकनोरिस रक्त-लाल पृष्ठभूमि को छोड़ता है जहां वह वेबसाइटों सहित कभी भी जाता है

इसका कारण यह है कि ब्राउज़र इसे समझ नहीं सकता और उसे किसी भी तरह से इसे समझने की कोशिश कर सकता है, इस मामले में hexadecimal मान में!

chucknorris c साथ शुरू होता है जो हेक्साडेसीमल में वर्ण को मान्यता देता है, यह भी सभी अपरिचित वर्णों को 0 में परिवर्तित कर रहा है!

तो हेक्साडेसिमल प्रारूप में c00c00000000 बन जाता है: c00c00000000 , अन्य सभी वर्ण 0 हो जाते हैं और c बनी हुई है जहां वे हैं …

अब वे RGB (लाल, हरे, नीले) के लिए 3 से विभाजित हो जाते हैं … R: c00c, G: 0000, B:0000

लेकिन हमें पता है कि आरजीबी के लिए वैध hexadecimal सिर्फ 2 वर्ण हैं, R: c0, G: 00, B:00

तो असली परिणाम है:

 bgcolor="#c00000"; 

मैंने एक त्वरित संदर्भ के रूप में छवि में भी कदम उठाए:

एचटीएमएल को लगता है कि "चॉकनोरिस" एक रंग क्यों है?