/** * Clean a string * * @static * @param string $str string to clean * @param boolean $deep If true replace '.' too * @param boolean $negative If true replace - with _ * @return string */ public static function unspace($str, $deep = false, $negative = false) { $str = trim($str); $str = X4Utils_helper::to7bit($str, 'UTF-8'); $str = strtolower(html_entity_decode($str)); if (function_exists('preg_replace_callback')) { // strip special chars $str = preg_replace_callback('/[àèéìòùç]+/is', function ($m) { $r = ''; switch ($m[0]) { case 'à': $r = 'a'; break; case 'è': case 'é': $r = 'e'; break; case 'ì': $r = 'i'; break; case 'ò': $r = 'o'; break; case 'ù': $r = 'u'; break; case 'ç': $r = 'c'; break; } return $r; }, $str); // clean $regex = $deep ? '/[^a-z0-9-]+/is' : '/[^a-z0-9-\\/\\.]+/is'; $res = preg_replace_callback($regex, function ($m) { return '-'; }, $str); // remove duplicates $res = preg_replace_callback('/-(-*)/', function ($m) { return '-'; }, $res); } else { $str = preg_replace('/[àèéìòùç]+/e', '-', $str); // clean $res = $deep ? preg_replace('/[^a-z0-9-\\.]+/', '-', $str) : preg_replace('/[^a-z0-9-\\/\\.]+/', '-', $str); // remove duplicates $res = preg_replace('/-(-*)/', '-', $res); } return $negative ? str_replace('-', '_', $res) : $res; }