Русский язык в URL

Материал из Wiki

Перейти к: навигация, поиск

Для использования русских символов в URL необходимо в файле конфигурации выставить настройки следующим образом:

$config['permitted_uri_chars'] = '?a-zа-я=\s&0-9~%\.:_-';

Никаких изменений в классах фреймворка не требуется.

При использовании параметров с русскими символами их необходимо декодировать:

function tag($tag = null, $page = 1){
        if($tag==null) redirect();
	
	$tag = rawurldecode($tag);


100% решение проблемы русских символов в URL

1. Откройте application/config/config.php, найдите там

$config['permitted_uri_chars'] = '?a-zа-я=\s&0-9~%\.:_-';

измените на

$config['permitted_uri_chars'] = '?A-Za-zА-Яа-я=\s&0-9~%\.:_-';

2. Откройте index.php (в корневой папке) и в самом начале добавьте строку

setlocale(LC_ALL, 'ru_RU.UTF8');

3. В папке application/libraries создайте файл MY_URI.php со следующим содержанием (как предложил Ladygin, только немножко измененное):

<?php

class MY_URI extends CI_URI
{
    function _filter_uri($str)
    {
        if ($str != '' AND $this->config->item('permitted_uri_chars') != '')
        {
            if ( ! preg_match("|^[".preg_quote($this->config->item('permitted_uri_chars'))."]+$|i", rawurlencode($str)))
            {
                exit('The URI you submitted has disallowed characters.');
            }
        }
            
        return $str;
    }
}

?>

Примечание: Ladygin предложил использовать ключ "u" (поддержку юникода) в качестве модификатора шаблона регулярного выражения для preg_match, т.е.

if ( ! preg_match("|^[".preg_quote($this->config->item('permitted_uri_chars'))."]+$|iu", $str))

rawurlencode в оригинальном коде Codeigniter не используется


4. Все файлы проекта переводим в кодировку UTF-8.

Если вы создаёте новый проект и используете оригинальный дистрибутив Codeigniter, то вам нужно лишь следить, чтобы новые файлы с русскими символами были в кодировке UTF-8. Если у вас уже есть проект в отличной от UTF-8 кодировке, то их нужно конвертировать.


Ссылки

Личные инструменты