1: <?php
2:
3: /**
4: * Validates a color according to the HTML spec.
5: */
6: class HTMLPurifier_AttrDef_HTML_Color extends HTMLPurifier_AttrDef
7: {
8:
9: /**
10: * @param string $string
11: * @param HTMLPurifier_Config $config
12: * @param HTMLPurifier_Context $context
13: * @return bool|string
14: */
15: public function validate($string, $config, $context)
16: {
17: static $colors = null;
18: if ($colors === null) {
19: $colors = $config->get('Core.ColorKeywords');
20: }
21:
22: $string = trim($string);
23:
24: if (empty($string)) {
25: return false;
26: }
27: $lower = strtolower($string);
28: if (isset($colors[$lower])) {
29: return $colors[$lower];
30: }
31: if ($string[0] === '#') {
32: $hex = substr($string, 1);
33: } else {
34: $hex = $string;
35: }
36:
37: $length = strlen($hex);
38: if ($length !== 3 && $length !== 6) {
39: return false;
40: }
41: if (!ctype_xdigit($hex)) {
42: return false;
43: }
44: if ($length === 3) {
45: $hex = $hex[0] . $hex[0] . $hex[1] . $hex[1] . $hex[2] . $hex[2];
46: }
47: return "#$hex";
48: }
49: }
50:
51: // vim: et sw=4 sts=4
52: