ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
HTMLPurifier_VarParser_Flexible Class Reference

Performs safe variable parsing based on types which can be used by users. More...

+ Inheritance diagram for HTMLPurifier_VarParser_Flexible:
+ Collaboration diagram for HTMLPurifier_VarParser_Flexible:

Protected Member Functions

 parseImplementation ($var, $type, $allow_null)
 
- Protected Member Functions inherited from HTMLPurifier_VarParser
 parseImplementation ($var, $type, $allow_null)
 Actually implements the parsing. More...
 
 error ($msg)
 Throws an exception. More...
 
 errorInconsistent ($class, $type)
 Throws an inconsistency exception. More...
 
 errorGeneric ($var, $type)
 Generic error for if a type didn't work. More...
 

Additional Inherited Members

- Public Member Functions inherited from HTMLPurifier_VarParser
 parse ($var, $type, $allow_null=false)
 Validate a variable according to type. More...
 
- Static Public Member Functions inherited from HTMLPurifier_VarParser
static getTypeName ($type)
 
- Data Fields inherited from HTMLPurifier_VarParser
const C_STRING = 1
 
const ISTRING = 2
 
const TEXT = 3
 
const ITEXT = 4
 
const C_INT = 5
 
const C_FLOAT = 6
 
const C_BOOL = 7
 
const LOOKUP = 8
 
const ALIST = 9
 
const HASH = 10
 
const C_MIXED = 11
 
- Static Public Attributes inherited from HTMLPurifier_VarParser
static $types
 Lookup table of allowed types. More...
 
static $stringTypes
 Lookup table of types that are string, and can have aliases or allowed value lists. More...
 

Detailed Description

Performs safe variable parsing based on types which can be used by users.

This may not be able to represent all possible data inputs, however.

Definition at line 8 of file Flexible.php.

Member Function Documentation

◆ parseImplementation()

HTMLPurifier_VarParser_Flexible::parseImplementation (   $var,
  $type,
  $allow_null 
)
protected
Parameters
mixed$var
int$type
bool$allow_null
Returns
array|bool|float|int|mixed|null|string
Exceptions
HTMLPurifier_VarParserException

Definition at line 17 of file Flexible.php.

References $c, $i, $key, $keys, $type, HTMLPurifier_VarParser\errorGeneric(), and HTMLPurifier_VarParser\errorInconsistent().

18  {
19  if ($allow_null && $var === null) {
20  return null;
21  }
22  switch ($type) {
23  // Note: if code "breaks" from the switch, it triggers a generic
24  // exception to be thrown. Specific errors can be specifically
25  // done here.
26  case self::C_MIXED:
27  case self::ISTRING:
28  case self::C_STRING:
29  case self::TEXT:
30  case self::ITEXT:
31  return $var;
32  case self::C_INT:
33  if (is_string($var) && ctype_digit($var)) {
34  $var = (int)$var;
35  }
36  return $var;
37  case self::C_FLOAT:
38  if ((is_string($var) && is_numeric($var)) || is_int($var)) {
39  $var = (float)$var;
40  }
41  return $var;
42  case self::C_BOOL:
43  if (is_int($var) && ($var === 0 || $var === 1)) {
44  $var = (bool)$var;
45  } elseif (is_string($var)) {
46  if ($var == 'on' || $var == 'true' || $var == '1') {
47  $var = true;
48  } elseif ($var == 'off' || $var == 'false' || $var == '0') {
49  $var = false;
50  } else {
51  throw new HTMLPurifier_VarParserException("Unrecognized value '$var' for $type");
52  }
53  }
54  return $var;
55  case self::ALIST:
56  case self::HASH:
57  case self::LOOKUP:
58  if (is_string($var)) {
59  // special case: technically, this is an array with
60  // a single empty string item, but having an empty
61  // array is more intuitive
62  if ($var == '') {
63  return array();
64  }
65  if (strpos($var, "\n") === false && strpos($var, "\r") === false) {
66  // simplistic string to array method that only works
67  // for simple lists of tag names or alphanumeric characters
68  $var = explode(',', $var);
69  } else {
70  $var = preg_split('/(,|[\n\r]+)/', $var);
71  }
72  // remove spaces
73  foreach ($var as $i => $j) {
74  $var[$i] = trim($j);
75  }
76  if ($type === self::HASH) {
77  // key:value,key2:value2
78  $nvar = array();
79  foreach ($var as $keypair) {
80  $c = explode(':', $keypair, 2);
81  if (!isset($c[1])) {
82  continue;
83  }
84  $nvar[trim($c[0])] = trim($c[1]);
85  }
86  $var = $nvar;
87  }
88  }
89  if (!is_array($var)) {
90  break;
91  }
92  $keys = array_keys($var);
93  if ($keys === array_keys($keys)) {
94  if ($type == self::ALIST) {
95  return $var;
96  } elseif ($type == self::LOOKUP) {
97  $new = array();
98  foreach ($var as $key) {
99  $new[$key] = true;
100  }
101  return $new;
102  } else {
103  break;
104  }
105  }
106  if ($type === self::ALIST) {
107  trigger_error("Array list did not have consecutive integer indexes", E_USER_WARNING);
108  return array_values($var);
109  }
110  if ($type === self::LOOKUP) {
111  foreach ($var as $key => $value) {
112  if ($value !== true) {
113  trigger_error(
114  "Lookup array has non-true value at key '$key'; " .
115  "maybe your input array was not indexed numerically",
116  E_USER_WARNING
117  );
118  }
119  $var[$key] = true;
120  }
121  }
122  return $var;
123  default:
124  $this->errorInconsistent(__CLASS__, $type);
125  }
126  $this->errorGeneric($var, $type);
127  }
errorInconsistent($class, $type)
Throws an inconsistency exception.
Definition: VarParser.php:161
$type
Exception type for HTMLPurifier_VarParser.
$keys
errorGeneric($var, $type)
Generic error for if a type didn't work.
Definition: VarParser.php:174
$i
Definition: disco.tpl.php:19
$key
Definition: croninfo.php:18
+ Here is the call graph for this function:

The documentation for this class was generated from the following file: