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


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

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

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

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

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


6549
2017-11-29 22:54


मूल


एक साइड नोट के रूप में: उपयोग न करें bgcolor। सीएसएस का प्रयोग करें background। - John Dvorak
आप कभी भी पृष्ठभूमि रंग क्यों जोड़ना चाहते हैं chucknorris? अपेक्षित रंग क्या था? - masterFly
@masterFly: मुझे नहीं पता कि स्वीकार किए गए उत्तर के तहत मेरी टिप्पणी क्यों "रचनात्मक नहीं" होने के लिए हटा दी गई थी, क्योंकि यह आपके प्रश्न का बहुत अच्छा जवाब देता है: लोग इन चीजों के साथ हर समय प्रयोग करते हैं। मैं केवल 10 वर्ष का था जब मैंने यह खोज लिया और उस समय मैं जो कुछ कर रहा था वह चारों ओर गड़बड़ कर रहा था और क्या हुआ। आपको हमेशा कुछ करने का व्यावहारिक कारण नहीं होता है, खासतौर पर कुछ इस तरह के रूप में बेकार है। - BoltClock♦
तथा <body bgcolor="stevensegal"> परीक्षण </ body> हरा है - Chris
महान! मैं अब इसका उपयोग शुरू कर दूंगा। हर बार जब मैं वास्तव में लाल टाइप करने की कोशिश करता हूं तो ऑटो rebeccapurple को पूरा करता है। पीएस गूगल अगर आप कहानी नहीं जानते हैं। - Simon_Weaver


जवाब:


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

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

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

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

  1. सभी nonvalid हेक्साडेसिमल वर्णों को 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>

यह प्रश्न के दूसरे भाग का भी उत्तर देता है; क्यों करता है bgcolor="chucknorr" एक पीला रंग का उत्पादन? खैर, अगर हम नियम लागू करते हैं, तो स्ट्रिंग है:

c00c00000 => c00 c00 000 => c0 c0 00 [RGB(192, 192, 0)]

जो एक हल्का पीला सोना रंग देता है। चूंकि स्ट्रिंग 9 वर्णों के रूप में शुरू होती है, इसलिए हम इस बार दूसरी सी को रखते हैं, इसलिए यह अंतिम रंग मान में समाप्त होता है।

जब मैंने किसी ने बताया कि आप कर सकते हैं तो मुझे मूल रूप से इसका सामना करना पड़ा color="crap" और, ठीक है, यह भूरे रंग से बाहर आता है।


6051
2017-11-30 21:53



ध्यान दें कि, उस ब्लॉग पोस्ट के बावजूद, जब आप 3-चार तारों को संभालने के लिए मिलता है, तो आप प्रतिलिपि प्रत्येक चरित्र, 0 से आगे की बजाय। यानी। 0F6 हो जाता है #00FF66, नहीं #000F06। - Aaron Dufour
@usr: एचटीएमएल जानबूझकर विकृत इनपुट को अनदेखा कर रहा है;) - Kevin Ballard
आप मेरा भी उपयोग कर सकते हैं सीएसएस रंग के लिए यादृच्छिक स्ट्रिंग एक विशिष्ट स्ट्रिंग के लिए रंग प्राप्त करने के लिए कनवर्टर। यह पर आधारित है जेरेमी गुडेल द्वारा स्ट्रिंग रंग की गणना करने के लिए 5 कदम। - TimPietrusky
अर्थशास्त्र के लिए एक छिपे अवसर? आप इसके साथ कुछ त्रुटि पेज बना सकते हैं: <body bgcolor=error><h1 style=text-align:center>Error: Not Found<h1></span> आप एनोथ पृष्ठभूमि या ऐसा कुछ के साथ एक div जोड़ सकते हैं, इसलिए यह सौंदर्यपूर्ण रूप से चौंकाने वाला नहीं है। - Theraot
@Theraot bgcolor="success" एक अच्छा हरा भी है। दिलचस्प बात यह है कोई सीएसएस विशेषता / मूल्य चयनकर्ताओं का उपयोग करके इन रंगों को ओवरराइड कर सकता है (जैसे, td[bgcolor="chucknorris"] {...})। - megaflop


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

नियम बताते हैं:

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

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

  • LuckyCharms
  • Luck
  • LuckBeALady
  • LuckBeALadyTonight
  • GangnamStyle 

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


