I have the follow code, which get $_GET and make division by controller, action and params
http://localhost/controller/action/param1/param2 $url = explode('/', $_GET['url']); $urlSize = count($url); $filter = $this->factory('Core\Security\Filter'); if($urlSize >= 1) { $controller = $filter->replace($url[0], 'friendly-url'); if($urlSize >= 2) { $action = $filter->replace($url[1], 'friendly-url'); if($urlSize >= 3) { unset($url[0], $url[1]); foreach($url as $index => $param) { $params[] = $filter->replace($param, 'friendly-url'); } } } } Core\Security\Filter->replace() which I am developing right now:
public function replace($data = null, $type = 'alphanumeric') { /* @TODO, implement regex by type numeric $regex = '/^[[:digit:]]$/'; alphanumeric $regex = '/^[[:alnum:]]$/'; friendly-url $regex = '/[^a-zA-Z0-9_-]+/'; $replace = '-' username $regex = '/^[^a-zA-Z0-9_-.]{3,32}+'; email $regex = '/^[[a-zA-Z0-9_-.]{1,96}]+@[a-zA-Z0-9-]{2,64}+(?:\.[a-zA-Z0-9-]+)*$/'; */ } Ok, the problem I have is: How to get urls with this format:
http://localhost/controller/action/param1/param2:value2 $param array:
Array( [0] => param1 [1] => Array( [param2] => value2 ) ) SOLVED WITH THIS:
foreach($url as $index => $param) { if(strstr($param, ':')) { $subParam = explode(':', $param, 2); $this->_request['params'][][$subParam[0]] = $filter->replace($subParam[1], 'friendly-url-param'); } else { $this->_request['params'][] = $filter->replace($param, 'friendly-url-param'); } }
filter_var($str, FILTER_VALIDATE_EMAIL)instead of a regex that does not match a whole bunch of valid email addresses, a subject that has been covered here at lengthFILTER_SANITIZE_EMAILbecause, I want the sanitized e-mail, not to check if is valid or not.