Blame view

vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/Input.php 1.56 KB
70f4f18b   Administrator   first_commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
  <?php
  
  /**
   * Performs miscellaneous cross attribute validation and filtering for
   * input elements. This is meant to be a post-transform.
   */
  class HTMLPurifier_AttrTransform_Input extends HTMLPurifier_AttrTransform
  {
      /**
       * @type HTMLPurifier_AttrDef_HTML_Pixels
       */
      protected $pixels;
  
      public function __construct()
      {
          $this->pixels = new HTMLPurifier_AttrDef_HTML_Pixels();
      }
  
      /**
       * @param array $attr
       * @param HTMLPurifier_Config $config
       * @param HTMLPurifier_Context $context
       * @return array
       */
      public function transform($attr, $config, $context)
      {
          if (!isset($attr['type'])) {
              $t = 'text';
          } else {
              $t = strtolower($attr['type']);
          }
          if (isset($attr['checked']) && $t !== 'radio' && $t !== 'checkbox') {
              unset($attr['checked']);
          }
          if (isset($attr['maxlength']) && $t !== 'text' && $t !== 'password') {
              unset($attr['maxlength']);
          }
          if (isset($attr['size']) && $t !== 'text' && $t !== 'password') {
              $result = $this->pixels->validate($attr['size'], $config, $context);
              if ($result === false) {
                  unset($attr['size']);
              } else {
                  $attr['size'] = $result;
              }
          }
          if (isset($attr['src']) && $t !== 'image') {
              unset($attr['src']);
          }
          if (!isset($attr['value']) && ($t === 'radio' || $t === 'checkbox')) {
              $attr['value'] = '';
          }
          return $attr;
      }
  }
  
  // vim: et sw=4 sts=4