Ответы пользователя по тегу CodeIgniter
  • Русскоязычные ЧПУ в CodeIgniter?

    blazer
    @blazer
    можно перенаправлять все запросы с русскими буквами на контроллер, который их будет разбирать

    $route['([-_.,a-z0-9а-я/]+)'] = "router/$1";

    да, и еще нужно расширить модуль Routes, т.к. там по умолчанию нет поддержки UTF. Сохраняем следующее в application/core/MY_Router.php

    <?php

    class MY_Router extends CI_Router
    {

    /**
    * Parse Routes
    *
    * This function matches any routes that may exist in
    * the config/routes.php file against the URI to
    * determine if the class/method need to be remapped.
    *
    * @access private
    * @return void
    */
    function _parse_routes()
    {
    // Turn the segment array into a URI string
    $uri = implode('/', $this->uri->segments);

    // Is there a literal match? If so we're done
    if (isset($this->routes[$uri]))
    {
    return $this->_set_request(explode('/', $this->routes[$uri]));
    }

    // Loop through the route array looking for wild-cards
    foreach ($this->routes as $key => $val)
    {
    // Convert wild-cards to RegEx
    $key = str_replace(':any', '.+', str_replace(':num', '[0-9]+', $key));
    // ADDED STRING
    $uri = urldecode($uri);
    // Does the RegEx match?
    if (preg_match('#^'.$key.'$#ui', $uri))
    {
    // Do we have a back-reference?
    if (strpos($val, '$') !== FALSE AND strpos($key, '(') !== FALSE)
    {
    $val = preg_replace('#^'.$key.'$#ui', $val, $uri);
    }

    return $this->_set_request(explode('/', $val));
    }
    }

    // If we got this far it means we didn't encounter a
    // matching route so we'll set the site default route
    $this->_set_request($this->uri->segments);
    }

    }

    ?>
    Ответ написан
    2 комментария