1: <?php
2:
3: /**
4: * Validates the HTML type length (not to be confused with CSS's length).
5: *
6: * This accepts integer pixels or percentages as lengths for certain
7: * HTML attributes.
8: */
9:
10: class HTMLPurifier_AttrDef_HTML_Length extends HTMLPurifier_AttrDef_HTML_Pixels
11: {
12:
13: /**
14: * @param string $string
15: * @param HTMLPurifier_Config $config
16: * @param HTMLPurifier_Context $context
17: * @return bool|string
18: */
19: public function validate($string, $config, $context)
20: {
21: $string = trim($string);
22: if ($string === '') {
23: return false;
24: }
25:
26: $parent_result = parent::validate($string, $config, $context);
27: if ($parent_result !== false) {
28: return $parent_result;
29: }
30:
31: $length = strlen($string);
32: $last_char = $string[$length - 1];
33:
34: if ($last_char !== '%') {
35: return false;
36: }
37:
38: $points = substr($string, 0, $length - 1);
39:
40: if (!is_numeric($points)) {
41: return false;
42: }
43:
44: $points = (int)$points;
45:
46: if ($points < 0) {
47: return '0%';
48: }
49: if ($points > 100) {
50: return '100%';
51: }
52: return ((string)$points) . '%';
53: }
54: }
55:
56: // vim: et sw=4 sts=4
57: