4
* Validates contents based on NMTOKENS attribute type.
6
class HTMLPurifier_AttrDef_HTML_Nmtokens extends HTMLPurifier_AttrDef
9
public function validate($string, $config, $context) {
11
$string = trim($string);
13
// early abort: '' and '0' (strings that convert to false) are invalid
14
if (!$string) return false;
16
$tokens = $this->split($string, $config, $context);
17
$tokens = $this->filter($tokens, $config, $context);
18
if (empty($tokens)) return false;
19
return implode(' ', $tokens);
24
* Splits a space separated list of tokens into its constituent parts.
26
protected function split($string, $config, $context) {
28
// do the preg_match, capture all subpatterns for reformulation
30
// we don't support U+00A1 and up codepoints or
31
// escaping because I don't know how to do that with regexps
32
// and plus it would complicate optimization efforts (you never
34
$pattern = '/(?:(?<=\s)|\A)'. // look behind for space or string start
35
'((?:--|-?[A-Za-z_])[A-Za-z_\-0-9]*)'.
36
'(?:(?=\s)|\z)/'; // look ahead for space or string end
37
preg_match_all($pattern, $string, $matches);
42
* Template method for removing certain tokens based on arbitrary criteria.
43
* @note If we wanted to be really functional, we'd do an array_filter
44
* with a callback. But... we're not.
46
protected function filter($tokens, $config, $context) {
4
* Validates contents based on NMTOKENS attribute type.
6
class HTMLPurifier_AttrDef_HTML_Nmtokens extends HTMLPurifier_AttrDef
10
* @param string $string
11
* @param HTMLPurifier_Config $config
12
* @param HTMLPurifier_Context $context
15
public function validate($string, $config, $context)
17
$string = trim($string);
19
// early abort: '' and '0' (strings that convert to false) are invalid
24
$tokens = $this->split($string, $config, $context);
25
$tokens = $this->filter($tokens, $config, $context);
29
return implode(' ', $tokens);
33
* Splits a space separated list of tokens into its constituent parts.
34
* @param string $string
35
* @param HTMLPurifier_Config $config
36
* @param HTMLPurifier_Context $context
39
protected function split($string, $config, $context)
42
// do the preg_match, capture all subpatterns for reformulation
44
// we don't support U+00A1 and up codepoints or
45
// escaping because I don't know how to do that with regexps
46
// and plus it would complicate optimization efforts (you never
48
$pattern = '/(?:(?<=\s)|\A)' . // look behind for space or string start
49
'((?:--|-?[A-Za-z_])[A-Za-z_\-0-9]*)' .
50
'(?:(?=\s)|\z)/'; // look ahead for space or string end
51
preg_match_all($pattern, $string, $matches);
56
* Template method for removing certain tokens based on arbitrary criteria.
57
* @note If we wanted to be really functional, we'd do an array_filter
58
* with a callback. But... we're not.
59
* @param array $tokens
60
* @param HTMLPurifier_Config $config
61
* @param HTMLPurifier_Context $context
64
protected function filter($tokens, $config, $context)