829
2017-10-17 17:55



मैंने इसे समझ लिया, मैंने कुछ पार्सिंग निर्देशों का गलत व्याख्या किया था: "adamlevine" = "ada00e000e" = "ada00e000e00" = "ada0 0e00 0e00" = "ad 0e 0e" - बिल्कुल सही !! - Jeremy Goodell
यदि आप रुचि रखते हैं, तो मैंने 5-चरण एल्गोरिदम को एक समान प्रश्न पर अद्यतन के रूप में पोस्ट किया है जिसे मैंने आज पोस्ट किया था: stackoverflow.com/questions/12939234/... - Jeremy Goodell
@TimPietrusky यादृच्छिक रंग नामों के लिए इस अजीब अविश्वसनीय डेमो उपकरण बनाया। बस यहां जाएं: randomstringtocsscolor.com और बॉक्स में क्लिक करें और "chucknorris" टाइप करें। - Jeremy Goodell
adamlevine के अनुसार काम करता है jsfiddle.net/LdyZ8/2959 लेकिन पत्रों को अवरुद्ध कर दिया गया है ada00e000e जो गद्देदार है ada00e000e00 लेकिन फिर सामान्य हेक्स 6 अंकों के मूल्य तक कम हो गया [ad]a0[0e]00[0e]00 इस प्रकार ad0e0e जो उपरोक्त jsfiddle में दिखाई देता है। - Martin
यह जवाब बेहतर होगा अगर यह जवाब केवल वर्तमान स्थिति निहित है - इस उत्तर का इतिहास और अन्य उत्तर संपादन सारांश और / या टिप्पणियों में हैं। - Peter Mortensen


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

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

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

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


338
2017-11-29 23:01



हालांकि मैं अभी भी उत्सुक हूं कि ओपी ने "सीएसएस में" क्यों कहा और "एचटीएमएल में" नहीं - शायद वे एक सुपर पुराने ब्राउज़र का उपयोग कर रहे हैं, या सिर्फ गलत हैं? - Mike Christensen
तो फिर वह बहिष्कृत का उपयोग कर संभावना से अधिक है bgcolor विशेषता। - animuson♦
शायद वह इस जादुई एचटीएमएल को पोस्ट करने के लिए बहुत दयालु होगा जो चक नॉरिस को "सभी ब्राउज़रों और प्लेटफार्मों" में लाल बनाता है। - Mike Christensen
अमान्य वर्ण छोड़े नहीं जाते हैं, उन्हें 0 के रूप में माना जाता है। - phyzome
(यह जवाब मृत हो सकता है) सुझाव: teh रंगों को प्रदर्शित करने के बजाय पृष्ठभूमि रंग का उपयोग करें। पाठ रंग इतने छोटे रिश्तेदार क्षेत्र से अधिक है कि मतभेद या समानताएं देखना मुश्किल है - Zoe


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

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

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

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

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

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


220
2017-11-30 14:05





WHATWG HTML spec में एक विरासत रंग मान पार्स करने के लिए सटीक एल्गोरिदम है: 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;
}

187
2017-09-27 22:01





उत्तर: 

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

167
2018-05-24 05:18





ब्राउजर कर सकते हैं कारण है समझ में नहीं आता यह और इसे किसी भी तरह से अनुवाद करने की कोशिश करें जो इसे समझ सकता है और इस मामले में हेक्साडेसिमल मान में!

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

इसलिए chucknorris हेक्साडेसिमल प्रारूप में बन जाता है: c00c00000000, अन्य सभी पात्र बन जाते हैं 0 तथा c वह रहता है जहां वे हैं ...

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

लेकिन हम जानते हैं कि आरजीबी के लिए वैध हेक्साडेसिमल केवल 2 अक्षर हैं, इसका मतलब है R: c0, G: 00, B:00

तो वास्तविक परिणाम यह है:

bgcolor="#c00000";

मैंने त्वरित संदर्भ के रूप में छवि में चरणों को भी जोड़ा:

Why does HTML think “chucknorris” is a color?


135
2017-07-01 04:08



लगता है कि क्या बकवास कहेंगे - Tushortz
@Tushortz जो बकवास है? - Goku
@ गोकु बकी एक मजेदार प्रोग्रामिंग भाषा ट्यूटोरियल यूट्यूब लड़का है जो हैंडल द्वारा चला जाता है "thenewboston" - Tushortz