为什么某些随机字符串在以背景颜色输入 html 时会产生颜色 ?

例如, bgcolor = "chucknorris" 产生红色背景 :

& lt; body bgcolor=" Chucknorris" & gt; 测试 & lt;/body>

反之, bgcolor = "chucknorr" 产生黄色背景 :

& lt; body bgcolor=" chucknorr" & gt; 测试 & lt;/body>

这在不同的浏览器和平台上都是如此。


当前回答

很抱歉不同意, 但根据yuhong bao所张贴的关于解析遗留颜色价值的规则, Chucknorris并不等于 cc000, 而是c000,

规则规定:

将字符串设置为乘以 3 的长度, 加 0 : chucknorris0 , 将字符串分隔为三等长的字符串: chuc knor ris0 将每个字符串切换为两个字符: ch kn ri 保持十六进值, 必要时添加 0: c0 00 00

我能够用这些规则正确解释以下字符串:

幸运 幸运 幸运 幸运 幸运 幸运 夜晚的黑帮风格


最初的回答者说颜色是cc000, 从那时起编辑了他们的答复, 以包括更正。

其他回答

浏览器试图将 Chucknorris 转换为十六进制颜色代码, 因为它不是一个有效的值 。

在 chucknorris 中, 除c 之外的所有字符都不是有效的十六进制值 。 所以它会被转换为 c00c000000。 它被分为 3, rg b 组( 结尾处为 0, 如果不是 3 的 乘以 3 ) 。 只有两个字符被选中, 因为它是允许的 。 它最终变成 c00000 , 红色的阴影 。

这似乎主要是与互联网探险家和歌剧(12)有关的问题,因为铬(31)和firefox(26)都忽略了这一点。

p.s. 括号中的数字是i 测试的浏览器版本。

Rajnikanth(印度的chuck noris)也与黑色的阴影对立:

000000000000000 *gt; 0a0000

在一个较轻的音符上

Chuck Norris不符合网络标准。 网络标准符合他的要求。

原因是浏览器无法理解它, 并试图将它转换为能理解的东西, 并在此情况下转换为十六进制值!...

Chucknorris 以 c 开头, 在十六进制中被识别的字符, 而且它正在将所有未识别的字符转换为 0 !

以十六进制格式的 chucknorris 变成: c00c000000, 所有其他字符都变成 0, c 仍然停留在他们的位置...

现在它们除以 3, rb( 红色, 绿色, 蓝色)... r: c00c, g: 0000, b: 00...

但我们知道对于 rgb 有效的十六进制只有两个字符, 意思是 r: c0, g: 00, bh.

因此,真正的结果是:

bgcolor="#c00000";

我还添加了图像中的台阶,作为您的快速参考:

在遗留属性上分解颜色的规则涉及比现有答案中提到的步骤更多的步骤。

将所有字符全部丢弃,但最后的 8 个丢弃, 导致零 零 逐 1, 只要所有构件都有一个前零 丢弃, 所有字符除前 2 个全部丢弃

一些例子:

oooFoooFoooF
000F 000F 000F                <- replace, pad and chunk
0F 0F 0F                      <- leading zeros truncated
0F 0F 0F                      <- truncated to 2 characters from right

oooFooFFoFFF
000F 00FF 0FFF                <- replace, pad and chunk
00F 0FF FFF                   <- leading zeros truncated
00 0F FF                      <- truncated to 2 characters from right

ABCooooooABCooooooABCoooooo
ABC000000 ABC000000 ABC000000 <- replace, pad and chunk
BC000000 BC000000 BC000000    <- truncated to 8 characters from left
BC BC BC                      <- truncated to 2 characters from right

AoCooooooAoCooooooAoCoooooo
A0C000000 A0C000000 A0C000000 <- replace, pad and chunk
0C000000 0C000000 0C000000    <- truncated to 8 characters from left
C000000 C000000 C000000       <- leading zeros truncated
C0 C0 C0                      <- truncated to 2 characters from right

下面是算法的部分实施。它不处理错误或用户输入有效颜色的情况。

{/ / todo: 如果输入是“ ” 输入 = 输入. trim (); / / todo: 如果输入是“ 透明” / / todo: 如果输入是一个命名的颜色 / / todo: 如果输入匹配 rgb / / todo, 返回 rggb: 如果输入是“ 输入 ” , 则返回错误 rggb: 如果输入是“ 透明” / / todo : 如果输入是“ 透明” / / todo: 如果输入是“ 透明” / / todo : 返回相应的 rggb: 如果输入匹配 rgb / / todo: 返回 rggb: 如果输入匹配 rggb / / todo: 将 Unicode 代码点大于 u+ffff 替换为 00 (in. replace (/ {0- 9a- f)

很抱歉不同意, 但根据yuhong bao所张贴的关于解析遗留颜色价值的规则, Chucknorris并不等于 cc000, 而是c000,

规则规定:

将字符串设置为乘以 3 的长度, 加 0 : chucknorris0 , 将字符串分隔为三等长的字符串: chuc knor ris0 将每个字符串切换为两个字符: ch kn ri 保持十六进值, 必要时添加 0: c0 00 00

我能够用这些规则正确解释以下字符串:

幸运 幸运 幸运 幸运 幸运 幸运 夜晚的黑帮风格


最初的回答者说颜色是cc000, 从那时起编辑了他们的答复, 以包括更正。

浏览器将尝试将 chucknorris 转换为十六进制值。 因为 C 是 chucknorris 中唯一有效的十六进制字符 。 由于 c 是 chucknorris 中唯一有效的十六进制字符, 值将转换为: c00c00000000( 0) 。 浏览器然后将结果分为三类 : 红 = c00c, 绿 = 0000, 蓝 = 0000. 。 因为 html 背景的有效十六进制值仅包含每个颜色类型( r, g, b) 的两位数字, 最后两位数字从每组中截取出来, 留下一个 rgb 值为 c000, 这是砖红色