Blame view

vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/Class.php 1.45 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
  <?php
  
  /**
   * Implements special behavior for class attribute (normally NMTOKENS)
   */
  class HTMLPurifier_AttrDef_HTML_Class extends HTMLPurifier_AttrDef_HTML_Nmtokens
  {
      /**
       * @param string $string
       * @param HTMLPurifier_Config $config
       * @param HTMLPurifier_Context $context
       * @return bool|string
       */
      protected function split($string, $config, $context)
      {
          // really, this twiddle should be lazy loaded
          $name = $config->getDefinition('HTML')->doctype->name;
          if ($name == "XHTML 1.1" || $name == "XHTML 2.0") {
              return parent::split($string, $config, $context);
          } else {
              return preg_split('/\s+/', $string);
          }
      }
  
      /**
       * @param array $tokens
       * @param HTMLPurifier_Config $config
       * @param HTMLPurifier_Context $context
       * @return array
       */
      protected function filter($tokens, $config, $context)
      {
          $allowed = $config->get('Attr.AllowedClasses');
          $forbidden = $config->get('Attr.ForbiddenClasses');
          $ret = array();
          foreach ($tokens as $token) {
              if (($allowed === null || isset($allowed[$token])) &&
                  !isset($forbidden[$token]) &&
                  // We need this O(n) check because of PHP's array
                  // implementation that casts -0 to 0.
                  !in_array($token, $ret, true)
              ) {
                  $ret[] = $token;
              }
          }
          return $ret;
      }
  }