lithium\util\Text::clean()
Cleans up a Text::insert() formatted string with given $options depending
on the 'clean' option. The goal of this function is to replace all whitespace
and unneeded mark-up around place-holders that did not get replaced by Text::insert().
Parameters
-
string
$strThe string to clean.
-
array
$optionsAvailable options are:
'after': characters marking the end of targeted substring.'andText': (defaults totrue).'before': characters marking the start of targeted substring.'clean':trueor an array of clean options:'gap': Regular expression matching gaps.'method': Either'text'or'html'(defaults to'text').'replacement': Text to use for cleaned substrings (defaults to'').'word': Regular expression matching words.
Returns
stringThe cleaned string.
Source
public static function clean($str, array $options = []) {
if (is_array($options['clean'])) {
$clean = $options['clean'];
} else {
$clean = [
'method' => is_bool($options['clean']) ? 'text' : $options['clean']
];
}
switch ($clean['method']) {
case 'text':
$clean += [
'word' => '[\w,.]+',
'gap' => '[\s]*(?:(?:and|or|,)[\s]*)?',
'replacement' => ''
];
$before = preg_quote($options['before'], '/');
$after = preg_quote($options['after'], '/');
$kleenex = sprintf(
'/(%s%s%s%s|%s%s%s%s|%s%s%s%s%s)/',
$before, $clean['word'], $after, $clean['gap'],
$clean['gap'], $before, $clean['word'], $after,
$clean['gap'], $before, $clean['word'], $after, $clean['gap']
);
$str = preg_replace($kleenex, $clean['replacement'], $str);
break;
case 'html':
$clean += [
'word' => '[\w,.]+',
'andText' => true,
'replacement' => ''
];
$kleenex = sprintf(
'/[\s]*[a-z]+=(")(%s%s%s[\s]*)+\\1/i',
preg_quote($options['before'], '/'),
$clean['word'],
preg_quote($options['after'], '/')
);
$str = preg_replace($kleenex, $clean['replacement'], $str);
if ($clean['andText']) {
return static::clean($str, [
'clean' => ['method' => 'text']
] + $options);
}
break;
}
return $str;
}