Как распознать русские буквы

140
29 января 2022, 20:30

Имеется такой код:

class Router 
{ 
	protected $routes = array(); 
	protected $params = array(); 
	 
	public function __construct() 
	{ 
		$arr = require 'config/routesConfig.php'; 
		foreach($arr as $key => $val) 
		{ 
			$this->add($key, $val); 
		} 
	} 
	 
	public function add($route, $params) 
	{ 
		$route = preg_replace('/{([a-z]+):([^\}]+)}/', '(?P<\1>\2)', $route); 
		$route = '#^'.$route.'$#'; 
		$this->routes[$route] = $params; 
	} 
 
	public function match() 
	{ 
		$url = trim($_SERVER['REQUEST_URI'], '/'); 
        foreach ($this->routes as $route => $params)  
		{ 
            if (preg_match($route, $url, $matches)) 
			{ 
                foreach ($matches as $key => $match)  
				{ 
                    if (is_string($key))  
					{ 
                        if (is_numeric($match))  
						{ 
							$match = (int) $match; 
                        } 
                        $params[$key] = $match; 
                    } 
                } 
                $this->params = $params; 
                return true; 
            } 
        } 
        return false; 
	} 
	 
	public function run() 
	{ 
		if($this->match()) 
		{ 
			$path = 'controllers\\'.ucfirst($this->params['controller']).'Controller'; 
			if(class_exists($path)) 
			{ 
				$action = $this->params['action'].'Action'; 
				if(method_exists($path, $action)) 
				{ 
					$controller = new $path($this->params); 
					$controller->$action(); 
				} 
				else 
				{ 
					View::errorCode(404); 
				} 
			} 
			else 
			{ 
				View::errorCode(404); 
			} 
		} 
		else 
		{ 
			View::errorCode(404); 
		} 
	} 
}
config/routesConfig.php содержит :

return array(
'search/{text:\w+}' => array(
    'controller' => 'main',
    'action' => 'search',
),
);

{text:\w+} это именованная подмаска. Она работает только с английскими буквами. Как переделать что бы работала и с русскими? Я так понял, что нужно добавить /u, но у меня не получается

Answer 1

Да, верно, необходимо строку

$route = '#^'.$route.'$#';

исправить на строку

$route = '#^'.$route.'$#u';

После этого всё должно заработать ка Вы хотите.

READ ALSO
Импорт и обработка больших объемов данных на php

Импорт и обработка больших объемов данных на php

Задача заключается в импорте больших объемов данных в бд, во время импорта, или после, будет запускаться индексация полученных данных машиной...

87
сайт не видит сессию

сайт не видит сессию

уважаемые знатоки! У меня есть страница aloginphp, на которой должна происходить авторизация администратора сайта

94
Как создать таблицу с пустыми полями

Как создать таблицу с пустыми полями

Мне нужно создать пустую таблицу на ReadbeanphpТо есть описать названия полей и их типы

155
убрать переход по прямой ссылке

убрать переход по прямой ссылке

Есть у меня сайт с единой точкой входа, но при попытке перейти по прямой ссылке можно зайти в закрытые разделы сайтаКак можно запретить переходить...

81