Space в Url-a

teroristd

Registered
Здравейте, имам следната ситуация. Работя с чисти Url-и от типа на /localhost/Site/controller/method/params/. Когато напиша в Url-а контролер или метод които не съществуват, редиректвам към ерор страница. Обаче ако напиша контролер примерно така index asd(със space между тях) ми вади класическа грешка. Как мога да прихвана ситуацията, за да си визуализирам ерор страницата.

Код:
$this->_params = explode('/', $this->_URI);
        if ($this->_params[0]) {
            $this->_controller = strtolower($this->_params[0]);
            if(is_file($this->_controller) ){
                $app = \application\App::getInstance()->displayError(404);
                exit;
            }
            if ($this->_params[1]) {
                $this->_method = strtolower($this->_params[1]);
                if (!method_exists($this->_namespace . '\\' . $this->_controller, $this->_method)) {
                    $app = \application\App::getInstance()->displayError(404);
                    exit;
                }
                unset($this->_params[0], $this->_params[1]);
            } else {
                $this->_method = strtolower($this->_config->app_config_file['default_method']);
            }
        } else {
            $this->_controller = strtolower($this->_config->app_config_file['default_controller']);
            $this->_method = strtolower($this->_config->app_config_file['default_method']);
        }



        $this->_file = $this->_namespace . '\\' . ucfirst($this->_controller);
        $this->_loadController = new $this->_file();
        $this->_loadController->{$this->_method}();
 
Eто ти едно просто примерче:
PHP:
$test = '/localhost/Site/controller/method/ params/';
if(strpos($test, ' ') !== false){
	echo 'savpada';
}
Вероятно ще трябва да стане така:
PHP:
if(strpos($this->_URI, ' ') !== false){
	echo 'Prihvanata parvona4alna greshka';
}else{
$this->_params = explode('/', $this->_URI);
        if ($this->_params[0]) {
            $this->_controller = strtolower($this->_params[0]);
            if(is_file($this->_controller) ){
                $app = \application\App::getInstance()->displayError(404);
                exit;
            }
            if ($this->_params[1]) {
                $this->_method = strtolower($this->_params[1]);
                if (!method_exists($this->_namespace . '\\' . $this->_controller, $this->_method)) {
                    $app = \application\App::getInstance()->displayError(404);
                    exit;
                }
                unset($this->_params[0], $this->_params[1]);
            } else {
                $this->_method = strtolower($this->_config->app_config_file['default_method']);
            }
        } else {
            $this->_controller = strtolower($this->_config->app_config_file['default_controller']);
            $this->_method = strtolower($this->_config->app_config_file['default_method']);
        }



        $this->_file = $this->_namespace . '\\' . ucfirst($this->_controller);
        $this->_loadController = new $this->_file();
        $this->_loadController->{$this->_method}(); 
}
 
Мерси за отговора. Аз в крайна сметка го направих така.
$this->_controller = str_replace(' ', '', $this->_controller);
Но се чудя дали не е по удачно да го направя със strpos. Ще трябва да напиша два три реда повече, но ако е по бързо и си заслужава ще го преправя.
 
teroristd каза:
Мерси за отговора. Аз в крайна сметка го направих така.
$this->_controller = str_replace(' ', '', $this->_controller);
Но се чудя дали не е по удачно да го направя със strpos. Ще трябва да напиша два три реда повече, но ако е по бързо и си заслужава ще го преправя.
Според мен ще е малко по-бързо със strpos защото той проверява директно дали има в стринга един или повече спейса, докато реплейства ги замества. Зависи за какво точно искаш да го ползваш. Решението ти може да е по-удачно много зависи как ще го ползваш. Тествай с микротайм и виж кое ще ти свърши по-добра работа. Все пак двете функциии правят различни неща. :)
 
Значи ще го оставя така. Ползвам го само ако някой въведе урл със спейс което, би трябвало да е изключително рядък случай. Мерси +1.
 
teroristd каза:
Значи ще го оставя така. Ползвам го само ако някой въведе урл със спейс което, би трябвало да е изключително рядък случай. Мерси +1.
Ммм както ти казах зависи за какво ще го ползваш с твоят начин филтрираш и продължаваш докато със strpos го разглеждаш като отделен случай. Просто трябва сам да решиш. :)
 
Със strpos може би е по-добре. Кода ми става по-чист :) , въпреки че аз и него го ползвам като филтър. Директно ги мятам към ерор страница.
 
teroristd каза:
Със strpos може би е по-добре. Кода ми става по-чист :) , въпреки че аз и него го ползвам като филтър. Директно ги мятам към ерор страница.
Да точно за това ти дадох и примерчето горе. Реално това е най-лесното решение за теб. :)
 

Back
Горе