lithium\util\String::clean()
Cleans up a String::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 String::insert()
.
Parameters
-
string
$str
The string to clean.
-
array
$options
Available options are:
'after'
: characters marking the end of targeted substring.'andText'
: (defaults totrue
).'before'
: characters marking the start of targeted substring.'clean'
:true
or an array of clean options:'gap'
: Regular expression matching gaps.'method'
: Either'text'
or'html'
(defaults to'text'
).'replacement'
: String to use for cleaned substrings (defaults to''
).'word'
: Regular expression matching words.
Returns
stringThe cleaned string.
Source
public static function clean($str, array $options = array()) {
if (is_array($options['clean'])) {
$clean = $options['clean'];
} else {
$clean = array(
'method' => is_bool($options['clean']) ? 'text' : $options['clean']
);
}
switch ($clean['method']) {
case 'text':
$clean += array(
'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 += array(
'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, array(
'clean' => array('method' => 'text')
) + $options);
}
break;
}
return $str;
}